WatchDog Arduino Nano

Bonjour a tous,
me voici aujourd'hui confronté a un probleme avec mon montage Arduino. En effet, j'ai fais un programme de domotique et je voudrais integrer un WatchDog dans mon programme afin de palier a un eventuel plantage du soft...
Pour ce faire, j'ai ajouté ce code:

#include <avr/wdt.h>            // Inclusion de la librairie WatchDog

void setup()   
{
  wdt_disable(); // Desactiver le WatchDog

// ...

  wdt_enable(WDTO_8S); // Active le WatchDog sur une durée de 8 secondes 

} // fin de la fonction setup()

void loop()
{
wdt_delay(100);
// ...
} // fin de la fonction loop()



void wdt_delay(unsigned long msec) 
{
wdt_reset();

while(msec > 1000) 
{
wdt_reset();
delay(1000);
msec -= 1000;
}
delay(msec);
wdt_reset();
}

void wdt_reload() 
{
delay(8001);
}

pour continuer, j'ai récupéré toutes les fonctions fuses et autre de l'ATMEGA328P de la carte Nano
L Fuse: 0xFF ; H Fuse: 0xDA ; EFuse: 0xFD ; Bootloader de 2048 bytes avec début a 7800.
Ensuite, j'ai voulu editer les options des Fuses afin d'ajouter le watchdog sur ON WDTON.
cela fonctionne pour un test avec un exemple Blink without Delay.
lorsque je retire wdt_delay(100); de la loop, la carte redémarre au bout de 8 secondes-->logique...
Par contre, lorsque je l’insère dans mon programme principal de gestion, j'ai la led D13 qui se met a clignoter très très rapidement et plus rien ne fonctionne... Je pense que le bootloader plus le soft doivent passer plus de 8 secondes pour demarrer et donc la carte plante et tourne en boucle...
Si quelqu’un pouvait me dire ce qu'il en pense, cela serrait très gentil de sa part de m'aider.
Merci
Cordialement

correction, ce n'est pas la Led D13 qui clignote mais TX...

Ensuite, j'ai voulu editer les options des Fuses afin d'ajouter le watchdog sur ON WDTON

Bonjour,
logique, si tu positionne le fuse WDTON, le wdt ne pourra plus être désactivé logiciellement (notamment par wdt_disable(); )
... ce qui perturbera immanquablement le boot-loader qui n'est pas prévu pour fonctionner avec le wdt
donc ne pas toucher à ce fuse et utiliser uniquement les fonctions logicielles

bonsoir et merci de ta reponse
peux tu me dire de quelle facon faire avec les fonctions logicielles ?
merci

Bonjour a tous,
J'ai trouvé la solution:
Installer optiboot-v5.0a Google Code Archive - Long-term storage for Google Code Project Hosting. et vous pourrez utiliser le WatchDog correctement

  wdt_enable(WDTO_8S); // Active le WatchDog sur une durée de 8 secondes 
  
  wdt_reset();

la seule modification est de prendre le fichier boards.txt et le coller dans C:\Program Files\arduino-1.6.4\hardware\arduino\avr

et dans mon cas, ajouter

atmega328o.upload.tool=avrdude
atmega328o.upload.protocol=arduino

atmega328o.bootloader.tool=avrdude

et voila, le watchdog est opérationnel

j’espère que cela pourra aider d'autres personnes ayant un problème similaire

@bientot sur Arduino Forum

Bonjour,

avant de répondre à ta question, je dois rappeler que si tu touches aux fuses, prend bien garde à ne pas modifier le bit SPIEN, cela t'empêcherait définitivement d'accéder à la puce avec ton programmateur

de quelle facon faire avec les fonctions logicielles ?

wdt_enable(WDTO_8S);
c'est la mise en marche du wdt. A toi de voir si la durée de de 8 secondes convient

wdt_reset();
à disposer judicieusement. Si le programme arrive là, c'est qu'il a bien tourné. Selon les emplacements de cette instruction, et en fonction du timing de ton programme, tu détermines la durée optimale du temporisateur wdt

wdt_disable();
normalement tu n'utilises pas cette fontion. Le wdt est automatiquement désactivé après un reset, ce qui garantit le fonctionnement du bootloader
attention toutefois au bibliothèques dont la durée d'exécution pourrait dépasser celle de ton wdt. L'estimation de cette durée n'est pas évidente pour un débutant ...