Jste zde

WatchDog pro mikrořadiče ATMEL

Dva příklady řešení problematiky WATCHDOGů předvedeny na příkladu s procesorem ATMEL.

1. Úvod
Zařízení řízená mikrořadiči (jednočipovými mikroprocesory) je vhodné chránit proti nedefinovaným stavům programu i proti případnému rušení na sběrnici. Pro tento účel se používá speciální hardware, který monitoruje činnost mikrořadiče. Nejčastěji čítá impulsy generované mikrořadičem (procesorem). Pokud nedostane po určitou dobu impuls, zresetuje mikrořadič, který se tak dostane do definovaného stavu. 
Tyto obvody lze pod označením m P Supervisors Circuits nebo slangově WatchDog (hlídací pes) získat u mnoha výrobců.

Často jsou tyto obvody vybaveny i dalšími funkcemi jako je např. dohled nad hodnotou napájecího napětí a při jeho poklesu pod kritickou mez opět generování resetovacího signálu. Určitou nevýhodou specializovaných obvodů je jejich cena. Proto jsou v tomto článku popsány celkem tři různé možnosti realizace funkce WatchDog. Vzhledem k tomu, že se autor článku zaměřuje na mikrořadiče řady 51 (zejména ATMEL), tak je ve schématu obvodového zapojení použit mikrořadič AT89C1051, ale popis jednotlivých možností WatchDogu lze aplikovat i na jiné mikrořadiče.

2. WatchDog s obvodem MAX705
Jedná se o nejjednodušší, ale rovněž o nejdražší variantu (obvod MAX705 stojí přibližně 250,-Kč vč. DPH). Obvod je k procesoru připojen dvěma vodiči. Program mikrořadiče musí zajistit generování impulsu na vývod WDI obvodu MAX705. Doba mezi dvěma impulsy nesmí přesáhnout 1,6s, jinak je generován na výstupu Reset záporný impuls, který resetuje mikrořadič. Resetovací signál je k mikrořadiči připojen přes tranzistor BC557, který má v obvodu emitoru zapojenu nízkopříkonovou diodu LED. Tato dioda je při výskytu resetovacího signálu rozsvícena, což je velmi výhodné zejména ve fázi ladění programu. Tranzistor invertuje resetovací signál, protože mikrořadiče ATMEL řady AT89 jsou resetovány kladným impulsem. Výrobce obvodů MAXIM dodává i obvod MAX706P, který má již přímo na výstupu kladný impuls a připojil by se tedy přímo na mikrořadič bez tranzistoru a diody LED.

Resetovací impuls je generován rovněž při poklesu napájecího napětí pod 4,65V. Do programu mikrořadiče je vložena procedura pro generování záporného impulsu na odpovídající vývod (P3.4). Tato procedura musí být volána cyklicky, měla by tedy být obsažena v hlavní smyčce programu, případně i v dalších částech programu, které jsou časově náročné (např. generování časové prodlevy).

3. Hardwarový WatchDog s časovacím obvodem 555
Tato varianta je podstatně levnější, ale složitější. Časovač 555 je zapojen jako astabilní klopný obvod a na svém výstupu Q (vývod 3) generuje impulsy s periodou přibližně 1s. Tyto impulsy jsou registrovány LED diodou (D2) a dále jsou připojeny na vstup T0 mikrořadiče. Tento vývod (časovač 0 mikrořadiče) je naprogramován v režimu 2 jako čítač vnějších událostí s předvolbou FFh. Po každém impulsu je čítač dekrementován, dojde k jeho přetečení a je vyvoláno přerušení. V proceduře obsluhy tohoto přerušení je testován příznakový bit WDBit, který je před návratem z přerušení vynulován. V průběhu správné činnosti programu je bit WDBit nastaven (procedura WDog). Pokud je při obsluze přerušení WDBit nulový, je proveden skok na proceduru Reset, která zajistí úvodní inicializaci mikrořadiče a běh programu od jeho počátku, případně od stanoveného místa. Výhodou tohoto obvodu WatchDog je možnost volby inicializace registrů a vývodů mikrořadiče při nutnosti resetu, oproti předchozímu případu, kdy byl proveden tvrdý hardwarový reset.

