Bascom-potrzebna porada

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Manerus
-
Posty: 52
Rejestracja: 05 cze 2011, 20:31
Lokalizacja: Wrocław

Bascom-potrzebna porada

Post autor: Manerus » 12 cze 2011, 9:44

Witam

Mam napisany kod źródłowy pod sterownik grzałek wentyl temp wilgotność , jednakże nie ma kilku wprowadzeń jakie bym chciał.
Np. Nastawienie pokrętłem stały typ pracy ( do wybory 3 tryby pracy czyli zakres temp i wilgotność )


Potrzebuje porady jakie "pokrętło" wybrać

Jak zapisać kod pod "pokrętło" i od dzielić tryby pracy ?
Jak zakończyć prace czujnika i czynność oraz żeby przeszedł do następnego z danego tryby pracy ?
end if ?
żeby powtórzył prace z trybu od nowa ?

Kod: Zaznacz cały

******Czujnik środek****
DO
   1wreset 
   1wwrite &H55 
   1wverify Dsid2
    Waitms 750                                           
   1wwrite &HBE 
   

If temp >32          AND  <34 Then
   PWM1c=200
Else
   IF Temp >30 
   Set Grzałka middle 
PWM1C =150                 
Else
IF temp<35
        Reset grzałka 
If temp <36
          PWM1c=255
ENd if
Przejscie od nastepnego czujnika moge dać "do" i zakończyć całą prace trybu komendą loop żeby przeszło do 1 czujnika ?w odstepie

Do




Pozdrawiam
Ostatnio zmieniony 19 cze 2011, 10:47 przez Manerus, łącznie zmieniany 1 raz.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 12 cze 2011, 9:50

Trochę to jak dla mnie niezbyt jasno opisałeś. Całość dość niezrozumiała i chaotyczna. Określ to może w podpunktach czy jakoś tak.

Jeśli chodzi o same tryby pracy to możesz użyć podprogramów.

Kod: Zaznacz cały

tryb1:
return

tryb2:
return

tryb3:
return
itd.
Co do samego przejścia z trybu do trybu to rozwiązań jest masa. Wszystko zaleeżne jak chcesz to wywoływać, ile przycisków chcesz wykorzystać itp, itd.

Manerus
-
Posty: 52
Rejestracja: 05 cze 2011, 20:31
Lokalizacja: Wrocław

Post autor: Manerus » 12 cze 2011, 10:02

wybranie trybu pracy i zakresu temp chce od dzielić pokrętłem
np jak ustawie na LATO to wentylatory będą wiały mocniej a grzałki w ogóle nie włączały 20c

np na zimę to grzałki będą się włączać i zakres temp 25 c

nie wiem jak napisać kod pod taki przełącznik ? pokrętło np jak w pralce

żeby czynność była powtarzana cały czas aż nie przekręcę na inną opcje
a sterownik sam regulował różnice temp od wymaganych

Awatar użytkownika
Pikczu
Użytkownik
Posty: 754
Rejestracja: 18 lip 2005, 18:33
Lokalizacja: Dublin
Kontakt:

Post autor: Pikczu » 12 cze 2011, 11:16

Manerus, to jest źle napisane nie będzie to działać w większym kodzie tzn może będzie ale cały kod będzie źle działał.
Jak zwykle każdemu to powtarzamy zamieść cały kod i zaznacz zmiany naniesione przez Ciebie.
Staraj się unikać kilku pętli do loop w kodzie. A najlepiej użyj tylko jednej.
I koniecznie pozbądź się tego waitms750 Wyobraź sobie ze zatrzymujesz działanie całego kodu na 750ms na takie coś mogą sobie pozwolić początkujący.
Pozdrawiam

----------------dodane 11:20-----------------------------------
A pokrętło to jest akurat pikuś szczegół nad którym się ma nawet co zastanawiać
jakiś pin i zmiana stanu jakiejś flagi jeśli flaga ustawiona tryb 1 jeśli nie tryb 2.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 12 cze 2011, 12:59

Dokładnie jak pisze wyżej Pikczu. Łatwiej analizuje się kod mając trochę więcej danych jniż to co podałeś, a sam wybór zima lato to też nie kłopot.

Zresztą nie będę się rozpisywał bo szczegółowo opisał wyżej kolega.

Jak chcesz prosty sterownik domowy to na stronie Mirleya, -> O TU <- masz gotowy jakiś sterowniczek. Może coś Ci się przyda.

Manerus
-
Posty: 52
Rejestracja: 05 cze 2011, 20:31
Lokalizacja: Wrocław

Post autor: Manerus » 12 cze 2011, 13:55

z pętlą do loop zamierzałem zrobić tylko na tryby tzn
Lato

Do
1 czujnik i czynności
End
Do
2 czujnik i czynności
end
Do
3 czujnik i czynność
end
Do
4 ------ || --------
End

I dopiero loop ... może tak być ? bo chce żeby po kolei sprawdzał temp i robił czynności




Dzięki za poradę :mrgreen:


P.S. polecicie coś do poczytania na temat FLAG ?

Awatar użytkownika
Pikczu
Użytkownik
Posty: 754
Rejestracja: 18 lip 2005, 18:33
Lokalizacja: Dublin
Kontakt:

