Caricare documenti e articoli online 
INFtub.com è un sito progettato per cercare i documenti in vari tipi di file e il caricamento di articoli online.


Meneame
 
Non ricordi la password?  ››  Iscriviti gratis
 

OGGETTO: RILIEVO DELLA CARATTERISTICA DI CONVERSIONE A/D DI UN PIC - LABORATORIO DI SISTEMI

fisica


Inviare l'articolo a Facebook Inviala documento ad un amico Appunto e analisi gratis - tweeter Scheda libro l'a WhatsApp - corso di

LABORATORIO DI SISTEMI




OGGETTO:   RILIEVO DELLA CARATTERISTICA DI CONVERSIONE A/D DI UN PIC





SCHEMA





FIGURA 1
















DATI:

R= 10kΩ

Rd

C = 22pf



STRUMENTI UTILIZZATI                           COMPONENTI UTILIZZATI


1)   &nb 656i85g sp; Alimentatore;

2)   &nb 656i85g sp; Alimentatore variabile;              1) PIC 16f876;

3)   &nb 656i85g sp; Programmatore per PIC;

4)   &nb 656i85g sp; PC;



1)   &nb 656i85g sp;   &nb 656i85g sp;  Una resistenza da 10kΩ;

2)   &nb 656i85g sp;   &nb 656i85g sp;  Otto resistenze da 330Ω;

3)   &nb 656i85g sp;   &nb 656i85g sp;  Due condensatori da 22pF;

4)   &nb 656i85g sp;   &nb 656i85g sp;  Un oscillatore al quarzo a 4MHz;

5)   &nb 656i85g sp;   &nb 656i85g sp;  Otto diodi LED;

6)   &nb 656i85g sp;   &nb 656i85g sp;  PIC16f876;


ALGORITMO


DATI RILEVATI


Segnale di ingresso [Volt]

Numero in binario

Numero in esadecimale

Numero in decimale



































C3




FF




GRAFICO DEI DATI RILEVATI



SORGENTE PROGRAMMA


#include <p16f876.inc>



; Parola di configurazione:

__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _BODEN_ON & _LVP_ON & _CPD_OFF & _WRT_ENABLE_OFF & _DEBUG_OFF & _CP_OFF



; Inizio programma


Start ; etichetta di riferimento: inizio del programma


; accedendo al banco 1

BCF STATUS,RP1 ; poni a 0 il bit RP1, contenuto nel registro di stato

BSF STATUS, RP0 ; poni a 1 il bit RP0, contenuto nel registro di stato



; imposto le caratteristiche della conversione attraverso il registro ADCON1

MOVLW 0X0E ; carica nel registro W il valore esadecimale 0E

MOVWF ADCON1 ; copia il valore contenuto in W nella locazione di memoria ; di indirizzo corrispondente all'etichetta "ADCON1"



; imposto il pin di peso 0 di PORTA in input

MOVLW 0X01 ; carica nel registro W il valore esadecimale 01

MOVWF PORTA ; copia il valore contenuto in W nella locazione di memoria ; di indirizzo corrispondente all'etichetta "PORTA", cioè

; nel  registro TRIS A



; imposto PORTB in output

MOVLW 0X00 ; carica nel registro W il valore esadecimale 00

MOVWF PORTB ; copia il valore contenuto in W nella locazione di memoria ; di indirizzo corrispondente all'etichetta "PORTB", cioè

; nel  registro TRIS B



; accedendo al banco 0

BCF STATUS, RP0 ; poni a 0 il bit RP0, contenuto nel registro di stato




; imposto le caratteristiche della conversione attraverso il registro ADCON0

MOVLW 0XC1 ; carica nel registro W il valore esadecimale C1

MOVWF ADCON0 ; copia il valore contenuto in W nella locazione di memoria

; di indirizzo corrispondente all'etichetta "ADCON1"




Inizio_conversione ; etichetta di riferimento


BSF ADCON0, 2       ; poni a 1 il bit di peso 2 del registro ADCON0 in modo

; da avviare la conversione


Attesa_fine_conversione    ; etichetta di riferimento

BTFSC  ADCON0, ; verifica se il bit di peso 2 del registro ADCON0 è a

; livello basso, cioè se la conversione è terminata


; istruzione che deve essere eseguita se la condizione dell'istruzione precedente

; non è verificata


GOTO Attesa_fine_conversione         ; ritorna all'etichetta di riferimento

; "Attesa_fine_conversione"




; istruzione che deve essere eseguita se la condizione dell'istruzione di test è verificata


MOVF ADRESH, W  ; copia il contenuto del registro ADRESH nel registro W


MOVWF PORTB ; copia il contenuto del registro accumulatore nella locazione

; di memoria di indirizzo corrispondente all'etichetta "PORTB":

; il dato viene posto in uscita sulla PORT B


GOTO Inizio_conversione ; ripeti le istruzioni presenti dopo l'etichetta di

; riferimento "Inizio_conversione"



END ; fine del programma
RELAZIONE


L'esperienza effettuata in laboratorio si è articolata in tre fasi: 

1)   &nb 656i85g sp;  la prima fase consisteva nel realizzare l'algoritmo ed il relativo codice, scritto nel linguaggio compreso dai PIC, di un software che convertisse una tensione analogica di ingresso in un dato digitale da rappresentare in uscita attraverso dei led;

2)   &nb 656i85g sp;  la seconda fase consisteva nel programmare il PIC utilizzato attraverso il programmatore e nel progettare la parte hardware in modo tale da funzionare al meglio (scegliere componenti da utilizzare, ecc.), e realizzarlo in pratica;

3)   &nb 656i85g sp;  la terza fase consisteva nel testare il circuito realizzato in precedenza, verificarne il corretto funzionamento e rilevare le coppie di valori composte dalla tensione di ingresso ed il dato digitale di uscita, rilevato attraverso i led, per poi rappresentarle su un grafico.



·   &nb 656i85g sp;    CENNI TEORICI SUI CONVERTITORE ANALOGICO/DIGITALE

I convertitori analogici/digitali sono dei circuiti elettronici in grado di convertire una grandezza continua, ad esempio una tensione, in una serie di valori discreti.

Caratteristica fondamentale di un convertitore A/D è la risoluzione. Essa sta ad indicare il numero di valori discreti che il convertitore può produrre. È espressa generalmente in bit ma può essere espressa elettricamente in volt; in quest'ultimo caso è pari alla minima differenza di potenziale tra due segnali che vengono codificati con due valori discreti adiacenti.

Per calcolarla basta effettuare il rapporto tra il range di valori assunti dal segnale continuo ed il numero dei livelli di quantizzazione, cioè il numero massimo di valori discreti che si può avere a seconda del numero di bit che andranno a comporre il numero frutto della conversione.



Per convertire un segnale analogico continuo in una serie di valori discreti è necessario definire una frequenza alla quale si intende campionare i valori discreti del segnale analogico. Questa frequenza è chiamata sampling rate. Tuttavia, poiché nella pratica un convertitore A/D non è in grado di convertire il valore del segnale di ingresso in maniera istantanea, è necessario che il segnale che si intende convertire rimanga costante per il periodo di tempo in cui il convertitore esegue la conversione. La funzione di mantenere costante il segnale di ingresso è svolta da un circuito che è chiamato sample/hold, in particolare un condensatore si carica memorizzando la tensione del segnale di ingresso e, una volta caricato, viene disconnesso dall'ingresso per mezzo di un interruttore elettronico.


IL FENOMENO DELL'ALIASING

Il fenomeno dell'aliasing è quel fenomeno per il quale un segnale analogico può diventare non riconoscibile una volta campionato in quanto la campionatura avviene ad intervalli discreti di tempo facendo si che non si possano conoscere i valori assunti dall'ingresso tra due istanti di campionamento adiacenti. Tutto ciò costituisce un serio problema che si riflette direttamente sull'uscita del sistema in esame, alterandone la veridicità.

Per eliminare questo fenomeno è necessario filtrare l'ingresso del convertitore A/D in modo da eliminare le frequenze superiori alla frequenza di campionamento.



·   &nb 656i85g sp;    IL CONVERTITORE ANALOGICO/DIGITALE DEL PIC

Il PIC16f876 contiene un modulo convertitore Analogico/Digitale a 10 bit con 5 canali di ingresso ciascuno dei quali può essere selezionato attraverso un software. Ciò significa che il convertitore può ricevere un solo segnale di ingresso di tipo analogico alla volta, restituendo un numero digitale a 10 bit. I registri particolari usati nella conversione A/D nel PIC sono diversi:

a)   &nb 656i85g sp;  il registro ADCON0, presente nel banco 0 all'indirizzo 1F

b)   &nb 656i85g sp;  il registro ADCON1, presente nel banco 1 all'indirizzo 9F

Entrambi questi registri sono utilizzati per impostare le caratteristiche della conversione, quindi, prima di avviare una conversione, è necessario impostare tutti i parametri della conversione attraverso questi registri.

Il risultato della conversione, cioè il dato analogico espresso in digitale, essendo composto da 10 bit, viene memorizzato in due registri da 8 bit: il registro ADRESH ed il registro ADRESL. Utilizzando due registri ad 8 bit, o i 6 bit più significativi del registro ADRESH o i 6 bit meno significativi del registro ADRESL non vengono utilizzati; vengono per questo posti a 0.


§   &nb 656i85g sp;    Il Registro di ADCON0

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

ADCS1

ADCS0

CHS2

CHS1

CHS0

GO/DONE


A/D ON



FUNZIONE DI OGNI SINGOLO BIT


Ø   &nb 656i85g sp;   &nb 656i85g sp;   &nb 656i85g sp;   &nb 656i85g sp; I bit ADSC1 e ADSC0

I bit di peso sette e di peso sei del registro ADCON0 sono utilizzati per determinare la frequenza di clock utilizzata dal convertitore.


ADCS1

ADCS0




Frequenza_oscillazione/2



Frequenza_oscillazione/8



Frequenza_oscillazione/32



Frequenza di clock derivata da un oscillatore RC interno al convertitore




Ø   &nb 656i85g sp;   &nb 656i85g sp;   &nb 656i85g sp;   &nb 656i85g sp; I bit CHS2, CHS1 e CHS0

I bit di peso cinque, di peso quattro e di peso tre del registro ADCON0 sono utilizzati per scegliere il canale analogico al quale è applicato il segnale da convertire in digitale.


CHS2

CHS1

CHS0

CANALE CORRISPONDENTE




RA0




RA1




RA2




RA3




RA5






Ø   &nb 656i85g sp;   &nb 656i85g sp;   &nb 656i85g sp;   &nb 656i85g sp; Il bit GO/DONE

I bit di peso due è utilizzato per determinare lo stato della conversione:

a)   è uguale a 1 quando si avvia la conversione e per tutta la sua durata;

b)   è uguale a 0 quando non si sta effettuando alcuna conversione. Il bit è posto a 0 automaticamente quando la conversione termina.



Ø   &nb 656i85g sp;   &nb 656i85g sp;   &nb 656i85g sp;   &nb 656i85g sp; Il bit A/D ON



I bit di peso zero è utilizzato per determinare lo stato del convertitore:

a)   è uguale a 1 quando il convertitore è attivo;

b)   è uguale a 0 quando il convertitore non è attivo.



§   &nb 656i85g sp;    Il Registro di ADCON1

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

ADFM




PCFG3

PCFG2

PCFG1

PCFG0



FUN


FUNZIONE DI OGNI SINGOLO BIT


Ø   &nb 656i85g sp;   &nb 656i85g sp;   &nb 656i85g sp;   &nb 656i85g sp; Il bit ADFM

Il bit di peso sette del registro ADCON1 è utilizzato per definire la giustifica a destra o a sinistra del dato digitale ricavato dalla conversione. È necessario definire la giustifica in quanto, come già detto in precedenza, il valore digitale ricavato (10 bit) viene memorizzato in due locazioni di memoria da 8 bit.


ADFM

TIPO DI GIUSTIFICA


Giustifica a sinistra: i 6 bit meno significativi del registro ADRESL vengono posti a 0


Giustifica a destra: i 6 bit più significativi del registro ADRESH

vengono posti a 0



Ø   &nb 656i85g sp;   &nb 656i85g sp;   &nb 656i85g sp;   &nb 656i85g sp; I bit PCFG3, PCFG2, PCFG1 e PCFG0

I bit di peso tre, di peso due, di peso uno e di peso zero del registro ADCON1 sono utilizzati per definire se le linee della PORTA sono impiegate come ingressi digitali o analogici e per definire la sorgente della tensione di riferimento.






