Fonctionnement:
Le chien de garde ou Watchdog, est un compteur qui permet de palier au plantage microcontrôleur. Ce plantage peut être d’ordre logiciel (oublie de retour de routines, mis en boucle du programme sur une situation non prévue ou tout simplement erreur de structuration du logiciel), soit matériel (parasites, chute de tensions) ; dans les deux cas, le blocage du programme peut avoir des conséquences catastrophiques : imaginez que le processus demande un arrêt total d’une installations, et que celui-ci reste bloqué !
Le watchdog est un compteur, dont la source d’horloge est indépendante, la fréquence de fonctionnement est de 1MHz pour une tension d’alimentation de 5V et 350KHz pour 3V.
Le comptage part de 0, tout débordement du compteur (255) générer un Reset.
A vous de prévoir périodiquement une remise à zéro du compteur par l’instruction assembleur ‘WDR’

Le registre WDCTR :
Registre de contrôle du Watchdog
Adresse |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
$41 |
x |
x |
x |
WDTOE |
WDE |
WDP2 |
WDP1 |
WDP0 |
- WDTOE : Bit de sécurité d’arrêt du chien de garde. Une sécurité logicielle permet de ne pas l’arrêter accidentellement. il faut respecter la procédure suivante : WDTOE = 1, puis aussitôt, WDE = 0. Si l’opération n’est pas effectuée durant les 4 prochains cycles d’horloge, ce bit repasse automatiquement à 0.
- WDE : Marche/Arrêt Watchdog. La désactivation de ce bit n’est possible qu’avec la procédure précédente.
- WDP2,1,0 :Sélection du facteur de pré division du signal d’horloge, en fait vous définissez l’intervalle maximum de RAZ *.
* L'oscillateur interne étant entièrement dépendant du quartz, le temps maximum entre deux RAZ varie en fonction de la tension d'alimentation :
| WDP2 |
WDP1 |
WDP0 |
Temps Max entre 2 RAZ, VCC= 3V |
Temps Max entre 2 RAZ, VCC= 5V |
| 0 |
0 |
0 |
47 ms |
15 ms |
| 0 |
0 |
1 |
94 ms |
30 ms |
| 0 |
1 |
0 |
190 ms |
60 ms |
| 0 |
1 |
1 |
380 ms |
120 ms |
| 1 |
0 |
0 |
750 ms |
240 ms |
| 1 |
0 |
1 |
1500 ms |
490 ms |
| 1 |
1 |
0 |
3000 ms |
970 ms |
| 1 |
1 |
1 |
6000 ms |
1900 ms |
Application :
La mise en marche du watchdog doit se faire le plus tôt possible, ensuite placez l’instruction WDR dans votre programme de manière a assurer un déroulement correcte du programme
Un petit conseil : n’oublier pas les temporisations, boucles d’attente de conditions…
Vous pouvez à tout moment déterminer la source d' un Reset grâce au registre MCUSR
Mise en marche du WD |
Arrêt du WD |
WDR ;mis à 0 compteur
LDI R16,$0F ;WDE = 1 avec base de temps Max
OUT WDTCR,R16
|
LDI R16,$1E ;WDTOE et WDE = 1
OUT WDTCR,R16
LDI R16,$10 ;WDTOE =1 et WDE = 0
OUT WDTCR,R16
|
|