4. Softwarový WatchDog
Tento typ WatchDogu nevyžaduje žádný externí obvod. Hlídání běhu programu je realizováno výhradně softwarovými prostředky. K tomuto účelu je využit časovač 0 mikrořadiče , který je naprogramován v režimu 1 jako 16 bitový čítač vnitřních hodin mikrořadiče. To znamená, že každý dvanáctý impuls generovaný oscilátorem inkrementuje registry časovače. Pro kmitočet krystalu 11,059MHz je tedy časovač přetečen po 65536 impulsech, tj po 71,11milisekundách. Za tuto dobu stihne program provést přibližně 65540 instrukčních cyklů (jeden cyklus trvá 1,085mikrosekundy). Po přetečení časovače je generováno přerušení, v jehož obslužné proceduře testujeme příznakový bit WDBit. Byl-li tento bit nastaven v době mezi dvěma přerušeními od časovače 0, tak je všechno v pořádku. WDBit je vynulován a program běží dále. V opačném případě, pokud nedošlo k nastavení je vyvolán softwarový reset - je proveden skok na adresu Reset, kde je nejprve zavolána procedura SoftInt. Tato procedura zajišťuje správné obnovení zásobníku a povolení přerušení od časovače 0 voláním příkazu Reti. Pak je provedena inicializace registrů a vývodů mikrořadiče a program běží znovu od svého počátku. Konkrétní možnost realizace tohoto typu hlídání činnosti programu je uvedena ve výpise programuWatchDog.asm.
 

5. Popis elektrického zapojení
Jednotlivé vývody mikrořadiče lze připojit k hlídacím obvodům pomocí zásuvných propojek. Vývod RST mikrořadiče je možno připojit dvěma způsoby:

a) propojkou J1 (Reset), kdy zapojíme RC člen C5 a R1, který inicializuje resetovací vstup mikrořadiče při zapnutí napájecího napětí. K dispozici máme v tomto případě i tlačítko SW1, kterým můžeme kdykoliv resetovat mikrořadič.

b) propojkami J2 a J3 můžeme zapojit WatchDog obvod D1 (MAX705). Propojka J1 je v tomto případě rozpojena. Tento obvod zajišťuje resetovací impuls při zapnutí napájecího napětí a v případě, když nebyl vynulován vstup WDI v intervalu maximálně 1,6s. Dále je resetovací impuls generován při poklesu napájecího napětí pod 4,65V. Do klíčových částí programu musíme napsat příkaz pro generování impulsu na výstup T0 mikrořadiče, který je připojen na vstup WDI obvodu D1. Pokud program tzv. zabloudí např. v nekonečné smyčce, dojde k resetování mikrořadiče a program poběží znovu od počátku. Při resetovacím impulsu je vždy rozsvícena indikační dioda D5 (LED ), která nám signalizuje, že došlo k resetu - každý programátor to ocení zejména při vývoji složitějšího programu.

Pro dohled nad během programu můžeme rovněž použít obvod WatchDogu s časovačem 555. Jedná se dosud nepublikované zapojení a jeho výhodou je především podstatně nižší cena oproti obvodu MAX705. V tomto případě propojíme propojku J1 a J4 (J2 a J3 budou rozpojené). Reset po zapnutí napájecího napětí je standardní přes RC člen, rovněž lze využít resetovací tlačítko SW1. Časovací obvod U1(555) generuje impulsy na výstup Q, který je připojen na vývod T0 mikrořadiče. Tyto impulsy jsou registrovány diodou D2 (LED) a mají periodu přibližně 1s. V mikrořadiči je na vývod T0 připojen časovací obvod, který je naprogramován v režimu 2 jako čítač vnějších událostí s předvolbou FFh. Po každém impulsu je vyvoláno přerušení, během kterého je testován příznakový bit WDBit, který je vždy před návratem z procedury přerušení vynulován. V průběhu správné činnosti programu musí být WDBit nastaven (SET WDBit). Pokud je při obsluze přerušení WDBit nulový, je proveden softwarový Reset programu se stejným účinkem jako běžný hardwarový reset. V tomto případě se dioda D4 rozsvítí na delší dobu a tím nám indikuje provedení softwarového resetu.

UPOZORNĚNÍ: Elektrické zapojení a programové vybavení k tomuto článku je chráněno autorským zákonem a proto jej nelze bez svolení autora publikovat nebo šířit .
 

http://erm.provsechny.cz

ing. Radomír Matulík
erm@ email.cz - 06 / 1999

Hodnocení článku: