Witam!
Przeczytałem na tej stronie, że program termostatu nie zmieści się na attiny2313. Jednak po kilku próbach udało mi się to i chciałbym zaprezentować swoje wyniki pracy. Układ termometru uniwersalnego miałem już wcześniej zbudowany i postanowiłem go wykorzystać jako termostat do mojej wytrawiarki. Schemat jest taki sam jak termometru uniwersalnego z tej stronki. Wystarczy do złącza GP dołączyć przekaźnik lub układ wykonawczy z triakiem, aby sterować grzałką.
Oczywiście to nie jest mój autorski program, zmodyfikowałem tylko program Mirleya bo pomyśłałem, że może się komuś przydać.
Proszę o opinie.
Pozdrawiam!
'****************************
'Konfiguracja
'****************************
$regfile = "attiny2313.dat"
$crystal = 12000000
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11100111 : Portd = &B11111111
Config 1wire = Pind.5
Config Timer0 = Timer , Prescale = 64
Enable Timer0 : On Timer0 Przerwanie0
Enable Interrupts
'****************************
'Zmienne
'****************************
Dim Lsb As Byte
Dim Msb 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
Dim Wysw_pomoc As Word
Dim Tempa As Word
Dim Mux As Byte
Dim Zezw_wysw As Bit
Dim Pomiar_odczyt As Bit
Dim Minus As Bit
Dim Ur As Bit
Dim L_sw As Byte
Dim P As Bit
Dim Ww As Byte
Dim Flaga_s As Bit
Dim Th As Word , Tl As Word , Tt As Word
Th = 290 'wstępna temperatura włączenia *10, 290 oznacza 29 stopni 500 to 50 stopni
Tl = Th - 20 ' temperatura wyłaczenia, 20 to histereza - można zmienić na własne potrzeby
'****************************
'Wartosci Poczatkowe
'****************************
Reset Pomiar_odczyt
Reset Ur
Wysw1 = 191
Wysw10 = 191
Wysw100 = 191
'****************************
'Petla glowna
'****************************
Do
Tl = Th - 20
If Zezw_wysw = 1 Then
Reset Zezw_wysw
If Ur = 1 Then Gosub Przelicz
Gosub Wyswietl
End If
If Flaga_s = 1 Then
Reset Flaga_s
If Tempa > Th Then
Portd.6 = 1
Else
If Tempa < Tl Then Portd.6 = 0
End If
End If
If P = 1 Then
Wysw = Th
Else
Wysw = Tempa
End If
Loop
End
'****************************
'Przerwanie timer0
'****************************
Przerwanie0:
Timer0 = 5
Incr Co4ms
If Co4ms = 3 Then
Co4ms = 0
'*************************************** co 4ms
Set Zezw_wysw
Incr Co100ms
If Co100ms = 25 Then
Co100ms = 0
'*************************************** co 100 ms
'obsluga przyciskow
If Pind.4 = 0 Then
Incr L_sw
If L_sw = 3 Then
L_sw = 0
Set P
Th = Th + 10
Ww = 1
If Th = 500 Then ' górny zakres ustawianej temperatury
Th = 490
End If
End If
End If
If Pind.3 = 0 Then
Incr L_sw
If L_sw = 3 Then
L_sw = 0
Set P
Th = Th - 10
Ww = 1
If Th = 200 Then ' dolny zakres ustawianej temperatury
Th = 210
End If
End If
End If
Incr Ww
If Ww = 50 Then 'czas wyświetlania ustawionej temperatury (50 x 10ms = 5s)
Ww = 0
Reset P
End If
Incr Co1s
If Co1s = 7 Then
Co1s = 0
'*************************************** co 1s
Set Flaga_s
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
Tempa = Tempa / 16
If Ur = 0 Then Ur = 1
Else
Tempa = 10000
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
Wysw_pomoc = Wysw Mod 10
Wysw10 = Wysw_pomoc
Wysw = Wysw / 10
Wysw_pomoc = Wysw Mod 10
Wysw100 = Wysw_pomoc
If Wysw100 = 0 Then Wysw100 = 10 'wygaszenie zera wiodącego
Wysw1 = Lookup(wysw1 , Tabela)
Wysw10 = Lookup(wysw10 , Tabela2)
Wysw100 = Lookup(wysw100 , Tabela)
Else
Wysw1 = 175 'r
Wysw10 = 175 'r
Wysw100 = 134 'E
End If
Return
Wyswietl:
Incr Mux
If Mux = 3 Then Mux = 0
Select Case Mux
Case 0:
Set Portd.0
Portb = Wysw100
Reset Portd.2
Case 1:
Set Portd.2
Portb = Wysw10
Reset Portd.1
Case 2:
Set Portd.1
Portb = Wysw1
Reset Portd.0
End Select
Return
'****************************
'****************************
'*******************************************************************************
'Tabele do wyswietlania na wyswietlaczu
'*******************************************************************************
Tabela:
Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144 , 255
'znak: 0 1 2 3 4 5 6 7 8 9 pusty
Tabela2:
Data 64 , 121 , 36 , 48 , 25 , 18 , 2 , 120 , 0 , 16 , 255
'znak: 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. pusty
'************************************************************************************************
temperatura
Czyli temperatura musi być tam wpisana na stałe? Czy można ją ręcznie ustawiać na tych przyciskach?
Bo sam właśnie zbierałem się z wykonaniem tego termometru w roli termostatu, więc muszę dopytać :)
Pozdrawiam.
re: temperatura
Ta temperatura 29*C którą wskazałeś to ustawienie wstępne, gdy włączamy układ do zasilania. Można ją ustawiać dwoma przyciskami
+ i - co jeden stopień (domyślnie) (oczywiście to można zmienić na np. co 0,1 stopień w kodzie programu). Obecnie jest ustawiony zakres od 21 do 49 stopni (to też oczywiście da się zmodyfikować). Robiłem ten termostat do sterowania grzałką wytrawiarki stąd takie temperatury.
Dzięki za zainteresowanie :)
re:temperatura
Aha, już rozumiem. Dzięki za odpowiedź. :)
I wszystko po przeróbkach dla 2313 działa prawidłowo?
Jeszcze mam pytanie gdzie kupiłeś taki wyświetlacz potrójny jak w projekcie, jeśli takiego używasz? W sklepach takiego dostać nie mogę. Na avt.pl tylko taki jest, ale tam jego koszt to 3zł, a przesyłka 15 więc się niezbyt mi kalkuluje ;)
Ew. czy jest możliwość użycia jakiegoś innego wyświetlacza?
odp
Jesli chodzi o wyświetlacz to proponuje przejść się na złomowisko i poszukać starego sprzetu RTV. Jest tam sporo wyświetlaczy (wiem z doświadczenia:-) ), a często można się natknąć na niezłe perełki elektroniczne:-).
wyswietlacz
mam w domu jakieś stare dekodery od satelity, muszę sprawdzić jakie tam będą wyświetlacze
Re: Termostat
Extra uwaga.... obsługa przycisków nie powinna być w przerwaniu..... powinieneś dac w tym miejscu flagę bitową i sprawdzać ją w pętli głównej czy została ustawiona. Podobnie jak to ma miejsce z flagą 4ms do wyświetlania.
W oryginalnym kodzie w przerwaniu mam zaznaczone gdzie ma być flaga obsługi przycisków a nie cała obsługa.
Program jest prosty więc dlatego działa, jak będziesz chciał potem napisać coś więcej to się wszystko wysypie
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.
wyświetlacz
Co do wyświetlacza do zobacz na allegro u tego użytkownika. Ma dużo wyświetlaczy więc coś napewno znajdziesz. Zamawiałem u niego i wszystko jest ok.
http://allegro.pl/listing.php/search?category=67282&string=art&order=p&change_view=1
Obsługa przycisków rzeczywiście jest w przerwaniu. Zaczynam projektowanie i dlatego popełniam błędy. Ale dziękuje za wskazłwki. Program jest prosty jednak na jego rozbudowe na Attiny2313 raczej nie ma szans by w tej postaci zajmuje 99% pamięci.
mruganie wyswietlacza
co może powodować mruganie delikatne wyswietlacza co ok 0,5s?
i jeszcze mam pytanie co do działania termostatu - na razie na wyjściu diodę podłączyłem, ale coś działa to na odwrót - ma grzać - nie świeci, a jak grzać nie ma (bo temp zadana została osiągnięta) to dioda się zapala
no i jeszcze mam problem ze zmianą histerezy - ten program tu wrzucony wgram jest ok, zmienię z 2 na 1 stopien to programu juz wgrac nie idzie - wysypuje się przy weryfikacji
No też widzę , że jest
No też widzę , że jest odwrotnie. 5V na GP pojawia się kiedy temperatura przekroczy zadaną, natomiast zanika kiedy temperatura spadnie poniżej zadanej. Czemu tak jest?
Re: Termostat
sterowanie jest stanem niskim, stan aktywny to zwarcie do masy, a nieaktywny to +5V, stąd takie działanie. Histerezę 1 stopień ustawiasz w tej linijce:
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.
temperatura 0.0
zrobiłem płytkę, zaprogramowałem procka, ale tempratura na wyświetlaczu to cały czas 0.0
nie wiem dlaczego...
Nie mam rezonatora kwarcowego, korzystam z wbudowanego zegara 8 mhz, czy to może być przyczyną ?
Quote:zrobiłem płytkę,
dołożyłem kwarc, ustawilem fuse bity, to samo...
Quote:Quote:zrobiłem
Działa, sprawe załatwił opornik 4,7 kom pomiędzy zasilaniem a drugą nogą ds.
Termostat gotowy :)
http://zapodaj.net/72df2eacac355.jpg.html
DZIEKUJĘ ZA UDOSTĘPNIENIE WSADU :)
Zastanawiam się jeszcze czy da się zrobić regulowaną histerezę w zakresie 0.5 - 2.0 stopni celsjusza ze skokiem co 0.5 stopnia, np wciskając oba przyciski na raz ...
Re: Termostat
Da się zrobić regulowaną histerezę. Wystarczy dodac parametr H, który będzie histerezą/2 a regulator będzie działał między Tust-H a Tust+H. Nie potrzeba wykrywać dwóch przycisków na raz. Wystarczy dodać zmienną Poz_menu która przyjmie wartości 0-wyświetlanie temp, 1 -ustaw temp i 2-ustaw H. Nie potrzena stanie się zmienna P bo zamiast niej jest teraz Poz_menu. Wyświetlanie musi wpisywać d Wysw jedną z trzech wartości zależnie od Poz_menu. W obsłudze każdego z przycisków trzea zrobić case rozróżniajacy wartość Poz_menu. Jeśli Poz_menu = 0 to kliknięcie przycisku + przechodzi do ustaweń temperatury a - do ustawień histerezy. Od tego momentu + i - działają normalnie.
Wyjście z menu można zrobić czasowe jak np 3 sek nic się nie klika to jeśli poz_menu <> 0 to poz_menu = 0
Obliczanie progów temperatury włączenia i wyłączenia nie możesz robić teraz na początku ale w pętli tam gdzie porównujesz temperatury.
Ps. Obrazka nie ma bo go zamieściłeś na jakimś dziwnym serwisie i nie masz liku bezpośredniego do obrazka tylko html. Znacznik img wczytuje tylko obrazki, a nie html. Pisanie 3 postów jeden pod drugim w niczym nie przyspieszy twojej odpowiedzi, a wręcz przeciwnie. Po pierwsze muszę skasować daremne posty ze strony, a po drugie odpowiadam zawsze w kolejności od najstarszych wpisów, więc napisanie czegoś w stylu "jest tam kto?" sprawia że strona automatycznie przenosi twoje pytanie na koniec kolejki
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.
Bład na płytce i schemacie ?
Nie wiem ale coś m i tu nie gra ;-)
Na płytce i na schemacie jest pokazane że dioda LED jedną nogą idzie do nóżki '11' procka a druga do minus '-'
natomiast w wypowiedzi tutaj "
==========================================
cytuje
Re: termometr
Należy zastosować dowolną diodę LED z szeregowym rezystorem 330R-510R... katoda idzie do złącza GP1(ten pin co trafia do procka) a anoda idzie do +5V
============================================
i jak tak podłączę to dioda zaświeca sie przy temp. ujemnej
???