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 .
ing. Radomír Matulík
erm@ email.cz - 06 / 1999