1 les microcontrôleurs pic de microchip le 16f84


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 :

Laisser un commentaire