Budowa układu
Układ zbudowany został w oparciu o mikrokontroler jednoukładowy PIC16F876A, którego większość wyprowadzeń steruje siedmiosegmentowym wyświetlaczem LCD 3 i 1/2 cyfry.
Przy założeniu, że ostatnia pozycja wyświetla znak C (stopnie Celsjusza), taka architektura wyświetlacza pozwala pokazać maksymalnie liczbę 199 (tylko liczby całkowite). To w zupełności wystarcza, jeśli weźmie się pod uwagę fakt, że użyty czujnik DS18B20 mierzy temperaturę maksymalnie do +125°C. Oczywiście zastosowanie graficznego wyświetlacza LCD umożliwiłoby stworzenie grafiki nieporównanie estetyczniejszej, ale układ z założenia miał być zasilany baterią 3 V typu CR2032 i pobór prądu okazał się czynnikiem decydującym przy wyborze wyświetlacza. Pod tym względem siedmiosegmentowy panel LCD jest nie do pokonania.
Poza wyświetlaczem do mikrokontrolera podłączony jest przycisk push-button, w którym jako rezystor podciągający zastosowany został wewnętrzny pull-up mikrokontrolera. Ponadto zastosowano sygnalizator piezoelektryczny bez wbudowanego generatora. Równolegle do sygnalizatora podłączony został natomiast rezystor, który „łagodzi” charakter pojemnościowy tego obciążenia i stanowi element opcjonalny – przy niektórych typach sygnalizatorów nie jest konieczny.
Osobnego omówienia wymaga linia resetująca układ – obwód RC podłączony do portu MCLR mikrokontrolera wykonany wg noty katalogowej Microchip. Z tym wejściem wiąże się pewien problem: przy zasilaniu napięciem 3 V nie działa poprawnie wewnętrzny układ POR (Power On Reset) mikrokontrolera i dopiero dołączenie R2, R3 oraz C6 zapewnia poprawny start układu w chwili włączenia napięcia zasilania.
Zewnętrzny, hermetyczny czujnik temperatury typu DS18B20 podłączony jest przez gniazdo tak, aby w łatwy sposób można go było odłączyć np. do mycia. Mikrokontroler ma zaimplementowaną programowo obsługę szyny komunikacyjnej 1-Wire na pinie 5. Jeśli ktoś korzystał jedynie z gotowych bibliotek do Arduino dla takiego czujnika temperatury, proponuję pochylić się nieco nad jego protokołem transmisji danych, co pozwoli bardziej docenić pracę wykonywaną przez „anonimowych” twórców bibliotek. Jak to zwykle bywa: fakt, że coś wydaje się proste, może okazać się dowodem, jak bardzo nie doceniamy danego zagadnienia. Dość ścisłe wymagania czasowe obsługi portu
1-Wire oraz różnorodność wyboru instrukcji sterujących czujnikiem DS18B20 mogą stanowić wyzwanie dla wielu początkujących programistów. Przy budowaniu własnych systemów warto się z tymi tematami zapoznać.
Linia danych czujnika podciągnięta została do poziomu wysokiego przez rezystor R1 (4,7 kΩ). Na płytce PCB znalazło się miejsce na ten rezystor, ale ja proponuję zamontować go we wtyczce czujnika, tak aby mikrokontroler w łatwy sposób mógł wykrywać obecność czujnika temperatury. Zasilanie wspomnianego sensora podłącza się przez tranzystor T1, który z kolei jest sterowany z poziomu mikrokontrolera przez port RA2. Chodzi o to, aby nie tracić energii z baterii. Czujnik zasilany jest periodycznie. Tuż przed pomiarem temperatury zasilanie ulega załączeniu, natomiast po odczytaniu zmierzonej wartości mikrokontroler ponownie odcina je od czujnika.