WATCHDOG vs ARDUINO

Setkali jste se někdy se situací, že vaše Arduino zařízení zamrzlo? ANO? Není jistě problém stisknout tlačítko "reset" na desce ARDUINA. Ovšem pouze v případě, že je vaše zařízení přístupné...  Ale co když vaše zařízení není snadno přístupné nebo pracuje po dlouhou dobu bez našeho dozoru? Takové situaci bychom měli zabránit! Nechceme, aby se náš obvod (například automat zalévání rostlin zasekl a čerpal nepřetržitě vodu do záhonů...) zakousl. Spousta procesorů včetně těch, které se používají v Arduino deskách mají speciální funkci pojmenovanou "Watchdog časovač".watchdogg

Pokud je tento časovač povolen je nutné ho v běhu programu po určité době resetovat (příkazem v programu). Jestliže se program "zakousne" nebude tudíž příkazem v programu resetován a dojde k aktivaci resetovací sekvence CPU. Tato funkce je v podstatě  "hlídač" který zajistí, že se zařízení v případě zakousnutí běhu programu zresetuje a tím dojde k opětovnému bezchybnému spuštění obvodu...

ATmega 8/168/328 atd.. má Watchdog Timer (WDT). WDT je časovač řízený samostatným interním oscilátorem s taktem 128 kHz.  WDT vyvolá přerušení nebo reset když čítač dosáhne časového limitu.

 

Použití WDT v naší aplikaci s ARDUINEM

 

codewatchdog
Tabulka s nastavením prahové hodnoty časovače (nelze nastavit jiný námi požadovaný čas, než který je uveden v tabulce)

Prahová hodnota časovače
Konstanta Podporováno v CPU
15 ms WDTO_15MS ATmega 8, 168, 328, 1280, 2560
30 ms WDTO_30MS ATmega 8, 168, 328, 1280, 2560
60 ms WDTO_60MS ATmega 8, 168, 328, 1280, 2560
120 ms WDTO_120MS ATmega 8, 168, 328, 1280, 2560
250 ms WDTO_250MS ATmega 8, 168, 328, 1280, 2560
500 ms WDTO_500MS ATmega 8, 168, 328, 1280, 2560
1 s WDTO_1S ATmega 8, 168, 328, 1280, 2560
2 s WDTO_2S ATmega 8, 168, 328, 1280, 2560
4 s WDTO_4S ATmega 168, 328, 1280, 2560
8 s WDTO_8S ATmega 168, 328, 1280, 2560

 

Pozor! Resetovací příkaz wdt_reset(); musí být v programu zadán dříve, než dojde k přetečení časovače...

Příklad: wdt je nastaven na 2 sekundy, smyčka v programu čeká na stisk tlačítka 3 sekundy a následně provede příkaz wdt. 3s je větší čas než nastavený čas čítače wdt. Zařízení bude neustále resetováno. Řešení: vložit příkaz pro reset čítače wdt do smyčky tak, aby byl čas resetu čítače wdt kratší než 3s.