W tym odcinku przyjrzymy się układom zastępującym i uzupełniającym wbudowane peryferia mikrokontrolera. Są to na przykład układy watchdog, generatory kwarcowe czy zegary czasu rzeczywistego. Przyjrzymy się też układom POR/BOR, które dbają o to, by procesor pracował tylko przy właściwym napięciu zasilania. Warto spojrzeć również na – często występujące w mikrokontrolerach – wzmacniacze operacyjne i sprawdzić, czy zewnętrzne układy scalone (lub wręcz rozwiązania tranzystorowe) nie okażą się lepsze. To ostatnie pytanie jest szczególnie ciekawe, zwłaszcza biorąc pod uwagę, jak wielkie mamy bogactwo układów scalonych i jak rzadko obecnie trafia się w komercyjnych urządzeniach na tranzystory realizujące inne funkcje niż przełączanie.
Układy nadzorcze: POR, BOR i watchdog
W praktyce każdy mikrokontroler ma wbudowane obwody POR, BOR i watchdog. Układ POR utrzymuje procesor w stanie resetu, póki napięcie zasilania nie osiągnie stabilnej wartości minimalnej. W przeciwnym razie program może być wykonywany niepoprawnie. Zakończenie stanu POR powoduje też ustawienie wartości domyślnych we wszystkich rejestrach (chyba że nota katalogowa mikrokontrolera podaje inaczej) oraz wyzerowanie pamięci RAM. Z kolei układ BOR wstrzymuje pracę programu, gdy napięcie spadnie poniżej minimalnego progu. Reset spowodowany spadkiem napięcia zasilania jest zazwyczaj odnotowywany przez mikrokontroler za pomocą flagi w jednym z rejestrów, przy czym jej stan może zostać zachowany przez dłuższy czas po zaniku zasilania. Z praktycznego punktu widzenia funkcjonalność tę można zastosować do zmiany sposobu pracy układu przez szybkie jego wyłączanie i włączanie – tak działają latarki z wieloma trybami świecenia przełączanymi przyciskiem zasilania. Dlaczego zatem ktoś miałby decydować się na użycie zewnętrznego układu POR/BOR, skoro mikrokontroler już taki zawiera? To samo pytanie można zadać w odniesieniu do zewnętrznych układów watchdog, które – podobnie do wewnętrznego watchdoga procesora – mają za zadanie zresetować układ po upływie określonego czasu, jeśli program wcześniej nie da znaku życia watchdogowi. Moduł watchdog wewnątrz mikrokontrolera w wielu układach może wybudzić ten procesor ze stanu uśpienia, bez utraty kontekstu sprzed uśpienia – program kontynuuje pracę od miejsca, w którym uśpienie zostało zainicjalizowane. Zewnętrzny układ watchdog zresetuje mikrokontroler całkowicie, rozpoczynając egzekucję programu od początku. Czytelnik może zatem dojść do wniosku, że zewnętrzny watchdog jest mało użyteczny i niepotrzebnie podnosi koszty, podobnie zresztą jak układy POR/BOR.
Zewnętrzne układy POR/BOR i watchdog mają jednak kilka cech, które mogą być pożądane przez projektanta. Po pierwsze: zwykle są bardziej energooszczędne od modułów wbudowanych w mikrokontroler, szczególnie gdy rzeczony procesor jest starszej generacji. Po drugie układy POR/BOR mają szeroki wybór napięć granicznych, dzięki czemu można precyzyjniej dobrać punkt wyłączenia w układzie zasilanym bateryjnie. Inną zaletą zewnętrznego układu POR/BOR może być precyzyjnie określone opóźnienie między ustabilizowaniem się napięcia zasilania a startem procesora. Większość mikrokontrolerów ma specjalny timer opóźniający start po osiągnięciu stosownego napięcia na pinie RESET – pin ten zazwyczaj dołączony jest do obwodu RC składającego się z rezystora 10 kΩ i kondensatora 100 nF. Jak łatwo się domyślić, czas aktywacji tak wyposażonej linii RESET zależy zatem nie tylko od stałej czasowej tego obwodu, ale także od napięcia zasilania.
Zewnętrzny układ POR/BOR zazwyczaj ma stałe opóźnienie, które może zostać dobrane zależnie od potrzeb. Im mniej pewne źródło zasilania, tym dłuższe powinno być opóźnienie między ustabilizowaniem się napięcia a startem układu. Dla przykładu układ TPS3808 firmy Texas Instruments pozwala uzyskać opóźnienie wynoszące nawet dziesięć sekund. Pobór prądu tego układu – ze względu na jego wiek – jest znaczny i sięga typowo 2,4 μA. Z drugiej strony – to wciąż mniej niż wynosi pobór prądu modułu BOR w starszym mikrokontrolerze, na przykład PIC18LF45K50, tam bowiem najniższa typowa wartość wynosi 3,4 μA, a najwyższa typowa – aż 8 μA. W przypadku zaprezentowanego w części drugiej mikrokontrolera PIC18F27Q10 natężenie prądu zasilania BOR wynosi aż 30 μA, z kolei moduł LPBOR typowo pobiera już zaledwie 0,9 μA.
Spójrzmy zatem na kilka układów POR/BOR dostępnych na rynku. Na pierwszy ogień niech pójdzie seria TLV803E/809E/810E. Pobierają one typowo 250 nA, maksymalnie 1 μA. Różnica między nimi tkwi w sposobie działania wyjścia RESET – jest to odpowiednio: open-drain (TLV803E), aktywny stan niski push-pull (TLV809E), aktywny stan wysoki push-pull (TLV810E). Do wyboru mamy szereg napięć progowych: 1,7 V, 1,8 V, 1,9 V, 2,25 V, 2,4 V, 2,64 V, 2,93 V, 3,08 V, 3,3 V, 4,2 V, 4,38 V, 4,55 V, 4,63 V; i opóźnień: 40 μs, 10 ms, 20 ms, 50 ms, 100 ms, 200 ms i 400 ms. Histereza wynosi 1,2% napięcia przełączania, a dokładność – typowo 0,5%. Zależnie od obudowy dostępny może być również pin do dołączenia zewnętrznego przycisku resetu. Układy Maxim MAX6326/-7/-8 oraz MAX6346/-7/-8 oferują mniej opcji, jeśli idzie o napięcia przełączania, gdyż są przeznaczone do systemów o napięciu pracy 2,5 V, 3 V, 3,3 V i 5 V. Do wyboru jest szereg konfiguracji wyjścia, a pobór prądu w systemie 3 V wynosi tylko 500 nA typowo oraz 1 μA maksymalnie. Firma Torex z kolei oferuje kilka różnych serii układów nadzorujących zasilanie. Układy serii XC6126 oferują dość niski pobór prądu, 0,7 μA przy 3 V. Do wyboru są napięcia przełączania od 1,5 V do 5,5 V w krokach co 0,1 V. XC6129 oferuje podobne parametry, ale przy niższym poborze prądu, i dodaje możliwość wyboru opóźnienia resetu za pomocą zewnętrznego kondensatora (zwarcie tego kondensatora pozwala uzyskać ręczny reset).
Ciekawym wyborem jest też układ TLV840-Q1 firmy Texas Instruments, który oferuje wszystkie typowe możliwości układów POR/BOR, czyli wybór rodzaju wyjścia, wejście dla przycisku reset i szeroką gamę napięć progowych. Pobiera przy tym zaledwie 120 nA. Zewnętrzny kondensator pozwala wybrać opóźnienie, bez niego wynosi ono 40 μs, z kondensatorem 1 μF zaś 619 ms. Zakres napięć przełączania rozciąga się od 0,8 V do 5,4 V. Innymi układami o podobnym poborze prądu są te z rodziny MAX16056...MAX16059, które dodatkowo realizują funkcję watchdoga. W tym wypadku prąd zasilania wynosi 132 nA przy 3,3 V (typ.) – czyli o połowę mniej niż pobiera watchdog w układzie PIC18F27Q10. Wadą układu jest brak możliwości zmiany interwału watchdoga z poziomu oprogramowania, gdyż ta zależy od użytego kondensatora. Analog Devices w swojej ofercie ma dwa spokrewnione ze sobą układy: ADM696 i ADM697. Monitorują one napięcie zasilania, przełączają je z zewnętrznego źródła na zasilanie bateryjne i jednocześnie realizują funkcję watchdoga oraz POR/BOR. Przy zewnętrznym zasilaniu pobierają do 1 mA, ale z baterii już maksymalnie 1 μA. Do ich możliwych aplikacji należy bateryjne podtrzymywanie pamięci RAM w systemie mikroprocesorowym, gdy zaniknie zewnętrzne zasilanie. Po jego powrocie mikroprocesor jest restartowany, a jednocześnie zachowane zostają dane w pamięci RAM. Inny układ łączący w sobie funkcję monitora napięcia i watchdoga to TPS3813-Q1 od Texas Instruments. W jego przypadku pobór prądu wynosi typowo 9 μA, czyli dość sporo. W zamian za to sam watchdog jest typu okienkowego, tj. sygnał resetu musi pojawić się przed upływem maksymalnego czasu, ale po upływie czasu minimalnego – inaczej nastąpi reset. Rozwiązanie to przydaje się, gdy mikrokontroler znajdzie się przypadkiem w pętli, która nie robi nic poza resetowaniem watchdoga. TPS3430 tej samej firmy to programowalny watchdog okienkowy kontrolowany za pomocą trzech pinów ustalających interwał i szerokość okienka. Układ typowo pobiera 10 μA. Układy Maxim MAX6821...MAX6825 również łączą w sobie funkcję POR/BOR, Watchdog i ręcznego resetu. Interwał watchdoga wynosi 1,6 s, pobór prądu zaś typowo 7 μA przy 3,6 V. Różne modele łączą różne kombinacje wyjść i wejść, każdy zaś oferuje dziewięć różnych napięć przełączania do wyboru, od 1,58 V do 4,63 V.
Jak widać, wybór układów jest dość duży, ale nie każda z dostępnych opcji jest ekstremalnie energooszczędna. Timery watchdog wymagają bowiem oscylatorów, które znacząco podnoszą pobór prądu. Natomiast układy POR/BOR realizują opóźnienia za pomocą kondensatorów ładowanych źródłem napięcia odniesienia przez wewnętrzny rezystor, dzięki czemu stała czasowa obwodu jest stabilna i niezależna od napięcia zasilania. Czytelnik może też rozważyć budowę własnego układu POR/BOR opartego na tranzystorach. Jest to jak najbardziej akceptowalne rozwiązanie, pod warunkiem, że cały obwód zmieści się na płytce drukowanej, będzie odpowiednio energooszczędny i bezawaryjny, jednocześnie oferując niższy koszt niż użycie specjalnego układu scalonego. Zaprojektowanie takiego rozwiązania zostawiam jako wyzwanie dla zainteresowanych Czytelników.