feed-image Odebírat tento obsah čtečkou
Nabídka
csenderusktr

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.
Oštítkován jako: Arduino

Komentáře   

#3 Martin Pihrt 2014-02-18 14:14
Záhada vyřešena - na desce MEGA2560 je chyba v bootloaderu a pro použití WDT se musí vyměnit bootloader...
#2 Martin Pihrt 2014-02-18 12:25
Dobrý den,
jak vypadá váš kód, který máte v IDE? Toto se mi stávalo také, pokud byl povolen časovač (wdt_enable) a někde se na něco v programu čekalo došlo k přetečení a blikání led jak popisujete. Tento postup jsem použil u mnoha svých konstrukcí a WDT beží bez problémů. Nedoporučuji používat krátký interval pro WDT (menší než 4 sec) v programu z důvodu uploadu programu do desky z PC (nestihne se zavést nový program a dojde k resetu dříve než si procesor popovídá s PC). Jaké máte Arduino (testoval jsem to s Atmega328 a 2560). MP
#1 Míra89 2014-02-18 11:57
zdravím , mám problém, vše nastavím dle návodu ale když dojde k přetečení časovače rozbliká se mi na desce led 13 a nejde s tim nic udělat , jedině vytáhnout z usb arduino a poté přehrát program, v případě že se program dostane do té části kde ta led 13 bliká tak nejspíš ani nejde uploadnout program, nějaké rady ?

Nemáte oprávnění pro vkládání komentářů (You have no rights to post comments.)