
Projekt został opublikowany w Elektronice dla Wszystkich 08/2011 i jest dostępny w postaci kitu AVT2985
Działanie:
Na rysunku 1 został przedstawiony schemat ideowy termometru. Sercem urządzenia jest mikrokontroler U1 (ATTINY2313), który pracuje na wewnętrznym oscylatorze, bez dzielnika częstotliwości. Daje to w efekcie taktowanie 8MHz. Brak rezonatora kwarcowego pozwolił zmniejszyć płytkę a dodatkowo umożliwił wykorzystanie wolnego pinu XTAL jako portu wejściowego PA0, do którego obecnie dołączony jest przycisk S2. Zadaniem mikrokontrolera jest odczyt pomiaru temperatury z dwóch czujników, przeliczanie wskazań do postaci dogodnej dla wyświetlania i obsługa przycisków S1 i S2. Kondensator C1 (100nF), umieszczony blisko mikrokontrolera filtruje jego napięcie zasilania podobnie jak kondensatory C2 (10uF) i C3 (10uF), które są konieczne do prawidłowej pracy stabilizatora U3 (78L05). Prostota układu wynika z zastosowanego czujnika temperatury, którym tym przypadku jest DS18B20. Stanowi on w typowym ustawieniu 12-bitowy termometr cyfrowy mogący pracować w zakresie -55 do +125 stopni. Czas przetwarzania (konwersji) temperatury do wartości binarnej (liczby) trwa nie dłużej niż 750ms. Odczyt temperatury jest w pełni cyfrowy, a łączność z mikrokontrolerem zapewnia popularna magistrala 1-Wire.Budowa:
Widok płytki drukowanej od strony druku (od spodu) dostępny jest tutaj. Jej odbicie lustrzane można znaleźć tutaj. Pomocą w montażu płytki od strony druku (od spodu) będzie rysunek dostępny tutaj. Pomocą w konstrukcji płytki od strony elementów (od góry) będzie z pewnością schemat montażowy dostępny tutaj. Płytka została zaprojektowana jako jednostronna, a prawie wszystkie elementy są typu SMD. Wyjątek stanowią tu wyświetlacz, przyciski i złącza. Montaż nie jest skomplikowany ale wymaga niewielkiej wprawy w lutowaniu SMD.Na samym początku dobrze jest przylutować właśnie te elementy, ponieważ brak wystających części z drugiej strony ułatwi montaż. Należy zwrócić uwagę że obwód masy przechodzi w jednym miejscu przez zworkę jaką tworzy przycisk (przycisk ma 4 wyprowadzenia parami zwarte). Gdyby zaszła konieczność rezygnacji z przycisków to zamiast S1 należy wlutować zworkę po stronie masy (kolor czerwony). Wadą małej płytki jest brak wyprowadzonego złącza programującego procesora, więc gdyby zaszła konieczność zmiany programu będzie trzeba przylutować kabelek programujący do pinów mikrokontrolera. W roli złącza zasilania podobnie jak w przypadku GP1 dobrze sprawdzają się kabelki przylutowane bezpośrednio do płytki. Opis pinów złącza GP1 przedstawiony jest na rysunku 2 Wyprowadzenia 1 i 2 tego złącza to odpowiednio: zasilanie i masa. Wyjście sterowania (OUT) jest tutaj dostępne na pinie 3. Czujniki należy podłączyć trój-przewodowo wykorzystując wyprowadzone zasilanie, masę i linie sygnałowe 5 i 6. Linia danych czujnika pierwszego ma zostać podłączona do pinu 5, a z czujnika drugiego do pinu 6 złącza GP1. Układ termometru zasilany jest napięciem z przedziału 7-12V dzięki obecności stabilizatora 78L05. Nic nie stoi na przeszkodzie aby pominąć stabilizator a napięcie zasilania 5V podać bezpośrednio na termometr.
Programowanie:
Program sterujący pracą termometru został napisany w dobrze znanym programie BASCOM AVR . Zajmuje on około 70% dostępnej pamięci mikrokontrolera i może być z powodzeniem kompilowany w wersji demo BASCOM’a. Działanie programu nie jest skomplikowane i w skrócie wygląda to następująco: cały czas procesor kręci się w nieskończonej pętli Do Loop, czekając na ustawienie jednej z flag taktujących w przerwaniu. Za odpowiednie taktowanie odpowiada Timer0. Co około 4ms wywoływana jest procedura multipleksowania wyświetlacza, z której w odpowiednim momencie następuje skok do odczytu temperatury.Przerwanie0:
Timer0 = 131
Set F4ms
Incr Dziel(1)
If Dziel(1) = 25 Then
Dziel(1) = 0
Set F100ms
Incr Dziel(2)
If Dziel(2) = 10 Then
Dziel(2) = 0
Set F1s
End If
End If
Return
Pętla główna widoczna jest poniżej:
Do
If F4ms = 1 Then
Reset F4ms 'co 4ms
Wysw = T
Gosub Wyswietl_zmierz
End If
If F100ms = 1 Then
Reset F100ms 'co 100ms
If Pind.2 = 0 Then Kanal = 1
If Pina.0 = 0 Then Kanal = 0
End If
Loop
End
Procedura obsługi wyświetlacza i pomiaru temperatury widoczna jest poniżej:
Wyswietl_zmierz:
Incr Mux
If Mux = 5 Then Mux = 0
Portd.3 = Not Minus
For I = 1 To 3
Wysw_pomoc = Wysw Mod 10
Ww = Wysw_pomoc
W(i) = Lookup(ww , Tabela)
Wysw = Wysw / 10
Next I
If W(3) = 40 Then W(3) = 255 'wygaszenie zera wiodącego
Select Case Mux
Case 0:
Portb = W(3)
Reset Portd.6
Case 1:
Set Portd.6
Portb = W(2) And &B11011111
Reset Portd.5
Case 2:
Set Portd.5
Portb = W(1)
Reset Portd.4
Case 3:
Set Portd.4
Portb = 255
Gosub Temp
'Case 4:
End Select
Return
Tabela:
Data 40 , 235 , 50 , 162 , 225 , 164 , 36 , 234 , 32 , 160
Dalsza część procedury zależy od zmiennej Mux. Dla wartości 0 do 2 zaświecane są kolejne cyfry poprzez wyłączenie poprzedniej anody, wystawienie na Portb wartości kolejnego znaku i włączenie odpowiadającej mu anody. Wyjątkiem jest tutaj znak W(2) gdzie dodatkowa operacja (And &B11011111) zapewnia dodanie kropki dziesiętnej po drugim znaku. Dla wartości Mux=3 wywoływana jest procedura pomiaru temperatury, a stan Mux=4 jest fazą oczekiwania na spokojne zakończenie pomiaru temperatury.
Procedura pomiaru temperatury widoczna jest poniżej:
Temp:
If F1s = 1 Then
Reset F1s
1wreset Pind , Kanal
1wwrite &HCC , 1 , Pind , Kanal
1wwrite &HBE , 1 , Pind , Kanal
T = 1wread(2 , Pind , Kanal):
Minus = T.15
T = Abs(t)
T = T * 10
T = T / 16
1wreset Pind , Kanal
1wwrite &HCC , 1 , Pind , Kanal
1wwrite &H44 , 1 , Pind , Kanal
End If
Return
Układ da się przerobić na termostat niewielkim nakładem pracy. Rezygnujemy wtedy z dwukanałowego pomiaru temperatury oraz ujemnych temperatur na koszt sterowania wyjściem. Do wyjścia sterowania (Portd.3) można dołączyć optotriaka i triaka sterującego dowolnym odbiornikiem prądu przemiennego lub można dołączyć tranzystor MOSFET sterujący odbiornikiem prądu stałego. W pętli głównej trzeba będzie wprowadzić modyfikacje widoczne poniżej:
If F4ms = 1 Then
Reset F4ms
If Ust = 0 Then Wysw = T Else Wysw = Tu
Gosub Wyswietl_zmierz
End If
If F100ms = 1 Then
Reset F100ms
If Pind.2 = 0 Then
Incr Tu
Autoret = 20
End If
If Pina.0 = 0 Then
Decr Tu
Autoret = 20
End If
If Autoret > 0 Then
Ust = 1
Decr Autoret
Else
Ust = 0
End If
H = Tu + 10
L = Tu - 10
If T > H Then Set Portd.3
If T < L Then Reset Portd.3
End If
Zdjęcia Projektu:
Wykaz Elementów:
Elementy Termometru:
Załączniki:
Projekt Płytki: | ||
AB AB AB | Płytka (strona druku,termotransfer) | 10.7 kB |
AB AB AB | Płytka (strona druku,odbicie lustrzane) | 10.7 kB |
AB AB AB | Płytka (strona druku, kilka płytek na stronie, termotransfer) | 157.0 kB |
AB AB AB | Montowanie (strona elementów) | 8.7 kB |
AB AB AB | Montowanie (strona druku) | 13.7 kB |
AB AB AB | Warstwa Opisowa (strona elementów) | 53.3 kB |
AB AB AB | Warstwa Opisowa (strona druku) | 100.5 kB |
Dokumentacja: | ||
AB AB AB | Schemat Ideowy | 117.4 kB |
Programowanie: | ||
AB AB AB | Termometr Kod Źródłowy (BASCOM-AVR) | 3.1 kB |
AB AB AB | Termostat Kod Źródłowy (BASCOM-AVR) | 3.4 kB |
AB AB AB | Termometr Program wynikowy (BIN BASCOM-AVR) | 1.4 kB |
AB AB AB | Termostat Program wynikowy (BIN BASCOM-AVR) | 1.6 kB |
AB AB AB | Termostat Program wynikowy (HEX) | 4.6 kB |
AB AB AB | Termometr Program wynikowy (HEX) | 4.1 kB |
AB AB AB | Ustawienia Fusebitów (burn-o-mat) | 12.5 kB |
Pytania i Komentarze:
Lipiec 19, 2018
Zasilacz do wzmacniaczy już opisany ...
Więcej …
Czerwiec 20, 2018
Moduł wykonawczy już opisany...
Więcej …
Więcej nowinek …
Zasilacz do wzmacniaczy już opisany ...
Więcej …
Czerwiec 20, 2018
Moduł wykonawczy już opisany...
Więcej …
Więcej nowinek …
Polecane Strony