ELEMANIA
PIC16F690 - Watch-Dog Timer
Watch-Dog Timer (WDT)

Il Watch-Dog è un timer comandato sempre dall'oscillatore RC secondario LFINTOSC da 31 kHz
interno al PIC (indipendentemente da quale sia l'oscillatore selezionato come clock del PIC).

Il Watch-Dog Timer (WDT) ha associato un tempo di default pari a circa 16 ms (tale tempo varia leggermente a seconda della temperatura e della tensione di alimentazione) terminato il quale effettua il reset del microcontrollore (oppure, se in modo sleep, lo risveglia). Tale tempo può essere allungato (o abbreviato) agendo sui prescaler (vedi oltre).

In sostanza lo scopo del Watch-Dog è quello di attendere il periodo di tempo selezionato  e poi avviare automaticamente il reset del microcontrollore (nel caso il PIC sia in modalità Sleep viene semplicemente risvegliato continuando l'esecuzione del programma).

L'unico modo per prevenire il reset del PIC è quello di resettare il Watch-Dog, cioè quello di riazzerare il suo conto alla rovescia tramite l'esecuzione dell'istruzione CLRWDT.

Il Watch-Dog è 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 finisce in qualche loop indesiderato dal quale non può più uscire, il Watch-Dog i provvederà (dopo il tempo di time-out) al reset.

Il Watch-Dog Timer può essere abilitato o disabilitato del tutto in fase di programmazione agendo sui registri CONFIG e WDTCON.

 

Prescaler

Il WDT ha due prescaler mediante i quali è possibile allungare il tempo del timer:

Il Prescaler a 8 bit è condiviso con Timer0 e il suo funzionamento è regolato dai bit di OPTION_REG secondo lo schema seguente:

  1. PSA assegna il prescaler al Timer0 (1) oppure al Watchdog timer (0);

  2. PS2,PS1, PS0 selezionano il rapporto di divisione del prescaler.
 PS(2:0) (Prescaler rate Select)
 PS2 PS1 PS0    Prescaler
  0   0   0     1:1
  0   0   1     1:2
  0   1   0     1:4
  0   1   1     1:8
  1   0   0     1:16
  1   0   1     1:32
  1   1   0     1:64
  1   1   1     1:128

Il prescaler a 16 bit dipende invece dal registro WDTCON secondo lo schema seguente:

 WDTPS(3:0) (Prescaler rate Select)
 WDTPS3 WDTPS2 WDTPS2 WDTPS2  Prescaler
  0      0      0       0     1:32
  0      0      0       1     1:64
  0      0      1       0     1:128
  0      0      1       1     1:256
  0      1      0       0     1:512 (reset value)
  0      1      0       1     1:1024
  0      1      1       0     1:2048
  0      1      1       1     1:4096  
  1      0      0       0     1:8192
  1      0      0       1     1:16384
  1      0      1       0     1:32768
  1      0      1       1     1:65536
  1      1      0       0     reserved
  1      1      0       1     reserved
  1      1      1       0     reserved
  1      1      1       1     reserved

Facendo un semplice esempio pratico usando solo il prescaler a 16 bit possiamo variare il periodo base da 1/31k * 32 ≈ 1 ms (essendo 31 kHz il periodo del clock) fino a un massimo di 1/31k * 65536 ≈ 2,1 s. Aggiungendo anche il prescaler a 8 bit tale tempo può essere ulteriormente allungato fino a un massimo di 2,1 * 128 ≈ 270 secondi.

 

Abiltazione e disabilitazione

Il funzionamento del WDT può essere abilitato preliminarmente settando a 1 il bit WDTE della Configuration Word. In questo caso il WDT è sempre attivo e non può essere disabilitato via software durante l'esecuzione.

Viceversa, se WDTE = 0, il WDT può essere abilitato o disabilitato runtime agendo sul bit SWDTEN del registro WDTCON visto in precedenza (se SWDTEN=1 il WDT è abilitato, mentre se SWDTEN=0 il WDT è disabilitato).

 

precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it