Watch-Dog



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):