Obvody watchdog a obvody hlídající napájení mikroprocesoru - o co jde a jak je používat
Tyto obvody mají funkcí hlídacích (nebo též dohlížecích) obvodů, což v případě mikroprocesorové techniky znamená, že dohlížejí na správný chod programu (obvody Watchdog) nebo že dohlížejí na dodržení základní podmínky, za které je mikroprocesor schopen bezporuchově pracovat, tedy na dodržení odpovídající hodnoty napájecího napětí (obvody Power-Fail).
Obvody Watchdog
Obvod může být buď integrován přímo v daném typu mikroprocesoru (viz přehled typů) jako jeho nedílná součást nebo může být konstruktérovi k dispozici ve formě externí součástky (IO), kterou je ke stávajícímu mikroprocesoru nutné připojit. Záleží na konstruktérovi, pro kterou možnost se rozhodne, integrovaný watchdog má výhodu v tom, že ušetříme místo na DPS, obvykle je jednodušší obsluha, nevýhodou může být použití určité typu mikroprocesoru, který nám nemusí vyhovovat z jiného hlediska a s tím souvisí i pevně dané vlastnosti watchdogu. Použijeme-li externí watchdog, zabere nám obvod nějaké místo na DPS a "ukradne" si pro sebe jeden pin portu (Px.x), ale máme zase možnost výběru watchdogu, který nám svými vlastnostmi nejvíce vyhovuje.
Obvod watchdog funguje jako časovač (v podstatě jde o čítač), jež časuje po určitý interval. Tento interval je buď pevně dán, nebo ho lze nastavit zapojením a hodnotami vnějších součástek, příp. ho lze nastavit programově. Pokud tedy watchdog dočasuje celý interval, vyvolá automaticky RESET mikroprocesoru. Aby k RESETu nedošlo, musíme zajistit jeho vynulování (inicializaci) před dosažením časového intervalu. To provedeme buď externím signálem, nebo znovuzapsáním hodnoty do řídícího registru watchdogu a nebo speciální instrukcí. První možnost platí pro externí watchdog, další dvě pro integrovaný watchdog.
A k čemu tedy vlastně obvod watchdog slouží? Jednoduše řečeno - k ochraně proti "zakousnutí" nebo též "zatuhnutí" programu. Pokud píšeme jakýkoliv rozsáhlý program, vždy se nám může stát, že za určitých okolností může dojít k zacyklení programu, třeba vlivem náhodné změny dat v paměti nebo neošetřené kombinace vstupních dat. Další chybou může být chybné maskování přerušovacího signálu, chybná konfigurace periferních obvodů, chyba u sér.kanálu atd. Tyto chyby (včetně elmag.rušení, pokud je zařízení v takovém něpříznivém prostředí umístěno) mohou vést k nedefinovatelnému chování programu. Protože naprostá většina aplikací s mikroprocesory vyžaduje chod v reálném čase ( tj. i zpracování časově kritických událostí), výše uvedeným chybovým stavům je nutné zabránit i za cenu RESETu mikroprocesoru. K tomu využijeme obvod watchdog a to následovně - do našeho programu vložíme instrukce, kterými zajistíme obnovování (přesně nulování) hodnoty časovače, čímž zajistíme, že při správném chodu programu nedojde k dočasování časového intervalu watchdogu a tím nedojde ani k RESETu. Z toho vyplývá, že musíme zajistit potřebnou periodu obnovování (nulování) časovače watchdogu.
Uvedeme si příklad integrovaného a externího watchdogu.
Jde o nejjednodušší realizaci watchdogu, signál pro čítač je brán z vnitřního oscilátoru (čítač je inkrementován každý strojový cyklus). Časový interval 14-bitového čítače je pevně nastaven, a to dosažením odpovídající hodnoty 16383 stroj.cyklů, tj. asi 16 ms při 12 MHz krystalu. Tato nevýhoda může u složitější aplikace představovat komplikovanější programování. Watchdog se v programu aktivuje zapsáním kombinace 01EH a 0E1H do registru WDTRST (nový SFR), stejnou kombinací se čítač watchdogu nuluje. Po aktivaci watchdogu ho již samozřejmě nelze vypnout, vypne se pouze RESETem mikroprocesoru (ať už vlivem watchdogu nebo normálním hardwarovým resetem). Dále je možné nastavit (v reg. AUXR), zda bude watchdog čítat i v režimu se sníženou spotřebou. Navstává otázka, proč je čítač watchdogu nulován postupným zápisem kombinace 01EH a 0E1H do registru WDTRST. Je to proto, že že watchdog musí být chráněn proti náhodnému nulování chybně běžícím programem. K tomu by mohlo dojít, pokud by k nulování stačila např. změna hodnoty jediného bitu v řídícím registru. Watchdog musí mít též ošetřenu možnost náhodného vypnutí, u tohoto mikroprocesoru ATMEL je to ošetřeno tím, že watchdog lze v programu pouze aktovovat, ale ne už vypnout. U jiných mikroprocesorů může být ochrana proti náhodnému vypnutí řešena obdobně, i třeba trochu benevolentněji - konfigurace watchdogu je povolena pouze v omezeném čas.intervalu po RESETu.
Externí watchdog - integ.obvod MAX690
Většina vyráběných integr.obvodů plnících funkci watchdogu v sobě integruje i funkci obvodu hlídání napájení, integ.obvodů čistě jen s funkcí watchdogu je minimum (např. ). Integrace obou funkcí do jednoho obvodu (pouzdra) totiž představuje výhodu v malé ploše potřebné na DPS a i v nepatrně nižší ceně, než kdybychom použili dva samostatné IO.
Integrovaný obvod MAX690 je členem řady hlídacích IO (MAX690-MAX695) vyráběných firmou Maxim. Tyto obvody v sobě sdržují kromě funkcí obvodu watchdog i další funkce jako je obvod power-fail, power-up, power-down atd. My si tedy blíže popíšeme obvod MAX690, který v sobě integruje jednoduchý watchdog s pevným časovým intervalem 1,6 sekundy, dále obvod hlídání napájecího napětí včetně obvodu pro přepnutí na záložní zdroj (baterii) a dále obvod zajišťující bezpečný RESET při náběhu napájecího napětí (Power-up) a při odpojení napájení (Power-down).
A tady přišel čas na to, vysvětlit si, jak fungují obvody hlídající napájení mikroprocesoru. Částečně už byla jejich funkce vysvětlena výše - tyto obvody monitorují hodnotu napájecího napětí, pokud dojde k poklesu nap.napětí pod stanovenou mez, jsou schopny o tomto stavu předat informaci do připojeného mikroprocesoru. Mikroprocesor tak dostane možnost (získá krátký čas) bezpečně ukončit svou funkci před nádcházejícím výpadkem napájení, stihne tak např. u systému bez zálohování napájení pro mikroprocesor nebo paměť RAM uložit rychle důležité údaje do paměti EEPROM a nedovolit další zápis do této paměti). Některé obvody mají navíc možnost přepnutí na záložní baterii při poklesu nap.napětí, a tím je bezpečnost bezchybného uložení údajů do EEPROM ještě zvýšena. Pokud použijeme baterii s dostatečnou kapacitou, můžeme ji pak po přepnutí využít k napájení paměti RAM, samotného mikroprocesoru, příp. dalších log.obvodů s malým příkonem. Odpadne tak nutnost použít pamět EEPROM (při krátkodobém výpadku napájení). Hlídací obvody bývají ještě doplněny o obvody zajišťující bezpečný RESET při náběhu napájecího napětí (Power-up nebo též Power-on) a při odpojení napájení (Power-down nebo též Power-off).
Dále budeme pokračovat v popisu obvodu MAX690. Obvod se vyrábí v pouzdře DIP o 8 vývodech (viz obr. ). V současnosti je asi nejpoužívanějším obvodem typu watchdog + power-fail, i když je poslední dobou vytlačován funkčně obdobnými, ale mnohem levnějšími obvody (viz dále).