Programació en ASM del PIC 16F690 amb PICkit 2

Referència Trucs Perifèrics   Recursos CITCEA
Tutorial Exemples Projectes   Inici

Temporitzador de vigilància (watchdog)

El temporitzador de vigilància (watchdog) és un sistema que porta internament el microcontrolador que fa un reinici (reset) si el programa es queda bloquejat (o s'allarga massa). Bàsicament és un comptador que s'incrementa amb el rellotge lent (LFINTOSC) del microcontrolador (31 kHz) i quan arriba a un determinat valor provoca un reinici. Per evitar el reinici, el programa ha d'anar posant a zero periòdicament el registre del temporitzador de vigilància fent servir la funció CLRWDT().

Hi ha dos prescaladors que controlen el temps que trigarà el temporitzador de vigilància (watchdog) a reiniciar el microcontrolador. Un d'ells és específic del temporitzador de vigilància i es controla en el registre WDTCON. L'altre es pot fer servir amb el timer 0 o amb el temporitzador de vigilància (però no amb els dos a la vegada) i es controla en el registre OPTION_REG. El temps en segons que trigarà (aproximadament) a reiniciar el microcontrolador si no es posa a zero el comptador serà l'invers del producte de 31000 pels dos prescaladors.

El temporitzador de vigilància es pot posar en marxa de forma permanent en els bits de configuració o bé controlar-lo des del registre WDTCON. En el primer cas el watchdog estàrà sempre en funcionament fins que enviem un nou programa. En el segon cas, en canvi, podem posar en marxa i aturar el temporitzador de vigilància quan ho considerem convenient. En aplicacions molt crítiques el primer mètode ens garanteix que no podem aturar el temporitzador de vigilància escrivint en un registre equivocat.

Per posar en marxa el temporitzador de vigilància de manera permanent cal modificar la paraula de configuració, posant WDTE = ON. En la línia següent s'ha marcat en groc el que s'ha modificat:

#pragma config FOSC = INTRCIO, WDTE = ON, PWRTE = OFF, MCLRE = OFF, CP = OFF, CPD = OFF, BOREN = OFF, IESO = OFF, FCMEN = OFF

La taula següent mostra les funcions dels registres que fa servir el watchdog.

Registre Bits Nom Funció Observacions
WDTCON 1 a 4 WDTPS Preselecció específica del watchdog Valors del factor:
0000	1/32
0001	1/64
0010	1/128
0011	1/256
0100	1/512
0101	1/1024
0110	1/2048
0111	1/4096
1000	1/8192
1001	1/16384
1010	1/32768
1011	1/65536
0 SWDTEN Marxa i aturada del watchdog Si val 1 el watchdog està activat
(si el watchdog no es controla a la configuració)
OPTION_REG 4 a 7 No es fan servir per al watchdog Valor per defecte 1000
3 PSA Ús del prescalador Si és 1 serà per al Watchdog i si és 0 per al Timer0
0 a 2 PS Preselecció del watchdog compartida amb el Timer0 Valors per al watchdog:
000	1/1
001	1/2
010	1/4
011	1/8
100	1/16
101	1/32
110	1/64
111	1/128

A continuació farem alguns exemples de càlcul:

PSA Prescalador
específic
Prescalador
compartit
Operació Temps abans del reinici
(aproximadament)
0 1/32 indiferent 1 / (31000/32) 1 ms
0 1/65536 indiferent 1 / (31000/65536) 2,11 s
1 1/32 1/1 1 / (31000/32) 1 ms
1 1/65536 1/1 1 / (31000/65536) 2,11 s
1 1/65536 1/128 1 / ((31000/65536) / 128) 270,6 s (4,51 min)

En algunes aplicacions es combina el mode d'espera amb el temporitzador de vigilància fent que ell microcontrolador es vagi despertant periòdicament per fer una tasca i es torni a posar en repòs quan l'acaba.

A l'exemple WD podem veure com funciona.

 

 

Licencia de Creative Commons
Esta obra de Oriol Boix está licenciada bajo una licencia no importada Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0.