Hoe stel ik een hardware watchdog-timer in met een Arduino?
Hoe stel ik een hardware watchdog-timer in met een Arduino?
Er is al een watchdog-timer ingebouwd in de atmega-chip; je kunt avr / wdt.h
gebruiken om het te manipuleren.
Een snel voorbeeld:
#include <avr /wdt.h>void setup () {wdt_enable (WDTO_500MS); // laat de wdt de chip resetten // als 500ms verstrijkt zonder een reset} void loop () {wdt_reset (); // reset de wdt}
Er zijn een aantal speciale hardware watchdog-chips beschikbaar, maar het is eenvoudig genoeg om een gewone 555 timer-IC en een paar ondersteunende onderdelen te gebruiken. Met de 555 geconfigureerd in een stabiele modus met een zeer lange "HIGH" -periode en een relatief korte (misschien 0,3 seconden) "LOW" -periode, kan de uitgang via een diode worden verbonden met de resetpin van de Arduino om van de waakhond een open-collector te maken apparaat. De Arduino kan vervolgens periodiek de watchdog resetten met behulp van een digitale uitgang om een transistor in te schakelen die de timingcondensator die aan de 555 is bevestigd ontlaadt, waardoor wordt voorkomen dat deze ooit een triggerpunt bereikt waardoor de Arduino wordt gereset.
Wat basisinformatie over een project om dit te doen is beschikbaar op http://www.practicalarduino.com/news/id/471
Ik heb gehoord dat er problemen zijn gemeld met de WDT en de reguliere bootloader, dus misschien wil je er een andere bootloader mee proberen, bijvoorbeeld Adaboot.
Je kunt ook nog een heleboel dingen doen met de WDT naast alleen een reset. Ik raad http://www.atmel.com/dyn/resources/prod_documents/doc2551.pdf
aan