Il
RESET
da WDT
Tutti i PIC hanno un timer Watchdog che dà modo allo
sviluppatore di ripristinare il dispositivo in caso di una operazione
inaspettata.
Il timer Watchdog (letteralmente cane da guardia), una volta
avviato, deve essere periodicamente cancellato attraverso il software
per impedire un reset. Possiamo fare una analogia con il dispositivo di uomo
morto, un pedale o pulsante che il conduttore di un treno deve periodicamente
premere per identificare che è ancora nel pieno delle sue facoltà; se fosse
colto da mlaore e non premesse il pulsante, il treno si arresterebbe da solo.
Così pure il WDT: se il software non "preme"
periodicamente il "pulsante", vuol dire che non sta facendo quanto
il programmatore ha previsto e il sistema riceve un Reset.
Ovviamente questo dispositivo è efficace solo se usato
correttamente: occorre che il WDT sia azzerato con la giusta cadenza ( e per
questo esiste una istruzione opportuna), ma senza ecceder, dato che troppi
comandi del genere, piazzati a caso, potrebbero annullarne l' effetto. Come
pure è necessaria una giusta procedura, una volta che il WDT abbia generato
il Reset, per fare fronte all' evento, che dovrebbe essere del tutto
eccezionale; altrimenti non sarebbe possibile verificare le cause dell' evento
e/o eventuali errori di programmazione.
Il timer Watchdog, essendo quindi una protezione che richiede
una gestione, va attivato, se richiesto, nella fase di CONFIG del processore
e, una volta attivato, esso non può mai essere disattivata nel software,
anche durante la fase di SLEEP.
Nella famiglia PIC18, il timer di Watchdog può essere disabilitato nei bit di
configurazione ma comunque essere attivato dal software. Questo ha uno
svantaggio: può essere disabilitato accidentalmente, ma consente al
dispositivo di essere mandato in SLEEP senza il timer di Watchdog come causa
di risveglio.
Il timer Watchdog è implementato con un oscillatore RC
interno molto semplice.
Il periodo di timeout può variare notevolmente da dispositivo a dispositivo e
con tensione e temperatura. L'utente deve sempre tenere a mente questi limiti.
Collegato al WDT c'è un postscaler che può essere utilizzato per generare il
timeout in periodi anche molto lunghi.
In alcuni processori, questo postscaler è in comune con il Timer0 e può
essere assegnato solo all' uno o all' altro modulo. Nei PIC18 e negli Enhanced
Midrange, invece, il WDT e
il Timer0 hanno scaler propri.
Il circuito di timer Watchdog consuma corrente, se abilitato,
il che dovrebbe essere preso in considerazione durante la progettazione per
applicazioni a bassa potenza.
Gli effetti del WDT Reset sono diversi a seconda dei processori.
-
Per il core a 12 bit core e i modelli standard a 16 bit, WDT
resetta le parti in funzione.
-
Per il core a 14 bit e gli enahanced a 16 bit, WDT resetta
le parti in funzione ed è possibile casua di Wake-up dalla condizione di
SLEEP.
In generale:
-
avvia l' esecuzione del programma dalla istruzione contenuta
nella locazione che corrisponde al vettore di RESET
-
sono inizializzati alcuni SFR
-
Il contenuto della RAM non è
modificato
il flag POR ,
BOR e PD non sono modificati
TO è azzerato
Dopo il Reset da WDT, il programma è costretto a ripartire dal vettore di
Reset.
Il contenuto della RAM non viene modificato e conserva i dati precedenti
all' evento.
Se ilo dispositivo è in condizione di SLEEP, il reset da WDT fa riprendere
l' esecuzione del programma con l' istruzione successiva a quella di SLEEP
(esclusi i core a 12 bit).
Se si sta usando un clock a cristallo, il timer di startup dell' oscillatore
determina un ritardo necessario alla stabilizzazione dello stesso.
Anche in questo caso, la situazione dei flag permette di identificare la
causa del Reset e prendere gli opportuni provvedimenti
- Durante la fase di debug è opportuno escludere la funzione del WDT
onde evitare problemi di esecuzione, in quanto l' azione del timer di
WatchDog non è normalmente gestibile dal tool di debug.
- Abilitando WDT dalla configurazione, occorre
obbligatoriamente disporre nel programma del periodico azzeramento
del timer.
|
|