Termometro senza sonda con PIC

Questo articolo mostra un metodo per utilizzare il WDT (Watch Dog Timer) interno di un microcontrollore PIC per misurare la temperatura ambiente senza utilizzare nessuna sonda esterna.

Per mostrare questa particolare tecnica di misura, si farà uso del PICkit 2 di Microchip (vedi figura 1) che comprende una scheda demo con un microcontrollore a 44 pin PIC16F887, il programmatore PICkit 2 con relativo cavo USB e 2 CDROM con software e manuali vari. La temperatura misurata viene visualizzata sugli 8 LED presenti nel circuito (figura 2), basta toccare il corpo dell’integrato per vedere la barra alzarsi oppure soffiarci sopra per vederla abbassarsi, come mostrato in figura 3 e in figura 4. Per fare questa misura viene sfruttato il WDT interno dell’integrato, un dispositivo presente in tutti i microcontrollori PIC.

Figura 1: ecco tutto il materiale contenuto nel kit DV164121 vicino ad un netbook, PC ideale per questo tipo di applicazioni che sfruttano la porta USB per la programmazione.

Figura 1: ecco tutto il materiale contenuto nel kit DV164121 vicino ad un netbook, PC ideale per questo tipo di applicazioni che sfruttano la porta USB per la programmazione.

Principio di funzionamento

All’interno dei microcontrollori PIC è presente un dispositivo chiamato WDT Watch Dog Timer il cui compito, se abilitato, è quello di resettare il microcontrollore nel caso di blocco del programma. È una funzione a cui non siamo abituati: di solito quando un dispositivo si blocca, ad esempio un computer, dobiamo resettarlo a mano. Microchip ha pensato di mettere all’interno dei suoi micro un circuito che è in grado di “sentire” se la CPU è bloccata e di avviare la procedura di reset dopo un periodo prestabilito. Questo periodo e la funzione WDT stessa possono essere impostati da chi programma il firmware.

Figura 2: il programmatore USB PICkit 2 e basetta demo con PIC a 44 pin utilizzati per la prova. Notare il pulsante che in questa applicazione serve per resettare le misure di temperatura.

Figura 2: il programmatore USB PICkit 2 e basetta demo con PIC a 44 pin utilizzati per la prova. Notare il pulsante che in questa applicazione serve per resettare le misure di temperatura.

Il Watch Dog Timer

Si tratta di un dispositivo implementato in hardware, esterno alla CPU. Se fosse realizzato via software si bloccherebbe anche lui assieme al programma di cui ne controlla il regolare funzionamento e non sarebbe di nessuna utilità. Non è altro che un contatore che al raggiungimento di un determinato valore resetta il micro. Nel programma che la CPU esegue ci deve essere però, a intervalli regolari, una particolare istruzione (CLEARWDT) che fa ripartire da zero il contatore. Se non ci fosse questo azzeramento del WDT il micro si riavvierebbe a intervalli regolari ogni pochi secondi. Di default il WDT è disabilitato proprio per semplificare la creazione dei programmi. Nel caso in cui il programma in memoria del micro si bloccasse non ci sarebbero più chiamate CLEARWDT e il contatore WDT proseguirebbe nel suo conteggio fino ad arrivare al suo limite e quindi al reset di tutto il processore. È evidente che questo sistema permette di evitare il blocco di qualsiasi microcontrollore ma chi programma deve implementare il firmare con chiamate CLEARWDT altrimenti il sistema non funzionerebbe. In pratica, una volta abilitato il WDT, il software deve “tenerlo a bada” a intervalli regolari altrimenti, terminata la sua corsa, viene resettato il micro.

Figura 3: toccando con un dito il corpo del microcontrollore è possibile aumentare la sua temperatura e di conseguenza la visualizzazione nei LED.

Figura 3: toccando con un dito il corpo del microcontrollore è possibile aumentare la sua temperatura e di conseguenza la visualizzazione nei LED.

Watch Dog Timer e temperatura

Verrà  da chiedersi a  questo punto come sia possibile misurare la temperatura ambiente senza nessun sensore. Ebbene prima abbiamo tralasciato di dire che il WDT è influenzato principalmente da due fattori: la tensione di alimentazione e la temperatura in cui si trova a lavorare il micro. Il primo fattore, la tensione, si presuppone sia costante, e quindi ininfluente sul funzionamento del WDT. La velocità di conteggio del WDT invece cambia al variare della temperatura. Questo succede in tutti i circuiti elettronici, e cioè a basse temperature si hanno velocità di funzionamento più alte rispetto alle alte temperature. Sono valori piccoli, ma misurabili con il microcontrollore. Ci troveremo così ad avere un WDT che raggiunge prima il suo conteggio quando fa freddo rispetto a quando si trova a lavorare in un ambiente caldo. In altri termini il WDT lavora lentamente a temperature elevate e invece viaggia più veloce quando fa freddo. Questa relazione tra velocità di funzionamento e temperatura risulta avere, come documentato nelle application notes di Microchip, un andamento abbastanza lineare.