Post autor: Pikczu » 12 cze 2011, 14:52

źle
DO musisz zamknąć loop więc to nie będzie działać po za tym każde wyskok z Do loop odkłada na stos informacje kilka takich do loop-ów i procek będzie Ci się sam restartował.

Manerus, Napisz jak najdokładniej potrafisz co to ma robić krok po kroku może graficznie to rozrysuj.

jakie czujniki i jakie czynności w lecie a jakie w zimie.

Po za tym czujniki DS18B20 obsługuje się wszystkie na raz a potem tylko wykorzystujesz dane z nich pobrane:

Kod: Zaznacz cały

1wreset 
   1wwrite &HCC                                             'skip all 
   1wwrite &H44 
To każe sprawdzić temperaturę wszystkim czujnikom na lini 1 wire
Więc robisz to raz

co 750ms lub 1 s i nie używasz waitms750 tylko timera który po odliczeniu czasu
zrobi

Kod: Zaznacz cały

If Czas >= 100 Then 'to jest miejsce w którym podjęta jest decyzja o tym czy robić czy nie robić odczytu danych z czujnika zamiast waitms750 użyty jest timer.

   Disable Timer0 

   1wreset 
   1wwrite &H55 
   1wwrite Ds1(1) , 8                                       'sending address of first ds sensor 
   1wwrite &HBE 
   I1(1) = 1wread(2) 


   1wreset 
   1wwrite &H55 
   1wwrite Ds2(1) , 8                                       'sending address of second ds sensor 
   1wwrite &HBE 
   I2(1) = 1wread(2) 

   1wreset 
   1wwrite &H55 
  1wwrite Ds3(1) , 8                                        'sending address of third ds sensor 
   1wwrite &HBE 
   I3(1) = 1wread(2) 
pobierze dane z pamięci czujników i zapisze. W tym przypadku kolejno zapisuje do
I1(1), I2(1) , I3(1)

zmienne I1(2)-odpowiada czujnikowi DS18B20 i to jest zmienna tablicowa o rozmiarze 2 byteów na właśnie dwa byte-y zawierające informacje o temperaturze.

Bez sensem jest dawanie tego w odrębnych do loop-ach

Teraz kolejna część jak już pobrałeś dane musisz je obrobić tak żeby były użyteczne
Musisz zamienić miejscami.

Kod: Zaznacz cały

  Temp1 = I1(2)                                            'Most significant byte of temp 
   Shift Temp1 , Left , 8                                   'shift left 
   Temp1 = Temp1 + I1(1) 
   Shift Temp1 , Right , 4 

   Temp2 = I2(2)                                            'Most significant byte of temp 
   Shift Temp2 , Left , 8                                   'shift left 
   Temp2 = Temp2 + I2(1) 
   Shift Temp2 , Right , 4 

   Temp3 = I3(2)                                            'Most significant byte of temp 
   Shift Temp3 , Left , 8                                   'shift left 
   Temp3 = Temp3 + I3(1) 
   Shift Temp3 , Right , 4 
'  ****konwersja temp dla wszystkich dsow** 
'Teraz dopiero wysyłasz informację do czujników żeby zaczęły pobierać temperaturę co zajmie około 750ms

Kod: Zaznacz cały

   1wreset 
   1wwrite &HCC                                             'skip all 
   1wwrite &H44 
Więc masz około 1 sekundy na zrobienie innych pierdół

[ Dodano: 2011-06-15, 20:51 ]
Widzę że autor zapomniał o wątku.

Manerus
-
Posty: 52
Rejestracja: 05 cze 2011, 20:31
Lokalizacja: Wrocław

Post autor: Manerus » 20 gru 2011, 7:19

Tylko na jakiś czas :D dość spory ale cóż może jeszcze podpowiesz


Dobrze doradziłeś a co w przypadku kiedy chce zrobić tak

do trzech czujników góra środek dół podepnę grzałki. Każda grzałka to inna temperatura

jak je ustawić zapisać pod pokrętło na lato zimę który to tyrp zapamięta różnice w sumie 6 temperatur na 2 pory

Awatar użytkownika
Pikczu
Użytkownik
Posty: 754
Rejestracja: 18 lip 2005, 18:33
Lokalizacja: Dublin
Kontakt:

Post autor: Pikczu » 20 gru 2011, 19:31

Nie mam pojęcia o czym ty myślisz.
Co z tego że 3 grzałki i lato zima i może nawet jesień.
Napisz coś więcej co dokładnie chcesz zrobić.
Ostatnio zmieniony 20 gru 2011, 22:58 przez Pikczu, łącznie zmieniany 1 raz.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 20 gru 2011, 19:44

Pikczu pisze:Nie mam pojęcia o czym ty myślisz.
Co z tego ze czy grzałki i lato zima i może nawet jesień.
Napisz coś więcej co dokładnie chcesz zrobić.
Nie nie nie Pikczu, niech nie pisze o co chodzi tylko niech chociaż przeczytać cokolwiek o programowaniu w bascomie. Bo z tego co pisze widać że nie ma zielonego pojęcia o czym pisze.

ODPOWIEDZ