Home
Accesso / Registrazione
 di 

Visualizzare una temperatura mediante conversione A/D su display a due righe con PIC MICRO

Come visualizzare una temperatura mediante conversione A/D su display a due righe con PIC MICRO

In questo articolo cercherò di illustrare in modo esauriente il principio di funzionamento dei convertitori analogico digitali presenti nei microcontrollori della Microchip 16fxxx.

La conversione A/D con PIC micro


I ragionamenti e le illustrazioni trattate nell’articolo potranno essere facilmente estese, per la maggior parte dei micro prodotti da microchip, in quanto l’architettura dei dispositivi risulta pressoché simile.

Il dispositivo trattato nel seguente articolo è il pic16f876, che trova spazio in diverse applicazioni sia in campo hobbistico che in campo professionale.
Si partirà dunque da un’illustrazione teorica sul funzionamento, per poi arrivare alla gestione del convertitore a livello software in linguaggio C e con un esempio pratico di interfacciamento hardware con un comunissimo sensore di temperature LM35z.

Il convertitore A/D del PIC16F876

Il modulo di conversione A/D del pic in questione, fa capo a 5 ingressi analogici sui quali sono interconnesse delle capacità di sample-and-hold, ovvero di campionamento del segnale analogico applicato, le quali a loro volta sono collegate al convertitore interno.

Il convertitore progettato per questo dispositivo è a 10 bit ad approssimazioni successive, ciò significa che il segnale campionato su un ingresso viene poi convertito in digitale mediante una rappresentazione binaria a 10 bit.

Il convertitore ha 4 registri interni ad 8 bit ciascuno che sono:

    ADDRESH: Contiene una parte del risultato dell’operazione di conversione
    ADDRESL: Contiene una parte del risultato dell’operazione di conversione
    ADCON0: Utilizzato per la selezione dei pin analogici e della frequenza di conversione
    ADCON1: Utilizzato per la configurazione dei pin analogici e digitali e per le tensioni di riferimento

IL REGISTRO ADCON0


Questo è un registro fondamentale, che permette di impostare le principali caratteristiche di funzionamento del convertitore attraverso la progettazione del firmware. Come si può notare dalla figura, è un registro ad 8 bit, dove:
• Il 7 ed il 6 selezionano la frequenza di oscillazione del clock del convertitore rispetto alla frequenza di funzionamento del micro
• Da 5 a 3 vi sono i bit che ci permettono di selezionare uno o più, dei 5 ingressi analogici disponibili per la conversione tutti posizionati sulla porta A del dispositivo.
• 2 è un bit di flag. Questo bit serve per controllare lo stato attuale della conversione. In sostanza è un bit di lettura, che assume valore 1 quando la conversione risulta in progress, mentre assume valore 0 quando la conversione è terminata.
• 1 non implementato
• 0 è il bit che permette l’abilitazione o la disabilitazione del convertitore, in modo da poter ottimizzare i consumi quando necessario.

IL REGISTRO ADCON1


La tabella di sopra può risultare di difficile comprensione, ma invece riassume in modo molto semplificato le configurazioni necessarie per l’impostazione dei pin analogici. La descrizione dei bit del registro è la seguente:
• 7 è il bit che permette di selezionare in che modo verrà disposto il risultato della conversione. In sostanza se ADMF viene impostato ad 1 allora il risultato verrà scritto nei primi 8 bit del registro ADRESL e negli ultimi 2 di ADRESH, quindi i rimanenti 6 bit del registro ADRESH verranno posti a 0.
Se invece ADMF viene impostato a 0, allora il risultato verrà scritto nei primi 8 bit di ADRESL e nei primi 2 di ADRESH, mentre gli altri sei bit di ADRESH verranno posti a zero. Tenendo presente che come accennato in precedenza ADRESL ed ADRESH sono registri ciascuno ad 8 bit, la situazione al termine della conversione sarà la seguente:

 

ADRESL

ADRESH

ADMF =  0

xxxxxxxx

xx00000

ADMF = 1

000000xx

xxxxxxxx

Dove con le x vengono indicati i bit relativi alla conversione a 10 bit.
• I bit 6 a 4 non sono implementati
• Da 3 a 0 si trovano invece i bit che permettono di configurare i pin come analogici, ovvero come reali pin di conversione o come pin dedicati ai valori di riferimento.

