Professional Documents
Culture Documents
Asi Msi 8
Asi Msi 8
MCU
MCU
Măsurarea temperaturii
cu un termistor NTC, a unui
Măsurarea luminozității cu ajutorul unei
divizor rezistiv si a unui repetor.
fotorezistențe si a unui divizor rezistiv.
Un termistor NTC (Negative
O fotorezistență (LDR – Light Dependent
Temperature Coefficient
Resistor) este o rezistență (neliniară) a
thermistor) este o rezistență (neliniară)
cărei valoare scade cu creșterea intensității
a cărei valoare scade cu creșterea
luminii incidente
temperaturii
Sunt 2 exemple foarte simple de senzori rezistivi 2
împreună cu circuitele de adaptare (si ele f. simple-niste divizoare rezistive)
O intrare analogică presupune transformarea unei unei
mărimi fizice analogice intr-una numerică (digitizarea
ei): conversie analog-numerica
Proces/Instalatie/
Zgomot MCU
Mediu
înconjurător electromagnetic
Prelucrare
a0 - este LSb
Rezoluția (analogica)
Avem 8
r = 5/8 = 0.625V
r = Umax / 2n [V]
max
Conversia analog
numerica introduce Uin
întotdeauna o eroare
de cuantificare Avem o infinitate de valori
LSb – Least Significant Bit , cel mai puţin semnificativ bit 4
MSb – Most Significant Bit , cel mai semnificativ bit
Rezoluția (resolution) determina si eroarea de
cuantificare (quantization error)
Rezoluția numerică indică numărul de valori
numerice distincte optenabile in domeniul
Uin
A 0..Umax: n biți, adică 2n valori
biţi
max Rezoluția analogică este exprimată in unități
N ale mărimii de intrare): r = U max /2n [V]
Caracteristici statice de transfer
Pentru un
CAN ideal:
n→∞
r→0
Un CAN are rezoluția adevărată de n biţi doar dacă eroarea numerică este ± 1/2 LSB
5
Exista si alte erori de regim static: liniaritate, decalaj (offset), câștig, ..
Regimul dinamic: cum procedăm in cazul mărimilor variabile
in timp, ce este perioada de eșantionare (sampling period) ?
In « fața » oricărui CAN cu aproximații
Uin (V)
Avem o infinitate de valori
successive se află un circuit de
eșantionare si memorare (Sample/Hold)
care prelevează in mod regulat o valoare
Uin si o menține constantă un interval de
timp Te pană la prelevarea eșantionului
următor (el acționează ca o memorie
analogică).
Te Tensiunea de intrare in CAN
Timpul de conversie al CAN
trebuie să fie inferior lui Te
Comanda circuitului de eşantionare
perioada de eşantionare este Te , frecvenţa de
eşantionare este Fe = 1/Te
Te=1.25 T
Teorema lui SHANNON ( Criteriul lui
Nyquist), ne spune cat de “repede”
trebuie eșantionat semnalul :
Spectrul real al Are loc
semnalului de Fe > 2 * Fmax
« replicarea »
eşantionat spectrului Fmax : frecvența maximă din spectrul
lui Uin
La intrarea CAN (înainte de
F
circuitul de eşantionare
/memorare) este necesar un
filtru trece jos (FTJ) cu frecvenţa 7
de tăiere Fc = Fe/2
Schema principială a unui circuit de eșantionare si memorare
(S/H): se utilizează un capacitor pentru memorarea
semnalului pe durata cat care loc conversia
Repetor (opamp)
Repetor (opamp) Comutator / cheie
de tensiune
Vo
C
Semnal Vc
Vi de ceas
Capacitor
de memorare
8
Principiul de funcționare al unui circuit de
eșantionare si memorare (S/H)
V3
Vi
V2 V4
V1 V5
t
Semnal K inchis
ceas
K deschis
V3 t
Vc=Vo V4
V2
V5
V1
t
Th Ts Th Ts
10
Schema bloc funcțională a sistemului de conversie
analog numerică AVR 8 biți (exemplu cu 8 canale de
intrare ADC0..ADC7)
ADC7
ADC6 Registru rezultat
ADC5
Octet superior (ADCH)
N
Vin
ADC4 CAN 10 biţi 10 biti
ADC3
Multiplexor CAN 10bits
ADC2 Registru rezultat
Vref+
ADC1 Octet inferior (ADCL)
ADC0
Registru de control
SFIOR 11
Convertorul analogic-numeric : schema bloc detailată
(ATMega16)
Registrele utilizator
Sursa referinţa
interna
13
Intrării asimetrice si/sau diferențiale
14
Multiplexorul analogic (ca exemplu, un multiplexor 4:1)
este un circuit selector analogic : selectează la ieșire
una din mai multe intrări analogice
Doar un singur comutator este închis la un moment dat,
altcumva scurtcircuităm intre ele sursele de tensiune de la intrările Ii!
K1
I0
4 Intrări K2
I1 1 Ieșire
Analogice K3 - O
I2 + Analogică
(tensiuni K4
I3 (tensiune
față de față de masă)
masă) S1 S2
Semnale de
selecţie
(numerice!)
Multiplexorul analogic este o rețea de comutatoare (chei)
electronice de tensiune Ki, care sunt comandate de o logică de
decodificare, prin intermediul unor semnale de selecţie (S1, S2
reprezintă “adresa” intrării pe care vreau să o aduc la ieşire) 15
Intrări analogice: ATMega
16
Intrări analogice: ATtiny 15 si ATtiny 24
17
AVR ATMega- convertorul analogic-numeric,
caracteristici
• Pentru ATMEGA 16, două dintre intrările - perechile diferențiale (ADC1/ADC0 şi
ADC3/ ADC2) pot utiliza un amplificator de câștig programabil (Gain Amplifier),
cu paşii de amplificare de 0 dB (x1), 20dB (x10), sau 46 dB (x200).
– Utilizarea acestui câștig (GAIN) programabil reduce rezoluția (si precizia).
– Dacă este selectat câștigul de x1 sau x10, rezoluția rezultată va fi de 8 biţi, iar dacă este
selectat câștigul de x200, rezoluția rezultată va fi de 7 biți.
• Datorită tehnicii de conversie utilizată (aproximări succesive) sistemul conține şi un
circuit eșantionare şi memorare (Sample Hold - S/H) conectat între ieșirea
multiplexorului analogic şi intrarea convertorului, care asigură menținerea
constantă a tensiunii de intrare a CAN–ului pe toată durata conversiei.
• Convertorul analog-numeric este unul având rezoluția de 10 biţi utilizând metoda
aproximărilor succesive
– Eroarea totală este de ± 2 LSB, deci el nu are precizia unui CAN de 10 biti (nu are rezoluţia
adevărată de 10 biţi!)
– Sunt necesari 2 octeți pentru memorarea rezultatului conversiei.
• Există o conexiune externă separată, AVCC pentru alimentarea sub-sistemului
CAN.
• AVCC nu trebuie să difere cu mai mult decât ±0.3V faţă de VCC (alimentarea
numerică).
• Există şi o sursă de referință internă de 2.56V (valoarea poate fi diferită funcţie de
variantă!) precum şi un pin dedicat VREF pentru conectarea unei surse de tensiune
de referință externe.
• Caracterizarea preciziei acestui sistem de conversie (erori: liniaritate, offset, câştig,
etc.) este detailată în foile de catalog Microchip/Atmel.
18
Convertorul analogic-numeric AVR ATMega :
registrele asociate
• Sistemul CAN al AVR 8 biți este configurat şi controlat, la fel
ca orice periferic AVR, prin intermediul unor registre mapate
în spațiul I/O.
• Există o serie de biți de comandă/control precum si biți de
stare, grupați in diverse registre, a căror semnificație
particulară va fi detailată .
• Registrele de comandă, control si stare sunt:
– ADMUX - prin intermediul lui se stabilește canalul sau canalele de
intrare al multiplexorului (intrarea analogica care va fi utilizata in
operația de conversie), modul de intrare (asimetric sau diferențial),
câștigul programabil (daca e cazul) şi se selectează referința care
va fi utilizată
– ADCSRA – este registrul de control şi stare al convertorului analog
numeric şi este un set de biți de control şi stare
– SFIOR – în acest registru există un câmp de 3 biţi prin care se
selectează cine va declanșa operația de conversie
19
Combinaţiile posibile (ex. ATMega16)
de intrări si câştig pentru
amplificatorul programabil (MUX4..MUX0)
ADMUX
Selectarea sursei
de referinţă
Vin Vin+
Vin-
21
AVR 8 biți- controlul operației de
conversie analog-numerică
• Funcționarea convertorului analog numeric (si in particular cea a unuia cu
aproximații succesive) este una periodizată cu ajutorul unui semnal de
ceas si a unei mașini secvențiale sincrone
• Exista mai multe etape/faze ale procesului de conversie analog-numerică
realizat de acest convertor
• Procesul începe cu declanșarea operației de conversie (SOC- Start Of
Conversion) si se termină cu finalizarea conversiei (EOC- End Of
Conversion), atunci când valoarea numerică rezultată este integral
disponibilă pentru utilizator
• Pentru un CAN cu aproximații succesive una din fazele importante este cea
de eșantionare/memorare (S/H- Sample/Hold)
• Utilizatorul (programatorul) trebuie să aibă mijloace specifice pentru a
controla declanșarea operației de conversie si pentru a determina momentul
când s-a finalizat operația de conversie
• In cazul AVR 8 biți aceste mijloace specifice sunt, in primul rând, biţii de
comandă/control precum si cei de stare din registrele aferente CAN
• Sistemul de temporizare numărare AVR 8 biți poate fi utilizat pentru
periodizarea operațiilor de conversie
• Sistemul CAN este integrat in sistemul de întreruperi AVR, CAN având un
vector de întrerupere dedicat
22
Registrul SFIOR- cine declanşează
si porneşte conversia?
26
Registrul ADCSRA
O conversie poate fi declanșată si în mod
„automat”, în mai multe moduri (folosind
una din mai multe surse potențiale de
declanșare).
Declanșarea automată este activată
setând bitul ADATE în ADCSRA
28
Declanșarea unei operații de conversie -2
29
Controlul vitezei de conversie (a timpului de
conversie)
• Timpul de conversie poate fi controlat/programat, in anumite
limite, de utilizator prin intermediul semnalului de ceas pentru
CAN
• Durata unei operații de conversie, timpul de conversie - care este
invers proporțional cu viteza de conversie - depinde de un factor de
divizare programat și de frecvența oscilatorului de ceas sistem
(CK) care este semnalul de ceas pentru acest divizor
• Astfel, sursa de ceas pentru convertorul analog-numeric este un divizor
programabil de frecvență (prescaler) de 7 biți, având ca semnal de ceas
ceasul unității centrale CK=fCPU.
• Factorul de divizare (de 2, 4, 8, 8, 16, 32, 64 şi 128) poate fi programat
de utilizator prin intermediul câmpului de biți ADPS din registrul
ADCSRA (figura); atenție, factorii disponibili pot fi diferiți funcție de
varianta de AVR
• Divizorul de frecvență va începe să funcționeze din momentul activării
sistemului CAN, prin setarea bitului ADEN din ADCSRA.
30
Registrul ADCSRA: ne da factorul de
(pre)divizare al ceasului CAN
31
AVR 8 biți: cât durează de fapt o operație de
conversie analog- numerică?
• La fel ca si pentru alte sisteme de conversie –analog numerica de la
alte familii de microcontrolere, durata unei astfel de operații se
exprima intr-un număr de perioade ale ceasului CAN
• Convertorul analog-numeric AVR 8 biti asigură rezoluția maximă
adevărată de 10 biţi pentru frecvente ale ceasului CAN între 50 KHz
şi 200 KHz.
• Dacă este necesară o frecvență de eșantionare mai mare, cu o
rezoluție adevărată mai mică de 10 biţi (cu o precizie mai mică),
frecvența ceasului poate fi și mai mare de 200 KHz.
• Atunci când se lansează o conversie singulară, setând bitul ADSC în
ADCSRA, conversia va începe pe următorul front crescător al
ceasului CAN.
• O conversie obișnuită durează in total un număr de 13 cicluri
(perioade) de ceas CAN.
• Prima conversie după activarea CAN-ului (realizata dupa ce a fost
setat ADEN în ADCSRA) durează însă 25 cicluri de ceas CAN, cicluri
necesare şi pentru inițializarea circuitului analogic.
• Eșantionarea şi memorarea propriu-zisă durează 1.5 cicluri de ceas
CAN după pornirea unei conversii, dar durează 13.5 cicluri CAN după
pornirea primei conversii.
32
AVR 8 biți: cât durează de fapt o operație
de conversie analog- numerică? -2
• Când este folosită auto-declanşarea (free running), divizorul de frecvenţă va
fi şi resetat în momentul declanşării.
• Aceasta asigură o întârziere fixă din momentul declanşării până la pornirea
conversiei.
• În acest mod, eşantionarea şi memorarea durează 2 cicluri de ceas CAN,
după frontul crescător declanşator.
• Trei cicluri suplimentare de ceas CPU sunt folosite pentru logica de
sincronizare.
• Când se foloseşte modul de intrare diferenţial împreună cu auto-
declanşarea de la o altă sursă decât finalizarea conversiei curente, fiecare
conversie va necesita 25 cicluri (perioade) de ceas CAN.
• Aceasta datorită faptului că, după fiecare conversie, CAN-ul trebuie să fie
dezactivat şi apoi reactivat.
– O evaluare a timpului de conversie, exprimat in perioade ale sistemului de ceas
CAN, este dată în tabelul din slide-ul următor
• Practic, timpul de conversie, pentru o frecvenţa de ceas sistem de 8
MHz, poate fi de la ordinul x 10 μsec până la ordinul x100 sau x1000
μsec
33
AVR 8 biți: valori ale timpului de conversie
funcție de perioada ceasului CAN
Timpul total de
Timpul de eşantionare şi conversie
urmărire (Cicluri / perioade (Cicluri /
Condiţia
ale ceasului de la începutul perioade ale
conversiei) ceasului
CAN)
Conversii normale,
1.5 13
mod asimetric
Conversii auto-
2 13.5
declanşate
Conversii normale,
1.5/2.5 13/14
mod diferenţial
34
Exemplu conversie singulară, prima
conversie
35
Exemplu conversie singulară, conversie
normală (următoarele conversii)
36
Exemplu conversie automată (auto-
declanşată)
37
AVR 8 biți: conversia analog-numerica,
modul de intrare diferențial
• Există anumite aspecte ale conversiei analog numerice care trebuie
să fie luate în considerație atunci când se folosesc canalele de
intrare în mod diferențial (se realizează conversii diferențiale).
• Conversiile diferențiale sunt sincronizate cu un ceas intern CKADC2
egal cu jumătate din ceasul CAN.
– Această sincronizare se face în mod automat astfel încât eșantionarea
şi memorarea să aibă loc într-o fază specifică a lui CKADC2.
• O conversie inițiată de utilizator (toate conversiile singulare şi prima
conversie în modul “ Free Running”) atunci când CKADC2 este “0”
va dura aceeași perioadă de timp ca şi o conversie in mod asimetric
(13 cicluri de ceas CAN).
• O conversie iniţiată de utilizator când CKADC2 este “1” va dura 14
cicluri de ceas CAN datorită mecanismului de sincronizare.
• În modul “Free Running”, o nouă conversie este inițiată îndată ce
conversia anterioară este completă, şi deoarece CKADC2 este “1”
logic în acest moment, toată conversiile pornite automat în modul
“Free Running” (mai puțin prima) vor dura 14 cicluri de ceas CAN.
38
AVR 8 biți: conversia analog-numerica,
modul de intrare diferențial -2
• Etajul de amplificare programabilă care poate fi utilizat numai în
modul diferențial este optimizat pentru o lărgime de bandă
(bandwidth) de 4 KHz, pentru amplificările posibile.
– Frecvențele mai mari pot fi afectate de o amplificare neliniară.
– Este recomandată o filtrare trece-jos externă, dacă semnalul de
intrare conține componente de frecvență mai mare decât lărgimea de
bandă.
– Nu există însă nici o legătură între frecvența de ceas CAN şi lărgimea
de bandă, putându-se realiza şi folosi rate de eșantionare mult mai mari
decât cele care ar rezulta din corelarea cu lărgimea de bandă.
• Dacă este utilizat modul de intrare diferențial şi conversiile sunt
pornite în mod automat, convertorul trebuie să fie oprit între
conversii.
• Când este folosită auto-declanşarea, divizorul de frecvenţă este
resetat înainte de pornirea conversiei.
• Astfel, deoarece câștigul este dependent de un ceas CAN stabil pe
perioada anterioară conversiei, această conversie nu va fi validă.
• Dezactivând şi apoi reactivând CAN–ul între conversii (scriind
în ADEN din ADCSRA “0” şi apoi “1”) se vor executa doar
conversii extinse, dar al căror rezultat va fi întotdeauna valid. 39
Comutarea canalelor de intrare sau a sursei
de referință
41
Comutarea canalelor de intrare si/sau a
sursei de referință: modul diferențial -3
• Comutarea canalelor, în modul de intrare diferențial, pune şi ea niște
probleme mai deosebite.
• Din momentul comutării canalelor (al actualizării registrului ADMUX)
durează aproximativ 125 µs până ce câștigul programat se va
stabiliza la noua valoare.
• Astfel conversiile ar trebui să fie pornite la cel puțin după 125 µsec
de la realizarea noii selecții sau rezultatele conversiei pe această
perioadă nu trebuie luate în considerare.
• Același timp de stabilizare este necesar şi pentru prima conversie
diferențială realizată după comutarea referinței CAN (după
actualizarea câmpului REFS1:0 din ADMUX).
• Când se trece de la un mod de intrare asimetric la un mod
diferențial, rezultatul primei conversii este, în general de precizie
mult scăzută datorită timpului de stabilizare necesar pentru circuitul
de anulare automată a offset-ului (decalajului la intrare).
– Practic, valoarea rezultată nu trebuie luată în considerare.
42
Comutarea canalelor de intrare si/sau a
sursei de referință: recomandări generale - 4
• În concluzie există câteva recomandări care trebuie urmate pentru
a ne asigura ca selecţia canalului de intrare s-a făcut corect
• În modul conversie singulară (Single Conversion):
– întotdeauna se selectează canalul înainte de a porni conversia.
– selectarea canalului poate fi modificată după un ciclu de ceas CAN, din
momentul setării bitului ADSC.
– metoda cea mai simplă este să se aştepte terminarea conversiei
pentru a comuta canalul.
• În modul achiziţie liberă (Free Running):
– întotdeauna se selectează canalul înainte de a porni prima conversie.
– La fel ca la modul anterior selectarea canalului poate fi schimbată după
un ciclu de ceas CAN, din momentul setării lui ADSC şi cel mai simplu
este să se aştepte terminarea conversiei pentru a comuta canalul.
– Deoarece conversia următoare a pornit deja în mod automat, următorul
rezultat reflectă selecţia anterioară a canalului.
– Doar următoarele conversii vor reflecta selectarea noului canal de
intrare.
43
Sursa de tensiune de referinţă pentru
convertorul analogic-numeric
• Tensiunea de referință VREF este cea care practic stabilește
domeniul de conversie (domeniul mărimii de intrare pentru un canal
analogic) pentru CAN.
• Referința este selectată cu ajutorul biților REFS1 si REFS0 din
registrul ADMUX
• Dacă tensiunea de intrare (în modul mod asimetric) depășește
VREF, în urma conversiei vor rezulta coduri egale cu valoarea
0x3FF (valoarea maximă exprimabilă pe 10 biţi).
• Tensiunea de referință VREF poate fi selectată astfel:
– fie ca provenind de la pinul AVCC (alimentarea analogică),
– fie de la pinul extern dedicat AREF,
– fie de la o sursă de referinţă internă de 2.56V (la ATMega 16)
44
Sursa de tensiune de referință pentru
convertorul analogic-numeric -2
• Tensiunea de referință internă de 2.56V este oferită de o sursă de referință
cu bandă interzisă – band gap (VBG), printr-un amplificator intern de
separare (buffer).
• Atenție, pentru alte variante AVR sursa de referință internă poate avea
alte valori (de ex. pt. ATMega 169 sursa de referință interna este de
1.1V)
• Indiferent de selecția referinței, pinul AREF este direct conectat la intrarea
de referinţă a CAN, şi tensiunea de referință poate fi filtrată (decuplată)
conectând un capacitor între pinul AREF şi masă
• VREF poate, de asemenea, să fie măsurată pe pinul AREF, dar trebuie ținut
cont de faptul că ea este o sursă cu impedanță internă mare acceptând
practic numai o încărcare capacitivă (practic ea nu poate debita curent).
• Dacă utilizatorul folosește o sursă de referinţă externă conectată la AREF,
atunci nu se mai pot utiliza celelalte opțiuni pentru tensiunea de referință,
sursa externă scurtcircuitând variantele interne.
• Dacă însă nu se utilizează o sursă de referință externă, utilizatorul poate
oricând să comute între AVCC şi referința internă.
• Atenție, prima conversie realizată după comutarea referinței poate să dea
un rezultat incorect, astfel că ea nu ar trebui luată in considerare!
45
Schema electrică echivalentă pentru o
intrare analogică
• Schema electrică echivalentă, pentru regim static si regim dinamic,
pentru o intrare analogică (intrare asimetrică) este prezentată în
figura de mai jos.
• O sursă de tensiune aplicată la intrarea ADCn este implicit
încărcată (are ca sarcină) cu capacitatea şi rezistența acelui pin
către masă, indiferent dacă acel canal este selectat/utilizat sau
nu ca intrare pentru convertor.
• Când canalul este selectat, sursa mai trebuie să comande (sa
încarce si sa descarce) in plus şi capacitorul circuitului de
eșantionare/memorare (S/H) printr-o rezistență serie (rezistența
combinată din calea de intrare).
46
Schema electrică echivalentă pentru o intrare
analogică -2
• Circuitul de intrare al CAN–ului este optimizat pentru semnalele
analogice generate de surse de tensiune echivalente cu o
impedanță de ieșire mai mică de 10 KΩ, în sensul că, dacă este
folosită o astfel de sursă, contribuția impedanței sursei la timpul
necesar pentru eșantionare va fi neglijabilă.
• În practică daca avem surse cu o impedanță mică şi semnale cu
o variație lentă, nu mai trebuie să evaluăm în nici un fel contribuția
circuitului de eșantionare-memorare (S/H).
• Dacă este utilizată varianta de intrare diferențială, schema electrică
echivalentă de intrare este oarecum diferită, condițiile impuse
impedanței sursei de intrare fiind ceva mai relaxate ( < 100 KΩ ).
• Principial, în spectrul semnalului de intrare nu trebuie să apară
componente cu frecvența mai mare decât frecvența Nyquist
(fADC/2) pentru orice tip de canal, pentru a evita apariția unor
conversii cu rezultate imprevizibile.
• Eventualele componente de înaltă frecvență trebuie eliminate de
utilizator printr-o filtrare externă de tip trece-jos (FTJ)
corespunzătoare, înainte de aplicarea semnalelor la intrările
analogice.
47
Tehnici de reducere a zgomotului analogic
48
Tehnici de reducere a zgomotului analogic-
decuplarea alimentarii AVcc
ATMega169
ATMega32 49
Caracteristica statică de transfer şi
rezultatul unei conversii analog-numerice
• După finalizarea unei operații de conversie (bitul ADIF este “1”),
rezultatul conversiei poate fi găsit în registrele pentru rezultat/date ale
CAN–ului: ADCL și ADCH.
• Pentru o conversie unipolară (asimetrică) pe 10 biți, rezultatul,
exprimat in cod binar natural, va avea valoarea zecimală, numită aici
generic ADC:
VIN ⋅1024
ADC =
VREF
– unde VIN este tensiunea pe pinul de intrare selectat şi VREF
tensiunea de referință selectată.
– rezultatul ADC este o mărime fără semn, exprimată in cod binar
natural, valorile extreme (în hex) exprimate pe 10 biţi fiind:
• minim 0x000 (0), pentru o tensiune de intrare VIN egala cu masa
analogică
• maxim 0x3FF+1 (1023+1), pentru o tensiune de intrare VIN egala cu
tensiunea de referință selectată VREF.
ADC =
(VPOS − VNEG ) ⋅ GAIN ⋅ 512
VREF
• Unde:
– VPOS este tensiunea (fața de masă) pe pinul de intrare pozitivă (intrarea aleasa
ca neinversoare Vin+),
– VNEG este tensiunea pe pinul de intrare negativă (intrarea aleasa ca inversoare
Vin-),
– GAIN este factorul de câștig selectat pentru amplificatorul programabil (daca
acesta nu exista GAIN=1) şi
– VREF este tensiunea sursei de referință selectată.
• Rezultatul in acest caz este o mărime cu semn, exprimată în cod
binar complement față de doi, pe 10 biți, având valori de la
minimul negativ 0x200 (-512) până la maximul pozitiv 0x1FF
(+511).
– Dacă utilizatorul vrea să execute doar o verificare rapidă de polaritate, este
suficientă citirea doar a MSB-ului (bitul ADC9 din ADCH) care în acest caz este
bitul de semn. 51
Caracteristica statică de transfer şi
rezultatul conversiei - 3
52
Caracteristica statică de transfer şi
rezultatul conversiei -4
• În tabelul următor sunt prezentate codurile de ieșire
rezultate dacă este selectată perechea de intrare
diferențială (ADCn – ADCm), cu un câștig GAIN şi o
tensiune de referință VREF.
• Un exemplu de calcul bazat pe această caracteristică
este prezentat în continuare:
– Registrul ADMUX = 0xED (adică intrare ADC3 - ADC2, câștig
x10, referință internă 2.56V, rezultat aliniat la stânga)
– Tensiunea pe ADC3 este de 300 mV, iar tensiunea pe ADC2 de
500 mV.
– ADC = 512 * 10 * (300 - 500) / 2560 = - 40010 = 0x270 in cod
binar complement fata de 2 !
– Dacă avem un “0” scris în bitul ADLAR rezultatul va fi aliniat la
dreapta cu: ADCL = 0x70, ADCH = 0x02.
– Dacă avem un “1” scris în bitul ADLAR rezultatul va fi aliniat la
stânga cu: ADCL = 0x00 şi ADCH = 0x9C.
53
Caracteristica statică de transfer și
rezultatul conversiei -5
Valoarea zecimală
VADCn Codul citit
corespunzătoare
VADCm + VREF/GAIN 0x1FF 511
VADCm + 0.999 VREF/GAIN 0x1FF 511
VADCm + 0.998 VREF/GAIN 0x1FE 510
… … …
VADCm + 0.001 VREF/GAIN 0x001 1
VADCm 0x000 0
VADCm – 0.001 VREF/GAIN 0x3FF -1
… … …
VADCm – 0.999VREF/GAIN 0x201 -511
VADCm – VREF/GAIN 0x200 -512
54
Sistemul de conversie analog numeric
– seriile Tiny si Mega modernizate
In foile de catalog ale variantelor modernizate apare o nouă schemă bloc care
ilustrează si funcționalitățile disponibile- practic aceleași ca la variantele clasice,
dar si unele noi gen măsurarea locală a temperaturii si compararea
rezultatului conversiei cu o fereastră de valori (din registrele duble WINLT si
WINHT, cu ieșirea WCOMP), posibilitatea de a acumula (ACC) pană la 64 de
eșantioane intr-un singur rezultat.
Nu mai există mod de intrare diferențial, intrările pot fi doar asimetrice.
Există acum 17 registre de comandă, stare si date asociate sistemului.
Denumirile registrelor s-au modificat (de exemplu registrele de date sunt acum
55
registrul dublu RES), deci obligatoriu trebuie consultată foaia de catalog.
AVR 8 biti: exemplu de programare al
convertorului analog-numeric, mod polling
int ADC_temp=0;/* pt. memorarea rezultatului, exprimat pe
16 biti */
/* Selectam canalul de intrare ADC0, referinta interna,
rezultat aliniat la dreapta */
ADMUX =0xC0 ;
// Activare ADC
// ADC Prescaler la fosc= 1MHz / 8 = 125kHz
// Declansare automata
// Dupa Reset bitii ADTSi din SFIOR sunt in 0, deci suntem
// si in modul Free Running
ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0 | (1<<ADATE);
//lansare conversie
ADCSRA |= (1<<ADSC);
//asteapta finalizare conversie, bitul ADIF =1?
while(!(ADCSRA & 0x10));
/*in ADC_temp se va reconstrui valoarea pe 10 biti */
ADC_temp = ADCL; /* citeste primul pe ADCL!!!! */
ADC_temp += (ADCH << 8); /* citeste, deplaseaza si aduna 56
si pe ADCH */
O schemă, doar pentru secțiunea
analogică..
ATMega16
+3.3V
Rt1 Rt2
R1 R2
+3.3V
void adc_init()
{
// Referinta va fi una externa, cea preluata de pe pinul
// AVcc, adica AREF = AVcc
ADMUX = (1<<REFS0);
// Activare CAN si alegem divizorul (prescaler) 8
// daca avem un ceas sistem de 8 MHz
// f ceas CAN = 8 000 000 / 8 = 1 000 000 Hz = 1 MHz
// adica T ceas CAN = 1 usec
//adica o conversie obisnuita va dura 13 x 1 usec = 13 usec
// doar prima conversie va dura 25 x 1 usec = 25 usec
ADCSRA=(1<<ADEN) | (1<<ADPS1) | (1<<ADPS0);
//avem conversie singulara (neautomata), pt. ca ADATE a ramas
in ‘0’
//de asemenea rezultatul este aliniat la dreapta, ADLAR a ramas
in ‘0’ 58
}
Un alt exemplu, citirea rezultatului, mod
polling
O funcție generică de citire a rezultatului (returnat ca un întreg fără semn pe 16 biţi) de pe
un canal specificat ca argument (întreg fără semn pe 8 biţi):
#include <avr/io.h>
void adc_init();
uint16_t adc_read(uint8_t ch);
int main()
{
uint16_t adc_result0, adc_result1;
// initializare CAN
adc_init();
//o bucla fara sfarsit
while(1) {
adc_result0 = adc_read(0); // citim valoarea canal ADC0
adc_result1 = adc_read(1); // citim valoarea canal ADC1
// in continuare prelucram cele 2 rezultate
// eventual le “afisam”, etc.
…………….
} Intr-una din prezentările viitoare va apărea si
} un exemplu in care se utilizează întreruperea aferentă CAN 60
Exemplu de utilizare a convertorului analog-numeric
(CAN) si a întreruperii aferente lui : schema (se
utilizează oscilatorul de ceas RC intern)..
ATMega16
5V
Rt1
R1
5V