De Watchdog Timer begrijpen: Hoe het microcontroller-ophangen voorkomt
Onderdelen en benodigdheden
- Arduino UNO (1×)
Apps en online services
- Arduino IDE
Over dit project
Wat als je microcontroller in een oneindige lus vastloopt? Normale troubleshooting: resetknop indrukken. Maar is dat praktisch als het constant gebeurt? Nee. Hier komt de Watchdog Timer (WDT) van pas.
„Een watchdog timer is een hardware-timer die automatisch een systeemreset genereert als de hoofdfunctie deze niet periodiek herlaadt. Vaak gebruikt om embedded devices te resetten die vastlopen door soft- of hardwarefouten.” (os.mbed.com/cookbook/WatchDog-Timer)
De hond voeden!
Als je een hond hebt, moet je hem regelmatig voeren. Vergeet je het één dag, bijt hij. De watchdog timer werkt hetzelfde.

In de loop() reset je de timer constant. De WDT wordt geladen met een waarde groter dan de maximale vertraging in je hoofdlus. Komt de code niet terug om de timer te resetten voordat hij op nul telt? Dan volgt een interrupt → processor reset. Zo beschermt de WDT tegen vastlopers.
Watchdog timer op Arduino UNO (ATmega328P)

Benodigde bibliotheek:
#include <avr/wdt.h>
Watchdog timer inschakelen
wdt_enable(WDT_RESET_TIJD);
Beschikbare time-outs: 15 ms, 30 ms, 60 ms, 120 ms, 250 ms, 500 ms, 1 s, 2 s, 4 s, 8 s.

Voorbeeld: wdt_enable(WDTO_4S); – WDT ingeschakeld met 4 seconden time-out.
Watchdog timer resetten
wdt_reset();
Plaats deze functie in loop(). Als je een grote delay() hebt die langer is dan de WDT-time-out, plaats wdt_reset() ervoor. Anders reset de MCU voordat de taak klaar is.
Watchdog timer uitschakelen
wdt_disable();
Voorbeeldcode
De sketch toont normale loop met wdt_reset() elke seconde, gevolgd door een oneindige lus while(1){} die de MCU zou laten hangen – maar de WDT reset na 4 seconden.
#include <avr/wdt.h>
void setup() {
Serial.begin(9600);
Serial.println("Setup started:");
delay(2000); // wacht op init
wdt_enable(WDTO_4S); // WDT aan, 4 s
}
void loop() {
Serial.println("LOOP started!");
for (int i = 0; i <= 5; i++) {
Serial.print("Loop: ");
Serial.print(i);
Serial.println();
delay(1000);
wdt_reset(); // hond voeren
}
// oneindige lus → MCU zou hangen, maar WDT reset na 4 s
while (1) {}
}
Output

De seriële monitor toont de loop 0–5, daarna herstart de MCU (setup draait weer) door de WDT-reset.
Feedback, vragen, discussie? Laat een reactie achter!
Code
Volledige sketch (bovenstaand).
Productieproces
- Insert moulding uitgelegd: Efficiëntie verhogen & kosten verlagen in multi-materiaal productie
- Prototyping uitgelegd: De cruciale validatiestap voor start-ups
- Lineaire motoren begrijpen: Van elektrische energie naar nauwkeurige lineaire beweging
- CNC Draaien Uitgelegd: Precisie Bewerking voor Hoogwaardige Onderdelen
- Gieterijen Begrijpen: Waar Metaal De Bouwstenen Van De Moderne Industrie Wordt
- Meertrapspompen begrijpen: functie, toepassingen en voordelen
- Persvoeders: Werking, Functies en Industriële Toepassingen
- Dompelpompen begrijpen: werking en belangrijkste voordelen
- Drankrobots begrijpen: technologie, automatisering en rol in drankenindustrie
- Mechanische Persen Uitgelegd: Functie, Typen en Industriële Toepassingen
- Servomotoren Uitgelegd: Hoe Ze Werken en Waarom Ze Belangrijk Zijn