Vraag:
Bekijk Dog Timer + Arduino
littlebirdceo
2009-10-30 07:06:23 UTC
view on stackexchange narkive permalink

Hoe stel ik een hardware watchdog-timer in met een Arduino?

Ik denk dat je het andere antwoord moet kiezen, aangezien de Arduino de waakhond heeft ingebouwd.
Drie antwoorden:
phooky
2009-10-31 21:20:28 UTC
view on stackexchange narkive permalink

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}  
jonoxer
2009-10-30 09:02:30 UTC
view on stackexchange narkive permalink

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

phooky is absoluut correct, maar de interne WDT heeft beperkingen: hij kan niet langer dan ongeveer 6 seconden draaien (afhankelijk van het CPU-model) en er is geen manier om puur vanuit software een schone "herstart" uit te voeren. Je kunt de CPU vertellen om naar positie 0 te springen en de bootloader opnieuw te starten, maar dan kan het zijn dat je achterblijft met onbetrouwbare dingen in het RAM en dingen zoals interruptvlaggen die nog steeds in de CPU zijn ingesteld. Door RESET in hardware toe te passen, zorgt u ervoor dat de Arduino een schone omgeving bedenkt.
als u de WDT time-out ** laat, wordt ** een "schone reset" veroorzaakt, aangezien gegarandeerd wordt dat alle registers opstarten in een gedefinieerde toestand. Het uitvoeren ervan in software is net zo eenvoudig als het uitschakelen van interrupts en eindeloos herhalen.
Dirk
2010-05-07 19:24:51 UTC
view on stackexchange narkive permalink

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


Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 2.0-licentie waaronder het wordt gedistribueerd.
Loading...