Ad esempio se volessi impostare tutti gli ingessi della porta A del pic come analogici, basterebbe caricare nel registro ADCON1 la sequenza binaria 0000, come visibile nella prima riga della tabella bianca riportata sopra. In questo modo otterrei che i pin RA5, RA3, RA2, RA1, RA0, sarebbero impostati come ingressi analogici ed in più le tensioni di riferimento sarebbero forzate a VDD.
Caricando invece nel registro ADCON1 la sequenza binaria 1111, come visibile nell’ultima riga della tabella bianca riportata sopra, otterrei RA5 configurato come I/O digitale, RA3 ed RA2 rispettivamente Vref+ e Vref- impostabili esternamente,RA1 I/O digitale , RA0 ingresso analogico mentre RA3 ed RA2 forzati alla tensione VDD e così via.

IL SENSORE DI TEMPERATURA LM35Z

E’ un sensore molto semplice da utilizzare e trova largo spazio in parecchie applicazioni dove è necessario avere una buona linearità in uscita, con un range misurabile che va da -55°C a +155°C.
Offre una precisione di ±1/4 di risoluzione a °C nel range di temperature intorno alla temperatura ambiente e ±3/4 di risoluzione a fondo scala.

Eroga una tensione di uscita pari a 10mV/°C, quindi con 10mV d’uscita ci troveremmo ad una temperatura di 1 grado, mentre con 100mV ci troveremmo ad una temperatura di 10 gradi, fino ad un massimo di 150°C pari a 1,5 Volt.
E’ un sensore low cost, ed ha la seguente configurazione dei pin:

Considerando l’esempio pratico che vedremo prossimamente, dove il nostro pic sarà alimentato a 5 Volt, decidendo di alimentare con la stessa tensione il sensore di temperatura, utilizzando come tensione di riferimento per L’A/D converter 0-5Volt (Caso più semplice), riusciremo a coprire tranquillamente tutto il range di lavoro del sensore, in quanto alla temperatura massima di 150°C, l’uscita del sensore sarà di 1,5 Volt.

A rigor di tecnica, il segnale del sensore dovrebbe essere condizionato, in modo da sfruttare tutta la scala di conversione del convertitore, ovvero bisognerebbe fare in modo di ottenere a 0°C , 0 Volt d’ingresso al convertitore, ed a 150°C 5Volt d’ingresso al convertitore.

Per ragioni di semplicità circuitale ed anche per ragioni legate ad eventuali non linearità che si introdurrebbero con il blocco di condizionamento, per l’applicazione in esame è sufficiente interfacciare direttamente il sensore al microcontrollore per ottenere una risoluzione più che accettabile. L’unico accorgimento da usare, nel caso si debba posizionare il sensore lontano dal microcontrollore mediante un cavo di collegamento esterno al PCB, è quello di inserire come visibile nella figura seguente, una sorta di filtro passa-basso. Questo perché nel caso in cui all’interno del nostro circuito, o nell’ambiente esterno ci fossero sorgenti in commutazione veloce oppure sorgenti radio vicine, allora il cablaggio potrebbe fungere da antenna ricevente, ed il rumore potrebbe sovrapporsi al segnale utile falsando la conversione.

A questo punto non resta che illustrare lo schema elettrico del sistema, per poi nella prossima puntata illustrare le parti salienti del firmware, scritto in linguaggio C mediante il supporto dell’ambiente di sviluppo MikroC.

SCHEMA DEL CIRCUITO DI ESEMPIO

Come si può notare dallo schema, il circuito è molto semplice, ma ciò che risulterà interessante, sarà l’analisi del firmware, che potrà dare spunto per applicazioni più complesse. Questo è infatti uno stralcio di simulazione di un sistema più complesso che prevede il monitoraggio della temperatura di un sistema di riscaldamento con invio dei dati a distanza.

Prevede le impostazioni delle soglie di allarme, un trasduttore piezoelettrico controllato in PWM, per la segnalazione sonora dello stato di temperatura eccessive, ed un display a doppia riga per la visualizzazione della temperatura in tempo reale. Il pic ha la tipica configurazione con oscillatore quarzato esternamente, mentre il sensore (U1) come accennato precedentemente, è direttamente interfacciato al micro.

Il sistema prevede un ingresso di reset , uno di interrupt ed altri due pulsanti general pourpose . Gli ingressi dei pulsanti sono configurati in pull-up con delle resistenze da 10k. Nel prossimo articolo verrà descritto il software, dalla configurazione delle porte, fino alla visualizzazione su display della temperatura convertita.

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 7 utenti e 54 visitatori collegati.

Ultimi Commenti