Witam,
Czy ktoś pomoże mi uruchomić ten termostat? Płytka mojego autorstwa atmega8 6 wyświetlaczy led
Działa poprawnie z wsadem termometru uniwersalnego lecz niestety jak zaprogramuję wsadem termostatu pobranym z projektu termometr uniwersalny to wyświetla mi tylko wszystkie segmenty led na wszystkich wyświetlaczach. Co robić? Od czego zacząć?
$regfile = "m8def.dat"
$crystal = 12000000
Config Portb = &B11100101 : Portb = &B11111111 '1 3 i 4 jako wejście reszta wyjścia
Config Portd = &B11111111 : Portd = &B11111111 'wszystkie wyjścia
Config Portc = &B11111111 : Portc = &B11111111 'wszystkie wyjścia
Config 1wire = Pinb.2
' * * * * * * * * * * * * * * * * * * * * * * * * * * *
Config Timer0 = Timer , Prescale = 64
Enable Timer0 : On Timer0 Przerwanie0
Enable Interrupts
'Load Timer0 , 250
W1 Alias Portc.0
W2 Alias Portc.1
W3 Alias Portc.2
W4 Alias Portc.3
W5 Alias Portc.4
W6 Alias Portc.5
' ********************************************************************
Dim Lsb As Byte
Dim Msb As Byte
Dim Temp1 As Byte
Dim Temp2 As Byte
Dim Nr_wysw As Byte
Dim Co4ms As Byte , Co100ms As Byte , Co1s As Byte
Dim Wysw As Word , Wysw1 As Byte , Wysw10 As Byte , Wysw100 As Byte , Wysw1000 As Byte , Wysw10000 As Byte , Wysw100000 As Byte
Dim Wysw_pomoc As Word
Dim Tempa As Word
Dim Tempu As Word
Dim Histereza As Byte
Dim Mux As Byte
Dim Poz_menu As Byte
Dim Sw_licz(3) As Byte
Dim Tempp As Word 'zmiena pomocnicza
Dim Autopowrot As Byte
Dim Zezw_wysw As Bit , Zezw_przyciski As Bit
Dim Pomiar_odczyt As Bit
Dim Minus As Bit
Dim Ur As Bit
Dim Miganie As Bit
Dim Z As Bit
Dim Stan As Byte
Dim Mig As Byte
'Dim Pk As Bit
Dim Kr5 As Bit ' pomocnicza do migania
Dim P3 As Byte
Dim P1 As Byte
Up Alias Pinb.1
Down Alias Pinb.3
Ok Alias Pinb.4
Pk Alias Pinb.5
Reset Pk
'****************************
'Wartosci Poczatkowe
'****************************
P3 = 32
P1 = 0
Reset Z
Set Up
Set Down
Set Ok
Reset Pomiar_odczyt
Reset Ur
Poz_menu = 0
Tempu = 11
Histereza = 1
Wysw1 = 191
Wysw10 = 191
Wysw100 = 191
Wysw1000 = 191
Wysw10000 = 191
Wysw100000 = 191
Stan = 1
'****************************
'Petla glowna
'****************************
Do
If Zezw_wysw = 1 Then
Reset Zezw_wysw 'co 4ms
Select Case Poz_menu
Case 0:
Wysw = Tempa
Case 1:
If Miganie = 1 Then Wysw = Tempu Else Wysw = 10000
Case 2:
If Miganie = 1 Then Wysw = Histereza Else Wysw = 10000
End Select
If Ur = 1 Then Gosub Przelicz
Gosub Wyswietl
End If
If Zezw_przyciski = 1 Then
Reset Zezw_przyciski 'co 100ms
If Down = 0 Then 'plus
Incr Sw_licz(1)
If Sw_licz(1) = 10 Then
Sw_licz(1) = 5
Select Case Poz_menu
Case 0:
Poz_menu = 1
Case 1:
If Tempu < 900 Then Incr Tempu
Case 2:
If Histereza < 100 Then Incr Histereza
End Select
Autopowrot = 0
End If
Else
Sw_licz(1) = 8
End If
If Up = 0 Then ' And Down = 0 Then 'minus
Incr Sw_licz(2)
If Sw_licz(2) = 10 Then
Sw_licz(2) = 5
Select Case Poz_menu
Case 0:
Poz_menu = 2
Case 1:
If Tempu > 10 Then Decr Tempu
Case 2:
If Histereza > 0 Then Decr Histereza
End Select
Autopowrot = 0
End If
Else
Sw_licz(2) = 8
End If
If Ok = 0 Then 'Up = 1 And Down = 1 Then 'menu
Incr Sw_licz(3)
If Sw_licz(3) = 10 Then
Sw_licz(3) = 5
Incr Poz_menu
If Poz_menu = 3 Then Poz_menu = 0
Autopowrot = 0
End If
Else
Sw_licz(3) = 8
End If
Gosub Sterowanie
If Poz_menu <> 0 Then 'jezeli jest w menu
Incr Autopowrot
If Autopowrot = 200 Then Poz_menu = 0 'wraca do wysw. temperatury po 50* 0,1s (5sekund)
End If
End If
Loop
End
'****************************
'Przerwanie timer0
'****************************
Przerwanie0:
Incr Co4ms
If Co4ms = 2 Then
Co4ms = 0
'*************************************** co 4ms
Set Zezw_wysw
Incr Co100ms
If Co100ms = 10 Then
Co100ms = 0
'*************************************** co 100 ms
Set Zezw_przyciski 'zezwolenie obslugi przyciskow
Incr Mig
If Mig = 5 Then
Mig = 0
Miganie = Not Miganie 'umozliwia miganie cyfr podczas wyswietlania menu
End If
Incr Co1s
If Co1s = 5 Then
Co1s = 0
'*************************************** co 1s
Pomiar_odczyt = Not Pomiar_odczyt
Disable Interrupts
1wreset
If Pomiar_odczyt = 1 Then
1wwrite &HCC
1wwrite &H44
Else
If Err = 0 Then
1wwrite &HCC
1wwrite &HBE
Lsb = 1wread():
Msb = 1wread():
Minus = Msb.7
Tempa = Msb * 256
Tempa = Tempa + Lsb
If Minus = 1 Then
Tempa = Not Tempa
Tempa = Tempa + 1
End If
Tempa = Tempa * 10 'temperatura *10
Tempa = Tempa / 16 'wartosc 123 dla 12.3 stopnia itp.
' Temp1 = 1wread(1)
' Temp2 = 1wread(2)
' Temp1 = Temp1 And 240
' Rotate Temp1 , Right , 4
' Temp2 = Temp2 And 7
' Rotate Temp2 , Left , 4
' Tempa = Temp1 Or Temp2
If Ur = 0 Then Ur = 1
Else
Tempa = 10000 'Err wyswietli wyswietlacz potem
End If
End If
Enable Interrupts
'***************************************
End If
'***************************************
End If
'***************************************
End If
Return
'****************************
'Inne Etykiety
'****************************
Przelicz:
If Wysw < 1000 Then
Wysw_pomoc = Wysw Mod 10
Wysw1 = Wysw_pomoc
Wysw = Wysw / 10
Wysw1000 = Wysw1
Wysw_pomoc = Wysw Mod 10
Wysw10 = Wysw_pomoc
Wysw = Wysw / 10
Wysw10000 = Wysw10
Wysw_pomoc = Wysw Mod 10
Wysw100 = Wysw_pomoc
Wysw100000 = Wysw100
If Wysw100 = 0 Then Wysw100 = 10 'wygaszenie zera wiodacego
If Z = 0 Then
'wygaszenie zera wiodacego
Wysw1 = Lookup(wysw1 , Tabela)
Wysw10 = Lookup(wysw10 , Tabela)
Wysw100 = Lookup(wysw100 , Tabela)
Wysw1000 = Lookup(wysw1000 , Tabela)
Wysw10000 = Lookup(wysw10000 , Tabela)
Wysw100000 = Lookup(wysw100000 , Tabela)
Else
If Wysw = 10000 Then
Wysw1 = 255 'wygaszony
Wysw10 = 255 'wygaszony
Wysw100 = 255
Wysw1000 = 255
Wysw10000 = 255
Wysw100000 = 255 'wygaszony
Else
Wysw1 = 147 'Error
Wysw10 = 187 '
Wysw100 = 176 '
Wysw1000 = 147 '
Wysw10000 = 187 '
Wysw100000 = 176 '
End If
End If
End If
Return
Sterowanie:
If Pk = 0 Then 'jezeli jest wlaczony przekaznik
If Tempa >= Tempu Then Pk = 1 'jezeli tempa dochodzi do ustawionej to wyl przekaznik
Else 'jezeli wyl przekaznik
Tempp = Tempu - Histereza 'punkt wylaczenia
If Tempa < Tempp Then Pk = 0 'jezeli tempa mniejsza niz ustawiona temp. - histereza to wlacz przek.
End If
Return
Wyswietl:
Select Case Nr_wysw
Case 0:
Set W6
Portd = Wysw100000
'Portd.4 = Kr1
Reset W1
Case 1:
Set W1
Portd = Wysw10000
Portd.4 = Kr5
Reset W2
Case 2:
Set W2
Portd = Wysw1000
'Portd.4 = Kr3
Reset W3
Case 3:
Set W3
Portd = Wysw100
'Portd.4 = Kr4
Reset W4
Case 4:
Set W4
Portd = Wysw10
Portd.4 = Kr5
Reset W5
Case 5:
Set W5
Portd = Wysw1
'Portd.4 = Kr6
Reset W6
End Select
Incr Nr_wysw
If Nr_wysw = 6 Then
Nr_wysw = 0
End If
Return
Tabela:
Data 80 , 95 , 49 , 21 , 30 , 148 , 144 , 93 , 16 , 20
' 0 1 2 3 4 5 6 7 8 9
Tabela3:
Data 176 , 187 , 147 , 93 , 24 , 240
' E r o J A C
'Sterowanie:
'If Portb.0 = 0 Then 'jezeli jest wlaczony przekaznik
' If Tempa >= Tempu Then Portb.0 = 1 'jezeli tempa dochodzi do ustawionej to wyl przekaznik
' Else 'jezeli wyl przekaznik
' Tempp = Tempu - Histereza 'punkt wylaczenia
' If Tempa < Tempp Then Portb.0 = 0 'jezeli tempa mniejsza niz ustawiona temp. - histereza to wlacz przek.
' End If
'Return
'led
' a b c d e f g dp
' 1 7 5 3 2 0 6 4
'Data &B01010000 , &B01011111 , &B00110001 , &B00010101 , &B00011110 ,
'Data &B10010100 , &B10010000 , &B01011101 , &B00010000 , &B0001010
Re: Program do termostatu
Dobra... po pierwsze to na początku napisz dobrą konfiguracje portów. Nie wiem jak jest w najnowszym bascomie ale wcześniejsze wersje bardzo nie lubiły jak się pisło dwa razy konfig na pinie:
To co wyżej napisałeś lepiej zrobić tak (bo napewno działa dobrze, sprawdzałem wiele razy):
Pierwsza cyfra binarna po Config port to ustawienia typu wyprowadzenia(1-wyjście, 0-wejście), druga cyfra po port=&B.... to stan początkowy
Co do dalszej części programu to patrzyłem ale narazie nie jestm wstanie objąć tego co zmodyfikowałeś Skoro program do termometru działa Ci w tym układzie sprzętowym to napisz program jeszcze raz, a w zasadzie powklejaj odpowiednie fragmenty sprawdzając co chwilę czy działa. Najpierw dodaj procedurę do wyświetlania na 6 wyświetlaczy, niech temperatura wyświetla się dwa razy na 6 wyświetlaczach, pozwoli Ci to znaleźć błąd samemu dużo szybciej niż ja to będę chciał zrobić. Jakiś rażących problemów nie zauważyłem, jak dalej nie będzie chciało iść to pisz
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Faktycznie pomogło, przedtem
Faktycznie pomogło, przedtem procek wariował, teraz jest ok. Wyświetlam temperature tak jak pisałeś dwukrotnie 2 x 3 znaki i jest ok ale nie działa menu, brak reakcji na przyciski, mierzyłem stany na pinach procka i po naciśnięciu przycisku jest stan niski czyli jest poprawnie. Więc dlaczego nie raguje na przyciski?
Re: Przyciski
Wynika to prawdopodobnie z czytania ze złego rejestru procesora. Mikrokontroler ma dwa rejestry, jeden w którym ustawia się stany portów i drugi z którego się je czyta. Napisałeś:
a powinieneś napisać:
jak chcesz czytać stan z portu to piszesz pinx.y a jek chcesz aby stan był wystawiony to piszesz portx.y. dalszej częsci narazie nie sprawdzałem, jeśli dalej nie będzie działało to dodaj zaraz po ifie od przycisku jakąś komendę co będzie diode zaświecała i sprawdzisz czy przyciski są czytane poprawnie
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Przyciski
Coś sie ruszyło. Zmieniłem port na pin i teraz samo przeskakuje po menu, naprzemian pokazuje temperature potem ero i 05.0 po ułamku sekundy zmienia się na 04.9 i spowrotem na 05.0 . Jest reakcja na przyciski.
Menu zaczęło działać, przyciski były w programie wyzwalane wysokim a ja podaje do masy.
Coś jest nakombinowane z menu ponieważ jest 6 pozycji a wyświetlaja się tylko 3.
migotanie
Jak wyliczyć przerwania aby ledy migotały w jak najmniejszym stopniu?
Listing podmieniłem na działający ;)
Dzięki wielkie za pomoc!!!!
Następnym wyzwaniem będzie zapis nastw do pamięci eeprom ;)
Re: Przerwania i migotanie
Po pierwsze w programie wyżej masz tylko 3 pozycje w menu, temp , temp ustawiana i histereza. W kodzie więcej nie widzę. Timer ustaw tak aby cały cykl multipleksowania miał częstotliwość około 60-70Hz czyli niewiele ponad 2ms ma świecić jeden wyświetlacz. Z wstępnych oględzin wynika że timer jest dobrze ustawiony i powinien działać poprawnie, sprawdź fusebity
Zapis do eeprom to jedna linijka, zapoznaj sie w helpie do bascoma z funkcjami readeeprom zmienna, adres i writeeeprom zmienna, adres
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
menu
Jak wtedy pisałem to miałem jeszcze 6 pozycji w menu :)
Pewnie źle robię bo jak coś poprawię to edytuje listing zamieszczony w tym poście i z tego wynika to że piszę o kilku pozycjach menu a na listingu są 3, może to wprowadzać w błąd, sorrki.
Czy jest jakiś wzór aby wyliczyć ten cykl?
Na co zwrócić uwage w fusebitach?
Re: Termometr
Zamieść poniżej ten drugi kod o który pytasz z uwzględnionymi poprawkami o których mówiliśmy... Usuń z kodu większe zakomentowane fragmenty aby było go łatwo ogarnąć.
W fusebitach należy zwrócić uwagę na źródło taktowania, tutaj powinien być uC ustawiony na kwarc zewnętrzny. I jeszcze należy zwracać uwagę na dzielnik częstotliwość sprzętowy, niektóre uC mają taki dzielnik, atmega 8 akurat nie ma więc problemu też nie ma
Obliczanie timera: Jeśli fusebity masz ustawione na zewnętrzny kwarc i masz podłaczony 12000000 (12MHz) to ponieważ timer ma preskaler (Prescale = 64), to licznik timera będzie zwiększany z częstotliwośćią:
Timer0 jest 8-bitowy czyli liczy od 0 do 255 a 256 impuls zeruje licznik i generuje przerwanie, jeśli nic nie ustawiasz w przerwaniu, żadnych wartości początkowych timera to jego przerwanie wystąpi w takim przypadku z częstotliwością:
Czyli co 1,36533ms,
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
kod
Kłopot - zablokowałem procka
Bawiłem się fusse bitam i właśnie zablokowałem procka :( ustawiłem na external rc oscilator 8-12Mhz jak go odblokować bez programatora równoległego?
Re; Rc Oscylator
Mówiłem żeby nie grzebać w ustawieniach zegara jeśli są dobre :) Teraz musisz podłaczyć to na co ustawiłeś, w karcie katalogowej M8 http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf na stronie 28 i 29 jest napisane jak to podłaczyć, częstotliwość ustawiasz dobierając RC równaniem:
[tex]f = \frac{1}{3RC} [/tex]
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Zapis do pamięci
W której linijce kodu powinienem wstawić zapis wartości zmiennych histereza i tempu?
Odczyt wydaje mi sie że powinien byc przy wartościach początkowych.
Zapis do pamięci
Generalnie zapis do pamięci we wszystkich sterownikach robię zawsze w postaci Autozapisu, to znaczy:
powyższy fragment kodu umieść we fladze co 100ms, np bezpośrednio po linijce:
... Gosub Sterowanie ...
teraz w miejscu gdzie ustawiasz zapisany parametr, czyli nap u ciebie (i jeszcze w miejscu dla drugiego przycisku):
dodajesz linijki Autosave = 0, na początku programu Zmienna Autosave musi mieć wartość 50, czyli taką samą jak w warunku If Autosave < 50 Then. Ten sposób zapisze ustawienia jeśli coś zmodyfikowałeś i przez 5 sekund nic nie zmieniałeś, ma to za zadanie zmniejszyć ilość niepotrzebnych zapisów do pamięci.
Odczyt na początku programu tak jak ci się wydawało :)
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Zapis do pamięci
Dzięki za szybka odpowiedz.
Zapis działa ale zawsze jest jakies ale :)
Jest problem z zapisem zmiennej typu word.
Jak zmienna Tempu jest ustawiona na max 90,0 to wyświetla mi jakieś krzaki i nie działa przycisk down
Jak zmienie ją na 255 to wszystko śmiga.
Czy zmienną o wartości 900 muszę jakoś inaczej zapisać.
Nie wiem w czym jest problem.
Re: Zapis eeprom
jeśli dajesz komendy:
to jeśli zmienna jest typu word i adres np 2 to adres2 nie może być 3 ale musi być 4 ponieważ zapisując word automatycznie zostaną zajęte komórki 2 i 3 dla adresu początkowego 2. Więc daj adres=2 i adres2=4 i będzie bez problemu. te same adresy przy odczycie
Przy odczycie możesz dać jeszcze warunek żeby sprawdzał czy odczytana wartość jest poprawna i jeśli wykracza poza zakres który ma byc w programie to przypisuj jej wartość domyślna. to na wypadek błędów odczytu
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Wszystko działa :)))) Dzięki
Wszystko działa :))))
Dzięki
Wyświetlanie
Jeszcze mnie coś denerwuje ;( Wyświetlam na sześciu wyświetlaczach, temperatura wyświetlana jest na wyśw 456 lub gdy temp powyżej 100 to na 3456.
Nastawy zaś histereza (his) i tempu (out) na wyśw 123 i z tym "wspólnym" wyświetlaczem nr 3 jest problem bo albo wyświetla mi napis his i out a jedynki z 100.0 nie albo wyświtla tą jedynkę a nie wyświetla s i t z nastaw.
Pomocy.
Wstawiam aktualny listing;
Re: termostat
Problem jest bo ustawiasz zmienne wysw1..10000 w wielu miejscach na raz i nie panujesz nad tym:
Usuń ustawianie:
tych zmiennych z procedury i zostaw tam tylko:
podobnie z histerezą. Teraz wszystkie modyfikacje zmiennych wysw1...10000 mają być tylko w procedurze przelicz
Tabele dodatkowe poza tą z liczbami s a niepotrzebne, tylko do wyświetlania liczb wygodnie jest tak zrobić
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
re re: Termostat
Wszystko coraz ładniej śmiga.
pozmieniałem soft w/g twoich zaleceń.
Dołożyłem jeden warunek ponieważ zostawały mi na wysw10000 i wysw100000 znaki z ustawień początkowych
Jeszcze zauważyłem że układ nie reaguje na odłączenie czujnika tzn. pozostawia temperature która była do momentu wyjęcia czujnika
i denerwuje że po naciśnięciu i przytrzymaniu przycisku w celu zmiany nastawy przskakuja z różnej długości zacięciami.
Re: Termometr
Zmień jeszcze w procedurze odczytu temperatury:
linijkę:
na
Cos jest nie tak ze zmienna "Z". Nie wiem do czego ona służy bo nigdzie jej nie ustawiasz poza początkiem programu. Myślę że powinno działać jak wykasujesz linijkę if Z=0 then i jeden end if z końca procedury przed "return"
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Termometr
Faktycznie warunek if Z to blokował.
Powiedz mi jeszcze dlaczego jak włożę czujnik to najpierw pojawia sie wynik 85.0 a potem właściwa temperatura?
Fotki termostatu
Oto kilka fotek mojego termostatu, jeszcze bez obudowy.
[url=]http://www.fotosik.pl/pokaz_obrazek/0e9bb18776692ede.html[/url]
[url=]http://www.fotosik.pl/pokaz_obrazek/b15d730d88e23ceb.html[/url]
[url=]http://www.fotosik.pl/pokaz_obrazek/b19f25e44e5c7198.html[/url]
Alarm
Próbowałem samodzielnie dorobić Alarm no i się zakręciłem jak słoik na zimę.
W menu dorobiłem pozycję do ustawiania progu zadziałania alarmu i zadziałało.
Jednak jak zabrałem się za wyświetlanie alarmu to narobiłem tylko bałaganu.
Chciałem aby po przkroczeniu progu alarmu zmienił się stan portuB.6 sprawdził czy napewno na wyjsciu portb.5 jest stan niski i na wyswietlaczy naprzemian wyświetlał się napis ALAr. i aktualna temperatura.
Poniżej wklejam kod po modyfikacjach.
Re: Termostat
To normalne na początku czujnik ma zapisaną temperaturę 85 stopni, jak wykona pierwszy pomiar to pojawi się poprawne wskazanie
Poza tym fragment z case 4:
nie powinien byc w tym miejscu, wogóle case 4 jest niepotrzebny, pisałem wcześniej że wszystko co bezpośrednio modyfikuje zmienne Wysw1.100000 ma byc w procedurze przelicz.
Aha jeszcze ten warunek jest zły: powinien być znak >= a nie => ale nie wiem czy to ma takie znaczenie, niektóre kompilatory zgłaszają błąd
Dalej w tej procedurze ustaw tylko przekaźnik na odpowiedni stan a nie jakieś dodatkowe zmienne. Potem w procedurze "Przelicz" dodaj warunek że jak przekaźnik ustawiony to wyświetlaj coś specjalnego na wyśw, niezależnie co jest aktualnie na nim pokazane. Dodanie poz_wysw 4 jest niepotrzebne, a poza tym ta zmienna służy do robienia pozycji w menu, które coś pokazują. Alarm zrób tak samo jak wyświetlany jest error lub pusty wyświetlacz, przecież nie masz do tego specjalnych Poz_wysw
Ps. jak potem skończysz to możesz te zdjęcia wraz z opisem i całym gotowym kodem zamieścić na forum w dziale realizacje
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Oczywista oczywistość
Oczywista oczywistość zaczęło działać :)
Aktualnie morduję się na wyściem z alarmu gdy zadziała.
re ps. jak się uporam .... to zamieszczę ;)
Autopowrot z alarmu
Raczej sobie nie poradzę z tym autopowrotem, Chcę aby wyświetlał się alarm wraz z wyjściem alarm i czekał na skasowanie przyciskiem lub automatycznie po czasie x. Nastepnie alarm załącza się po nastepnym przekroczeniu. Jak to zrobić?
Jak wyjść z tego alarmu???
Miga naprzemian AL. HI. z temperaturą. Nie wiem jak ubrać w bascom wyjście automatyczne lub przyciskiem z warunku i aby nie powrócił do alarmu w tym przkroczeniu które zasygnalizowal. HELP ME!!!!!!!!!!!!!!!!!
Re: Alarm
Przecież pisałem wcześniej jak masz to zrobić.... Ustawianie przekaźnika ma być tam gdzie jest ale uzupełnione o zmienną Alarm_en typu bit:
W procedurze przelicz możesz coś wyświetlić na warunku:
w obsłudze przycisków trzeba dodać: If Pk_alarm = 1 then Alarm_en = 0
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
re re: Alarm
Ja rozumiem ale problem polega na tym że brak jest możliwości wyjścia z pętli alarmy gdy temperaturaprzekroczy próg alarmu.
Ja chcę aby układ przestał po zadanym odcinku czasu sygnalizować alarm i mieć możliwość wyłączenia go np przyciskiem ok i żeby sygnalizował dopiero następne przekroczenie.
Teraz alarm wyłącza sie tylko jak spadnie temperatura poniżej progu alarmu.
Re: Termostat
po to własnie maż zmienną Alarm_en, jesli w procedurze obsługi przycisku dasz linijkę
to wtedy jeśli alarm jest właczony to zostanie on zablokowany. Ponowne odblokowanie alarmu nastąpi jeśli temperatura spadnie poniżej alarmowej, zgodnie z fragmentem który napisałem wcześniej.
Dodatkowo jeśli dołożysz pod flagą Co1s kilka linijek:
to będzie się automatycznie wyłaczał po 30 sekundach
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
re Re Termostat
Doszedłem w końcu do ładu z tym dziadostwem.
Niestety działa tylko wtedy gdy usunę linijkę
If Pk_alarm = 1 then Alarm_en = 0
z procedury obsługi przycisków.Na logikę to ten warunek wyłącza alarm zanim pojawi mi się komunikat na wyświetlaczu.
Układ działa idealnie z automatycznym wyłączaniem ale bez w/w warunku.
2 czujniki
Myślałeś już może nad tym jak poskromić dwa czujniki? Jeżeli nie to ja w akcie desperacji zamotuje przekaźniczek zamieniający nogi 1wire czujników.
Re; Alarm termostat
W którym miejscu wstawiłeś ta linijkę:
Przecież procedura nie wywołuje sie jak nie naciśniesz przycisku więc skąd miało by się samo wyłączyć
nad czujnikami nie myslałem i narazie mam inne zmartwienia niz DSy
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
re Re; Alarm termostat
Dzięki wielkie mirley, działa wszystko jak należy.
Oczywiście wstawiłem linijkę nie tam gdzie trzeba no i dostałem za swoje (poleciało trochę słówek na K he he he)
pozdr.