IMPIEGO DEGLI INGRESSI DELLA PORTA



PGF3

PGF2

PGF1

PGF0

RA5

RA3

RA2

RA1

RA0

Vref+

Vref-





analogico

analogico

analogico

analogico

analogico

Vdd

Vss





analogico

analogico

analogico

Vref+

analogico

RA1

Vss





digitale

analogico

digitale

analogico

analogico

Vdd

Vss





digitale

Vref+

digitale

analogico

analogico

RA3

Vss






X

digitale

digitale

digitale

digitale

digitale

Vdd

Vss





analogico

Vref+

Vref-

analogico

analogico

RA3

RA2





digitale

Vref+

Vref-

analogico

analogico

RA3

RA2





digitale

digitale

digitale

digitale

analogico

Vdd

Vss





digitale

Vref+

Vref-

digitale

analogico

RA3

RA2


·   &nb 656i85g sp;    FASE 1:

Per realizzare il codice sorgente di un programma che convertisse una tensione analogica di ingresso in un dato digitale da rappresentare in uscita attraverso dei led da caricare su un PIC16F876, si è prima passati alla progettazione su carta di un algoritmo (vedi 'ALGORITMO' foglio2).

Una volta progettato l'algoritmo si è passati alla stesura del codice scritto utilizzando il set di istruzioni messe a disposizione dal PIC (vedi 'PROGRAMMA'  foglio3-foglio4)..


ANALISI DELLE ISTRUZIONI UTILIZZATE

Il PIC16F876 è dotato di un set di 35 istruzioni di base che si dividono in tre gruppi:

a)   &nb 656i85g sp;   &nb 656i85g sp;    Byte - oriented: cioè quelle istruzioni che agiscono su un registro di 8 bit e tutte le operazioni effettuate vanno a modificare il contenuto del registro stesso;

b)   &nb 656i85g sp;   &nb 656i85g sp;    Bit - oriented: cioè quelle istruzioni che agiscono su un singolo bit di un registro;

c)   &nb 656i85g sp;   &nb 656i85g sp;    Literal and control: cioè quel gruppo di istruzioni che agiscono su una costante ad 8 bit la quale va a modificare un registro in base all'operazione che si effettua.

Questi gruppi di istruzioni possono avere una serie di parametri che, nella loro sintassi, devono essere utilizzati; i parametri sono identificati da:

a)   &nb 656i85g sp;   &nb 656i85g sp;    f: sta a rappresentare una locazione di memoria;

b)   &nb 656i85g sp;   &nb 656i85g sp;    d: sta a rappresentare la destinazione dell'istruzione;

c)   &nb 656i85g sp;   &nb 656i85g sp;    b: sta a rappresentare il peso del bit su cui deve essere eseguita l'operazione;

d)   &nb 656i85g sp;   &nb 656i85g sp;    k: sta a rappresentare una costante ad 8 bit o un'etichetta; questo parametro può essere utilizzato solo con istruzioni del gruppo Literal and control;


  • ISTRUZIONE "BCF" : "Bit Clear F"

Sintassi: BCF f, b

Descrizione Questa istruzione azzera il bit b del registro presente all'indirizzo f  senza modificare nessun bit del registro di stato.


  • ISTRUZIONE "BSF" : "Bit Set F"

Sintassi: BSF f, b

Descrizione Questa istruzione pone a livello logico alto il bit b del registro presente all'indirizzo f  senza modificare nessun bit del registro di stato.


  • ISTRUZIONE "MOVLW" : "MOVe Literal to W"

Sintassi: MOVLW k

Descrizione Questa istruzione carica nel registro accumulatore il valore costante k senza modificare nessun bit del registro di stato.


  • ISTRUZIONE "MOVF" : "MOVe F"

Sintassi: MOVF f, d

Descrizione Questa istruzione copia il contenuto della locazione di memoria corrispondente all'etichetta f nella locazione di memoria corrispondente all'etichetta d, che può essere anche il registro w o la stessa locazione di memoria del dato da copiare. Questa istruzione va a modificare il bit dello Zero del registro di stato.


  • ISTRUZIONE "MOVWF" : "MOVe W to F"

Sintassi: MOVWF f

