Il
Watch-Dog e' un oscillatore RC secondario inserito all'interno del
microcontrollore. Tale oscillatore non richiede alcun componente
esterno per funzionare ed e' completamente indipendente da quello che
regola il funzionamento del PIC: cio' significa che il Watch-Dog
continua a funzionare anche nel caso in cui viene a mancare il segnale
di clock esterno. Il Watch-Dog ha associato un tempo di default pari a
18 ms terminato il quale effettua il reset del microcontrollore (oppure, se in modo
sleep, lo risveglia). Se si desiderano tempi piu' lunghi e' possibile
associare il prescaler al Watch-Dog settando a 0 il bit PSA del
registro OPTION_REG e poi impostare il rapporto di moltiplicazione
tramite i bit PS0,PS1 e PS2 (il prescaler, quando viene associato al
Watch-Dog, funziona da moltiplicatore anziche' da divisore come
invece accadeva quando associato al TIMER0). In sostanza lo scopo del
Watch-Dog e' quello di attendere il periodo di tempo selezionato (di
default 18 ms) e poi scatenare automaticamente il reset del
microcontrollore (nel caso il PIC sia in modalita' sleep viene
semplicemente risvegliato continuando l'esecuzione del programma). L'unico modo per prevenire il reset del PIC e'
quello di resettare il Watch-Dog, cioe' quello di riazzerare il suo
conto alla rovescia tramite l'esecuzione dell'istruzione CLRWDT.
Il Watch-Dog e' utile in tutti quei casi in cui non si vuole che, per
qualche errore di programmazione, il microcontrollore si blocchi in un
loop infinito in qualche parte del programma. Si predispongono le
istruzioni di CLRWDT lungo tutto il codice del programma in maniera
tale da riazzerare ogni volta il Watch-Dog senza quindi farlo mai
scattare; se il PIC si inserisce in qualche loop indesiderato dal quale
non puo' piu' uscire non avra' modo di riazzerare il Watch-Dog che
quindi provvedera' (dopo il tempo di time-out) al reset.
Ovviamente questo esempio vale solo nel caso in cui nel codice di loop
non sia presente anche la stessa istruzione CLRWDT.
Il Watch-Dog parte automaticamente all'accensione del PIC, ma puo'
essere disabilitato del tutto in fase di programmazione.
In figura si riporta lo schema logico di collegamento del Watch-Dog e
del prescaler (in questo caso chiamato postscaler):
|