8
I.9 Le Watchdog Timer WDT (Chien de garde)
C’est un compteur 8 bits incrémenté en permanence (même si le µC est en mode sleep) par
une horloge RC intégrée indépendante de l’horloge système. Lorsqu’il déborde, (WDT TimeOut), deux situations sont possibles :
• Si le µC est en fonctionnement normal, le WDT time-out provoque un RESET. Ceci permet d’éviter de rester planté en cas de blocage du microcontrôleur par un processus indésirable non contrôlé
• Si le µC est en mode SLEEP, le WDT time-out provoque un WAKE-UP, l’exécution du programme continue normalement là où elle s’est arrêtée avant de rentrer en mode SLEEP. Cette situation est souvent exploitée pour réaliser des temporisations
L’horloge du WDT est ajustée pour que Le Time-Out arrive toutes les 18 ms. Il est cependant
possible d’augmenter cette durée en faisant passer le signal Time-Out dans un prédiviseur programmable (partagé avec le timer TMR0). l’affectation se fait à l’aide du bit PSA du registre OPTION_REG
o PSA = 1 on utilise le prédiviseur
o PSA = 0 pas de prédiviseur (affecté à TMR0)
Le rapport du prédiviseur est fixé par les bits PS0, PS1 et PS2 du registre
OPTION_REG (voir tableau ci-contre)
L’utilisation du WDT doit se faire avec précaution pour éviter la
réinitialisation (inattendue) répétée du programme. Pour éviter un WDT timeOut lors de l’exécution d’un programme, on a deux possibilités :
PS2 PS1 PS0Div
0 0 0 1 0 0 1 2 0 1 0 4 0 1 1 8 1 0 0 16 1 0 1 32 1 1 0 64 1 1 1 128
• Inhiber le WDT d’une façon permanente en mettant à 0 le bit WDTE dans l’EEPROM de configuration
• Remettre le WDT à 0 périodiquement dans le programme à l’aide de l’instruction CLRWDT pour éviter qu’il ne déborde
WDT
Prédiviseur
programmable
PS0 PS1 PS2
Horloge
WDT
0 0
1 1
PSA
WDT timeout
I.10 Le mode SLEEP
Le PIC peut être placé en mode faible consommation à l’aide de l’instruction SLEEP. Dans ce
mode, l’horloge système est arrêtée ce qui arrête l’exécution du programme. Pour sortir du mode SLEEP, il faut provoquer un WAKE-UP, pour cela il y a 3 possibilités : • RESET externe dû à l’initialisation du PIC en mettant l’entrée MCLR à 0. Le PIC reprend l’exécution du programme à partir du début.
• Timeout du chien de garde WDT si celui-ci est validé. Le PIC reprend le programme à partir de l’instruction qui suit l’instruction SLEEP
• Interruption INT (sur RB0) ou RBI (sur RB4-RB7) ou EEI (fin d’écriture en EEPROM de données). Le bit de validation de l’interruption en question doit être validé, par contre, le WAKE-UP a lieu quelque soit la position de bit de validation globale GIE. On a alors deux situations :