PICmicro cult – Il Watch Dog Timer

PICmicro cult - Il Watch Dog Timer

Il Watch Dog Timer

In questa lezione analizzeremo il funzionamento del Watch Dog Timer il cui scopo è quello di migliorare l’affidabilità dei nostri circuiti basati su PICmicro.

Il Watch Dog Timer è in pratica un oscillatore interno al PICmicro, ma completamente indipendente dal resto della circuiteria, il cui scopo è quello di rilevare eventuali blocchi della CPU del micro e resettare il PICmicro per riprendere la normale esecuzione del programma.

Per poter rilevare un eventuale blocco della CPU durante l’esecuzione del programma principale, viene inserita all’interno di questo, una istruzione speciale, la:

CLRWDT (CLeaR Watch Dog Timer)

la quale azzera ad intervalli regolari il Watch Dog Timer non consentendogli di terminare il suo conteggio. Se la CPU non effettua questa istruzione prima del termine del conteggio allora si assume che il programma si è bloccato per qualche motivo e si effettua il Reset della CPU.

Il periodo minimo raggiunto il quale la CPU viene resettata è di circa 18ms (dipende dalla temperatura e dalla tensione di alimentazione). È possibile pero assegnare il PRESCALER al Watch Dog Timer per ottenere ritardi più lunghi fino a 2.3 secondi.

Per abilitare il Watch Dog Timer occorre abilitare in fase di programmazione il flag WDTE della word di configurazione. La modalità di attivazione di questo flag dipende dal programmatore in uso.

Assegnazione del PRESCALER al WDT

Agendo sul bit PSA del registro OPTION_REG è possibile assegnare il prescaler al Watch Dog Timer per ottenere dei tempi di ritardo di intervento maggiori. Il bit PSA va settato ad uno con l’istruzione:

BSF OPTION_REG,PSA

In caso contrario il prescaler verrà assegnato al TIMER 0. Ovviamente assegnado il prescaler al WDT non sarà possibile assegnarlo completamente al TIMER 0 e viceversa.

Intervenendo sui valori dei bit PS0, PS1 e PS2 dello stesso registro OPTION_REG potremmo ottenere diversi intervalli di ritardo. La scelta corretta dovrà essere fatta tenendo conto del massimo ritardo che riusciamo ad ottenere all’interno del nostro programma tra l’esecuzione di due istruzioni CLRWDT successive.

Nella tabella seguente è riportato la corrispondenza tra i valori di questi bit e gli intervalli che otterremo.

Esempio pratico di uso del Watch Dog Timer

Vediamo ora, come sempre, un esempio pratico di utilizzo del Watch Dog Timer. Useremo lo stesso schema usato nell’esempio predente e riportato nel file example4.pdf, il source è riportato nel file WDT.ASM.

In pratica questo esempio non differisce molto dall’esempio già usato per il Power Down Mode.
In pratica appena il programma entrerà in esecuzione vedremo il LED 1 lampeggiare. Durante il lampeggio viene eseguita continuamente l’istruzione CLRWDT per evitare che la CPU venga resettata (a tale proposito bisogna ricordarsi di programmare il PICmicro con l’opzione WDTE abilitata).

Non appena premiamo il tasto SW2 la CPU entra in un loop infinito (StopLoop) senza eseguire la CLRWDT.

Trascorsi circa 2.3 secondi, il Watch Dog Timer effettua il reset della CPU ed il led comincia nuovamente a lampeggiare.

Proviamo ora a riprogrammare il PIC16F84A con lo stesso programma ma senza abilitare il WDTE con il nostro programmatore.

Noterete che premendo il tasto SW2 il lampeggio si blocca e non si sblocca più.

STAMPA     Tags:, ,

Leave a Reply