Arduino watchdog

arduino watchdog

Watchdog w Arduino to bardzo pożyteczna funkcja, w szczególności gdy zakończyliśmy już testy programu i chcemy użyć go w warunkach rzeczywistych. Na przykład zaprogramowaliśmy układ zamka szyfrowego do mieszkania i zainstalowaliśmy go na drzwiach wejściowych. Co jeśli z różnych przyczyn procesor płytki arduino zawiesi się? Na przykład na skutek zakłóceń elektromagnetycznych lub nieznanego wcześniej błędu w kodzie.
Nie wejdziemy w tej sytuacji do mieszkania…
Aby tak się nie stało dołączamy do kodu programu watchdog, który w przypadku gdy program zawiesi się, resetuje Arduino.

Użycie jest bardzo proste, co zademonstrowano na poniższym przykładzie.

Przykład 1

Użycie funkcji wdt_reset() musi być przemyślane. W powyższym przykładzie reset zegara watchdog „wdt_reset()” musi nastąpić w czasie nie dłuższym niż jedna sekunda. Jeśli to się nie stanie płytka Arduino zresetuje się (tak jakbyśmy nacisnęli na niej przycisk „reset”). Dlatego, nie możemy wprowadzić w kod programu np. komendy delay(2000), ponieważ funkcja watchdog zadziała i zresetuje nam płytkę zanim program odczeka te 2000 ms. 
Dodatkowo należy szczególnie uważać należy na pętle „for” i „while”, ponieważ program może wykonywać się w pętlach dłuższy czas. Dlatego, jeśli to konieczne można użyć wdt_reset() w kodzie kilkukrotnie – również wewnątrz pętli.

Jednak jeśli Arduino z jakiegoś powodu zawiesiło się i program w ciągu sekundy nie odczyta funkcji „wdt_reset()” nastąpi samoczynny reset programu. 
Można zapisywać liczbę resetów spowodowanych przez watchdog w pamięci eeprom. Po jakimś czasie użytkowania urządzenia można sprawdzić czy program lub układ elektroniczny jest stabilny, odczytując pamięć EEPROM.

Tabela dostępnych argumentów funkcji „wdt_enable” – tzn. okres w jakim funkcja sprawdza czy Arduino się nie zawiesiło:

Na przykład jeśli chcemy sprawdzać Arduino co ćwierć sekundy wpisujemy w sekcji  „seup”: wdt_enable(WDTO_250MS);

Uwaga praktyczna: Zdarza się, że watchdog jest w konflikcie z bootloaderem płytki. Dzieje się tak np. na płytce nano. Dlatego, aby wykorzystać w tej sytuacji watchdog, płytkę należy zaprogramować przez SPI a nie przez USB – wtedy wszystko działa.

Watchdog może być użyty również do oszczędzania energii zasilania w Arduino.
Więcej informacji o watchdog można uzyskać na oficjalnej stronie Arduino: link do strony

Przetestuj nasz generator przerwań typu PCINT (https://arduinowo.pl/generatory/pin_int/)