Descrizione Questa istruzione copia il contenuto del registro accumulatore nella locazione di memoria corrispondente all'etichetta f, senza modificare nessun bit del registro di stato.



  • ISTRUZIONE "GOTO": "GO TO address"

Sintassi: goto k

Descrizione: Questa è un'istruzione di salto assoluto. Essa determina un salto del programma in esecuzione all'indirizzo k che può essere specificato utilizzando direttamente il valore numerico dell'indirizzo oppure la relativa etichetta.

L'istruzione non modifica nessun bit del registro di stato.


  • ISTRUZIONE "BTFSC": "Bit Test F, Skip if Creal"

Sintassi: BTFSC f, b

; istruzione no

; istruzione si

Descrizione: Questa è un'istruzione utilizzata per implementare le scelte binarie. Va a controllare se il bit di peso b del registro f è zero: in tal caso verrà eseguita l'istruzione si, saltando l'istruzione no; in caso contrario verrà eseguita l'istruzione no  e tutte le istruzioni poste di seguito (l'istruzione si compresa).

L'istruzione non va a modificare nessun bit del registro di stato


Finita la fase di stesura del codice si è passati alla sua compilazione per ottenere il file ".hex" da poter caricare, attraverso il programmatore, sul PIC. La compilazione è avvenuta tramite il software linux Piklab, attraverso il quale, con un tool integrato, è stato possibile definire la "parola di configurazione" del PIC, impostando di fatto tutte le caratteristiche del dispositivo utilizzato: tipo di oscillatore, attivazione del WDT, ecc.;


·   &nb 656i85g sp;    FASE 2:

Una volta ottenuto il file ".hex", sempre con l'ausilio di Piklab, si è stati in grado di programmare il PIC. Per fare ciò si è utilizzato il programmatore del PIC collegato al PC attraverso la porta seriale.

Ultimata la progettazione e la realizzazione del software si è passati alla progettazione della parte hardware. Effettuando l'analisi del problema è risultato necessario utilizzare:

1)   &nb 656i85g sp;  un cristallo al quarzo che svolgesse nel migliore dei modi la funzione di clock per il PIC;

2)   &nb 656i85g sp;  due condensatori da porre in parallelo al cristallo secondo lo schema elettrico fornito dai produttori del dispositivo stesso;

3)   &nb 656i85g sp;  una resistenza da 10kΩ da inserire in serie tra la tensione di alimentazione ed il pin 1 del PIC;

4)   &nb 656i85g sp;  otto resistenze da 330Ω da inserire prima di ciascun led in modo da limitare la corrente nei dispositivi stessi che altrimenti potrebbero bruciarsi e comportarsi come un corto circuito.

Terminata la fase di analisi si è quindi stati in grado di passare alla fase di realizzazione pratica del circuito di FIGURA1 (vedi foglio1) su una breadboard.


·   &nb 656i85g sp;    FASE 3:

Terminate le fasi di progettazione e realizzazione, sia software che hardware, si è passati a verificare la corretta funzionalità del circuito e del software realizzati. Per fare ciò si è alimentato il PIC con una tensione pari a 5V. In seguito si è collegato un alimentatore variabile al pin impostato come ingresso analogico (Ra ) in modo da fornire un segnale analogico che variasse nel tempo. Finite le operazioni di collegamento si è fornito al pin impostato come ingresso analogico dieci valori di tensione analogica, riportati in una tabella insieme al corrispondente valore digitale, frutto della conversione, rappresentato in forma binaria attraverso i led (vedi "DATI RILEVATI" in foglio3). Riportati le coppie di valori tensione-dato_digitale su una tabella si è stati in grado di riportare le stesse su di un grafico (vedi "GRAFICO DEI DATI RILEVATI" in foglio3). Congiungendo i punti ottenuti si è ricavata una curva; da un'analisi di quest'ultima emerge che la curva è una retta dimostrando la proporzionalità tra la tensione analogica ed il rispettivo dato digitale







Privacy




Articolo informazione


Hits: 1647
Apprezzato: scheda appunto

Commentare questo articolo:

Non sei registrato
Devi essere registrato per commentare

ISCRIVITI

E 'stato utile?



Copiare il codice

nella pagina web del tuo sito.


Copyright InfTub.com 2022