|
CONVERTITORE AD
PIC16F87X
Il PIC16F877 possiede ben 8 ingressi
analogici di tipo sample and hold con risoluzione di 10 bit.
Abbiamo quattro registri per
interagire con il convertitore:
- ADRESH - Parte alta risultato
della conversione ( es 000000XX )
- ADRESL - Parte bassa risultato
della conversione ( es XXXXXXXX )
- ADCON0 e ADCON1 - Resgistri di
controllo
ADCON0
è diviso come segue:
|
ADCS1 |
ADCS0 |
CHS2 |
CHS1 |
CHS0 |
GO/NDONE |
NA |
ADON |
- ADCS1:ADCS0 selezionano la
frequenza di clock per il convertitore (00=Fosc/2 ; 01=Fosc/8 ; 10=Fosc/32
; 11=Frc(clock from int. A/D RC osc)
- CHS2:CHS0 selezionano il canale AD
(000=RA0;001=RA1;010=RA2;011=RA3;100=RA5;101=RE0;110=RE1;111=RE2)
- GO/DONE avvia la conversione e
visulizza il termine della conversione.Per attivare la conversione ,
poniamo questo bit a 1 (operazione GO);
successivamente testiamo lo stato
di questo bit e attendiamo che diventi uguale a zero (DONE,fine
conversione).
- ADON se posto a 1 il convertitore
è in funzione mentre , se posto a zero il convertitore è spento e quindi
non consuma corrente.
ADCON1
è diviso come segue:
|
ADFM |
na |
na |
na |
PCFG3 |
PCFG2 |
PCFG1 |
PCFG0 |
- ADFM seleziona il
formato del risultato della conversione nei registri ADRESH e ADRESL
|
per ADFM=1 avremo:
|
ADRESH |
ADRESL |
|
000000xx |
xxxxxxxx |
|
per ADFM=0 avremo:
|
ADRESH |
ADRESL |
|
xxxxxxxx |
xx000000 |
|
- PCFG3:PCFG0 configurano le porte come
ingressi AD e il tipo di riferimento di tensione (vedi datasheet 16F87X
per maggiori informazioni).
Esempio: per ADCON1 = 10001110 configureremo
la porta RA0 come input analogico e come Vref+ la Vdd e Vref- la Vss.
Inoltre i 6 bit più significativi dell' ADRESH saranno forzati a zero.
Passi da eseguire per avere una
conversione:
1. Configurare AD (es. poniamo
ADCON1 = 10001110 ).
2. Seleziniamo il canale (es. RA0),
la frequenza di conversione (es. Fosc2), accendiamo il convertitore (ADON)
( es. poniamo ADCON0 = 00000001 ).
3. Avviamo la conversione GO/DONE=1
.
4. Attendiamo il termine della
conversione (la conversione termina quando il fla GO/DONE diventa = 0
).
5. Leggiamo il valore della
conversione dai registri ADRESH e ADRESL .
Per eseguire una nuova lettura
sempre dal canale RA0 ripetere il ciclo dal punto 3.
NB . Assicurarsi di avere configurato il pin
da utilizzare come ingresso analogico anche nel registro TRISx come
input.
Tempo di acquisizione o "A/D Sample Time"
Il tempo totale per acquisire un dato
analogico dipende da due fondamentali tempi come
rappresentato in tabella.
|
T = T1+T2 = tempo totale dell'acquisizione |
|
T1 - acquisition time o tempo necessario a
caricare il condensatore |
T2 - A/D conversion time |
|
start |
|
|
poniamo GO=1 |
|
GO passa 0 |
Il T1 dipende da fattori come la
resistenza di ingresso(generatore) la temperatura ecc.(vedi datasheet)
Il T2 dipende dalla frequenza di clock
ed è uguale al Tad*12+100nS dove Tad è il tempo necessario
ad acquisire un singolo bit e 100nS il
tempo perso per disconettere il condensatore.
Per una frequenza di clock = 10Mhz e
avendo impostato come sorgente di clk per il convertitore la fosc/32
avremo:
Tad=1/(fosc/32)=32/10Mhz=3,2uS da cui
avremo T2=(3,2uS*12)+0,1uS=38,5uS
T2 per una Resistenza interna di:
10K= 20 uS (non superare mai i
10K)
50ohm = 10,5 uS
Avremo quindi che l'acqisizione totale
durerà per una Ri=50ohm , T=49 uS.
|