- źródło napięcia zasilania: bateria CR2032,
- teoretyczny czas pracy na jednej baterii zasilającej: 14 miesięcy (szczegóły w tekście artykułu),
- zakres pomiarowy opcjonalnego termometru: 0…55°C,
- dokładność pomiaru temperatury: 0,5°C,
- rozdzielczość pomiaru temperatury: 0,1°C.
Przypomina mi to sytuację z branży modowej, w której można zauważyć pewne cykliczne powroty popularności danego stylu – i nikt nie zgłasza żadnych wątpliwości co do takiego zjawiska. Pamiętać wszak należy, iż rynkiem rządzi popyt, a on – jak widać – polubił się na dobre ze stylem retro. Dokładnie w te oczywiste oczywistości (jak by powiedział klasyk) wpisuje się mój najnowszy projekt: naręczny zegarek LED, którego pierwowzorem był czasomierz firmy Unitra Warel o oznaczeniu DW-2005, wprowadzony na rynek w latach 80. Owego czasu stał się on bardzo popularny, a to za sprawą generała Mirosława Hermaszewskiego, który właśnie z tym modelem odbył swój pierwszy (i jedyny) lot w kosmos. Dzisiaj urządzenia tego typu, zwłaszcza w stanie kolekcjonerskim, potrafią osiągać na portalach sprzedażowych cenę kilku tysięcy złotych – i nic nie wskazuje, by miało się to zmienić, wszak tych egzemplarzy jest coraz mniej. Właśnie dlatego – na bazie wspomnień i nostalgii – powstał niniejszy projekt.
Sercem układu jest mikrokontroler ATtiny416, taktowany wewnętrznym oscylatorem o częstotliwości 1 MHz. Jak nietrudno się domyślić, głównym wyzwaniem przy projektowaniu zegarka była chęć minimalizacji zużycia energii, a co za tym idzie – wydłużenia czasu pracy na jednym ogniwie zasilającym. Mikrokontroler nasz realizuje obsługę 7-segmentowego wyświetlacza LED o organizacji 4 znaków w konfiguracji wspólnej anody (wyprowadzenia PC3…PC0 mikrokontrolera). Korzysta w tym celu z wbudowanego układu czasowo-licznikowego TCA0, który – pracując w trybie NORMAL – wywołuje stosowne przerwanie systemowe (od przepełnienia → TCA0_OVF_vect) 240 razy na sekundę (czyli 60 razy dla każdej wspólnej anody), obsługując właściwy mechanizm multipleksowania. Ponadto mikrokontroler obsługuje prostą klawiaturę złożoną z przycisków PLUS i MINUS, korzystając z wbudowanego układu czasowo-licznikowego TCB0, który pracując w trybie PERIODIC_INTERRUPT, wywołuje przerwanie od przepełnienia (TCB0_INT_vect) 100 razy na sekundę (co 10 ms), przez co – po pierwsze – zapewniona została nieblokująca obsługa klawiatury systemowej z eliminacją zjawiska drgania styków, a po drugie – możliwa stała się obsługa krótkiego i długiego naciśnięcia przycisków. Ostatnią i zarazem fundamentalną funkcjonalnością naszego mikrokontrolera jest zegar czasu rzeczywistego RTC. Zwykle funkcjonalność taką realizuje się, implementując jakiś sprzętowy zegar czasu rzeczywistego (na przykład DS1307 lub MCP79410), lecz w naszym systemie stawiamy na minimalizację zużycia energii, w związku z czym zrealizujemy ją z użyciem wbudowanego w strukturę mikrokontrolera układu RTC. Pracując w trybie PERIODIC_INTERRUPT, wywołuje on przerwanie od przepełnienia (RTC_PIT_vect) raz na sekundę, a tym samym realizuje funkcjonalność zegara RTC. Co więcej, oscylator wspomnianego zegara RTC, taktowany zewnętrznym rezonatorem kwarcowym o częstotliwości 32,768 kHz, pracować może podczas trybu Power Down mikrokontrolera, przez co możliwa stała się realizacja zegara RTC w każdym trybie jego pracy. Tak naprawdę skrajnie niski prąd trybu Power Down rzędu 300 nA (przy taktowaniu mikrokontrolera równym 1 MHz) sprawia, iż opisane rozwiązanie jest dużo korzystniejsze energetycznie, niż stosowanie zewnętrznego zegara RTC (na przykład sterowanego magistralą I²C). Oczywiście wymusza to na nas drobiazgowe przemyślenie stosownych funkcji sterujących, lecz gra warta jest świeczki. Jako że jest to temat ciekawy, poniżej zaprezentuję moduł obsługi zegara RTC nowoczesnych mikrokontrolerów ATtiny 1-series. Na początek plik nagłówkowy, a dzięki któremu porządkujemy późniejszy kod źródłowy, czyniąc go bardzo czytelnym – i jednocześnie upraszczamy proces wprowadzania ewentualnych zmian. Plik ten definiuje główne ustawienia sprzętowe oraz wprowadza niezbędne zmienne.
Jak widać, wprowadzono nowy typ danych o nazwie clockType, który integruje w sobie ustawienia zegara czasu rzeczywistego RTC.