Figura 4: basta togliere il dito dall’integrato per diminuire la sua temperatura.

Figura 4: basta togliere il dito dall’integrato per diminuire la sua temperatura.

La variabile W

Nel programma per misurare la temperatura viene eseguito un ciclo molto lungo e incrementata la variabile W di una unità ad ogni ciclo. All’interno di questo ciclo non è presente nessuna chiamata CLEARWDT per fare in modo che il WDT riavvii la CPU dopo un periodo di circa 140 ms. Al momento del reset la variabile W conterrà il valore massimo raggiunto dal ciclo. Questo valore è proporzionale alla temperatura di funzionamento del processore. Il reset generato dal WDT fa ripartire il micro ma i valori delle variabili non vengono cancellati e quindi, anche dopo il reset, all’interno di W troveremo il valore misurato dal ciclo precedente. È un grosso vantaggio, che semplifica notevolmente il nostro programma.

Figura 5: programma per trasferire il file HEX. Notare il settaggio della tensione a 5V che permette di alimentare la basetta demo direttamente dal programmatore USB.

Figura 5: programma per trasferire il file HEX. Notare il settaggio della tensione a 5V che permette di alimentare la basetta demo direttamente dal programmatore USB.

Programmazione diretta del file Hex

Se non si è  interessati alla  programmazione in PICBasic e si vuole soltanto trasferire il file .HEX del termometro scaricato dal sito di Fare Elettronica è necessario installare il software PICkit 2 Programmer v2.61 che si trova nel CD-ROM allegato al kit (vedi figura 5). È sufficiente andare nel menu file e cliccare su “Import HEX” per trasferire sul PIC16F887 il codice HEX scaricato premendo il pulsante write. Non dimenticare, all’interno di questo programma, di abilitare la voce “VDD PICkit 2” per fare in modo di fornire tensione alla demo board attraverso il programmatore.

Figura 6: il “Logic tool” trasforma il PICkit 2 in un’oscilloscopio a 3 canali. Qui sta misurando in quanto tempo si blocca il WDT.

Figura 6: il “Logic tool” trasforma il PICkit 2 in un’oscilloscopio a 3 canali. Qui sta misurando in quanto tempo si blocca il WDT.

Logic Tool

Sempre all’interno del software PICkit 2 Programmer è presente un menu con svariati tool, come si può evincere dalla figura 6. Uno dei più interessanti è senz’altro il “Logic Tool” che permette di trasformare il programmatore in un piccolo oscilloscopio a 3 canali. Nel programma è stato abilitato uno di questi canali per analizzare quanto tempo impiega il WDT a bloccarsi. Si è abilitato il  canale 1  che  è  collegato alla PORTB.7. Come si vede dalla figura, con una temperatura ambiente di circa 26 °C il tempo è di 141 ms. Appena trasferito il file .HEX nel micro e data tensione non dimenticarsi di premere il pulsante della basetta per resettare le misure e azzerare la scala iniziale. Di default si accendono 2 LED ma basta cambiare una costante nel programma (led CON 2) per modificare tale parametro.

Il programma

Il programma è stato scritto in PICBasic e ruota attorno ad una routine di conteggio che blocca il WDT. Questa routine conserva il valore di conteggio all’interno di una variabile W. La variabile ha un valore che è proporzionale alla temperatura e vine visualizzato attraverso la barra a LED. Ci sono alcune accortezze nella programmazione a cui bisogna fare attenzione quando si utilizza la demo oard a 44 pin. La prima è quella di attivare l’oscillatore interno del PIC16F887 perché non è presente nessun quarzo sulla basetta e questo lo si fa al momento della definizione del tipo di micro con il comando

INTRC_OSC_NOCLKOUT.

La seconda è quella di disabilitare i convertitori analogico/digitali della PORTB con il comando

ANSELH=%00000000

che sono attivi per default e che impediscono al pulsante collegato alla PORTB.0 di funzionare.

La terza è che se si abilita il WDT bisogna informare il compilatore con il comando

DEFINE NO_CLRWDT 1

di non inserire automaticamente l’istruzione CLEARWDT all’interno del programma altrimenti non si riuscirebbe mai a far resettare il micro con una routine molto lunga come invece abbiamo fatto.

Conclusioni

Questa semplice applicazione mostra come a volte è possibile ricorrere al software per sopperire alle lacune dell’hardware. In questo caso siamo riusciti a misurare la temperatura ambiente senza utilizare nessun tipo di sensore hardware esterno. Si è visto anche che alcuni strumenti messi a disposizione dei microcontrollori, come il WDT, possono essere utilizzati anche per scopi diversi da quelli per cui sono stati progettati. È importatnte capirne il funzionamento, le loro applicazioni poi dipendono solo dalla fantasia di chi progetta il firmware.

 

2 Commenti

  1. Alessandro Alessandro 4 luglio 2019
  2. Alessandro Alessandro 15 luglio 2019

Scrivi un commento