Watchdog

Ciao a tutti.
Sono a chiedervi come poter utilizzare il watchdog. Ho letto a giro che c'è un bug del bootloader che, nel caso intervenga il watchdog, mette in un loop continuo di reset il processore. Ho provato a cercare a giro se esiste una soluzione ma senza risultato. Sapete darmi qualche dritta?

Grazie mille.

Il watchdog è un circuito interno che resetta l'Atmega se si accorge che il codice si "pianta" in qualche loop.
La domanda è: ma ti serve? Il watchdog ha più controindicazioni che altro, è non è bene usarlo. Potresti bloccare il micro anche con un codice scritto male e ritrovarti con il micro continuamente sotto reset dal watchdog.

PS:
l'Optiboot dovrebbe essere compatibile con il watchdog, i bug dovrebbero esserci con il bootloader 2009.

Grazie per la risposta.
Mi ero dimenticato di specificare che utilizzo un Arduino Mega 2560.

Non mi è fondamentale il watchdog mi ma piaceva avere un controllo sul corretto funzionamento del sistema.

Janos:
Mi ero dimenticato di specificare che utilizzo un Arduino Mega 2560.

La 2560 ha un suo bootloader, è da verificare se prevede la disattivazione del watchdog all'avio, altrimenti fa come la 2009 che continua a resettare se il tempo di intervento è troppo piccolo, non viene riavviato il programma utente dove è indispensabile prevedere come prima cosa la disattivazione del watchdog o il ripristino del suo tempo d'intervento.

Ho usato questo codice come test:

#include <avr/wdt.h>

void setup() {
  cli();
  MCUSR = 0;
  wdt_disable();
  wdt_reset();
  wdt_enable(WDTO_4S);
  sei();
  digitalWrite(37,HIGH);
  pinMode(31, OUTPUT);
}

void loop() {
  wdt_reset();
  if (!digitalRead(37)) {
    while (1) {}
  }
}

Ma il risultato è che se porto a massa il pin 37 il watchdog interviene (come è giusto che sia) ma continua a resettarsi all'infinito. Devo necessariamente togliere l'alimentazione all'arduino.

Non credo sia un discorso di tempo troppo piccolo, ho messo 4 secondi.....

Se hai la Mega2560 mi sa che hai il bug. Qualcosa mi pare di aver visto sul forum, ma non confermo al 100%.

Cmq non puoi usare un timer e controllare ogni tot se il pin 37 ha un segnale di LOW? E muoverti di conseguenza nel caso tale segnale passi un certo periodo di tempo?

Qualunque cosa si possa prevedere a livello software è inutile nel caso in cui il software si blocchi.