Spagnolo Inglese
11357 Users    

PICmicro cult - Il Watch Dog Timer

  Download in PDF
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ù.

Commenta!Feed Rss

Invia nuovo commento

Il contenuto di questo campo è privato e non verrà mostrato pubblicamente.
  • Linee e paragrafi vanno a capo automaticamente.

Maggiori informazioni sulle opzioni di formattazione.

Articoli di elettronica correlati

  • Come funziona la macro DELAY usata negli esempi del corso. Nel caso venga effettuato un salto da una istruzione all'altra il PICmicro impiega 2 cicli macchina. Le istruzioni che effettuano salti sono ad esempio la GOTO, la CALL e la RETURN.

  • Il Power Down Mode o Sleep Mode è un particolare stato di funzionamento del PICmicro utilizzato per ridurre il consumo di corrente nei momenti in cui il PICmicro non è utilizzato perché in attesa di un evento esterno.

  • Per configurare la linea RA0 in uscita, dobbiamo mettere a 0 il bit 0 del registro TRISA

  • L'interrupt è una particolare caratteristica dei micro che consente di intercettare un evento esterno, interrompere momentaneamente il programma in corso, eseguire una porzione di programma specializzata per la gestione dell'evento verificatosi e riprendere l'esecuzione del programma principale.

  • Un semplice timer in linguaggio C.Un buon esercizio per un principiante è scrivere un modulo che simuli un timer.
    Per realizzarlo abbiamo usato le funzioni che già esistono nella libreria del linguaggio C:

Commenti recenti

Nuovi utenti

  • swutz
  • saetta
  • EmanuelOpen
  • alexc85
  • tondini73
  • pmac131
  • peppeplus
  • rolfogianluca

Chi è online

Ci sono attualmente 1 utente e 55 visitatori collegati.

Utenti online

  • ORIANO SOLMI