
Witam
Przedstawiam prosty w budowie układ elektronicznego termometru z wyświetlaczem LED i sondą temperatury.
Jakiś czas temu popełniłem podobną konstrukcję (jest w dziale Niedokończone: Link)
Kol.


Poza tym wciąż zdarza mi się otrzymać PW z prośbą o schemat tamtego termometru.
Pomyślałem więc, że jest miejsce na prostą, ale skończoną i udokumentowaną konstrukcję, którą łatwo będzie można skopiować.
W nowym układzie są tylko łatwo dostępne i tanie części.
Koncepcja
Układ jest zbudowany wokół mikrokontrolera AT89C2051, do którego są podłączone:
- układ resetu
- układ zegara kwarcowego
- magistrala 1-wire
czujnik DS18B20
- 4-cyfrowy 7-segmentowy wyświetlacz LED ze wspólną anodą - FJ5461BH
Układ resetu to rezystor 10 kΩ i kondensator 1 µF.
Układ zegara składa się z rezonatora kwarcowego 11059200 Hz i kondensatorów odsprzęgających 22 pF.
Magistrala 1-wire to wyprowadzony port mikrokontrolera z rezystorem 4,7 kΩ podciągającym do jedynki oraz masa i zasilanie +5V na stałe (czujnik DS18B20 jest podłączony trzema przewodami).
Wyświetlacz jest podłączony w następujący sposób:
- katody poszczególnych segmentów (jest ich 8 - 7 segmentów i kropka) prosto do wyprowadzeń portu P1
- anody poszczególnych cyfr (jest ich 4) do kolektorów tranzystorów BC327 (PNP), a ich bazy do wyprowadzeń portu P3 przez rezystory 4,7 kΩ
Program
Struktura danych:
- Pamięć ramki (wyświetlacza) - 4 bajty. Każdy bajt pamięta układ zapalonych segmentów na danej pozycji wyświetlacza.
- Flaga obecności czujnika - 1 bit. Zapalana po udanym zainicjowaniu pomiaru na czujniku. Zapalona oznacza, że mamy spodziewać się wyniku pomiaru. Gaszona po błędzie komunikacji z czujnikiem (pozwala to ponownie go zainicjować, gdy zostanie znów podłączony).
Algorytm (opis pomija obsługę błędów przy komunikacji z czujnikiem):
- Inicjalizacja - zapalenie wszystkich segmentów
- Pętla główna
- Wyświetlaj to, co jest w pamięci ramki (klasyczne sterowanie multipleksowane)
- Czy czujnik jest już zainicjowany?
- TAK
czy czujnik sygnalizuje koniec pomiaru?
- TAK
pobierz wynik pomiaru, przelicz na wartość dziesiętną (z uwzględnieniem wartości ujemnych) i wpisz wartość do pamięci ramki wg fontu
- NIE
nic do roboty - powrót na początek pętli głównej

[*:863b730849]Zleć nowy pomiar temperatury na DS18B20
Program zakłada, że na magistrali jest tylko jeden czujnik, co umożliwia pominięcie procedury wyszukiwania układów 1-wire i umożliwia użycie prostych rozkazów 1-wire pomijających numer seryjny czujnika.
Program obsługuje odłączanie i podłączanie czujnika podczas pracy.
Font
Program potrzebuje tablicy z fontem, tj. dla każdej możliwej cyfry dziesiętnej musi wiedzieć, jaką wartość należy wystawić na port P1, żeby zapaliły się właściwe segmenty.
Żeby ułatwić sobie zadanie i wyeliminować możliwość pomyłki, napisałem prosty programik w Pythonie, który następujący tekst:
'XXX| X|XXX|XXX|X X|XXX|XXX|XXX|XXX|XXX|'
'X X| X| X| X|X X|X |X | X|X X|X X|'
'X X| X|XXX|XXX|XXX|XXX|XXX| X|XXX|XXX|'
'X X| X|X | X| X| X|X X| X|X X| X|'
'XXX| X|XXX|XXX| X|XXX|XXX| X|XXX|XXX|'
przy pomocy zadanej tablicy przypisań segmentów do kolejnych wyprowadzeń portu:
Code: python
przetwarza na plik asm gotowy do użycia w programie (kolejne bajty fontu, cyfry od 0 do 9):
Code: x86asm
Tablica przypisań wynika z noty katalogowej wyświetlacza 7-segmentowego opisującego przypisanie katod segmentów do nóżek i ze sposobu podłączenia tych nóżek do wyprowadzeń portu mikrokontrolera (wg schematu układu).
Wykaz elementów
Nazwa | Liczba |
Czujnik DS18B20 na kablu w gilzie | 1 |
Wyświetlacz FJ5461BH | 1 |
Mikrokontroler AT89C2051 | 1 |
Stabilizator 7805 | 1 |
Tranzystor BC327 | 4 |
Rezonator kwarcowy 11059200 Hz | 1 |
Kondensator 22 pF | 2 |
Kondensator 100 nF | 1 |
Kondensator 1 µF | 1 |
Kondensator 10 µF | 1 |
Kondensator 100 µF | 1 |
Rezystor 10 kΩ | 1 |
Rezystor 4,7 kΩ | 5 |
Podstawka DIP20 pod mikrokontroler | 1 |
Płytka uniwersalna 50x70mm PI01 | 1 |
Obudowa Z23B 80x60x37 | 1 |
Montaż
Układ jest zmontowany na płytce uniwersalnej. Przy płaskim ułożeniu elementów, po niewielkim docięciu krótszego boku płytki z obu stron całość mieści się w połówce obudowy Z23B (z której usunięto tulejkę na śrubę).
Poza połączeniami na płytce przy pomocy nóżek elementów mam 13 połączeń drutami.
Schemat

Zdjęcia





Załączniki
Załączony plik zip zawiera:
- Kod źródłowy programu w asemblerze (~330 linii)
- Programik w pythonie generujący font
- Makefile
- Pliki wynikowe (hex, bin) dla osób, którym bardzo nie chce się instalować asemblera i/lub pythona
Cool? Ranking DIY