Sunteți pe pagina 1din 10

Ministerul Educaiei i Tineretului al Republicii Moldova Universitatea Tehnic a Moldovei Facultatea Calculatoare,Informatica i Microelectronica Catedra Materiale si Dispozitive Semiconductoare

RAPORT
Disciplina Microprocesoare

La lucrarea de laborator nr.5

Tema: Convertorul analog-digital (ADC)

A elaborat

studentul gr.ME-081 Muntean Alexandru

A verificat

V.Prac

Chiinu - 2010

Tema: Convertorul analogic-digital (ADC) Scopul lucrrii: Obinerea cunotinelor practice i deprinderilor de a opera cu convertorul analogic - digital ntr-un microcontreller din familia AVR. Expunerea problemei: S se elaboreze un dispozitiv care n dependen de valoarea semnalului Analogic la una din intrrile analogice a microcontrollerului s indice nivelul semnalului la un set de 8 leduri, nivelul minimal va aprinde un singur led, iar nivelul maxim va aprinde toate ledurile. La un nivel intermediar se va aprinde un set de leduri corespunztor nivelului aplicat. Consideraii teoretice: Modulul ADC-ului de 10 bii cu aproximare n serie intr n componena modelelor ATmega 8x, ATmega 163x, ATmega 32x, ATmega 323x, ATmega 64x i ATmega128x. Parametrii de baz al acestui ADC sunt: toleran absolut: 2 LSB; nelinearitatea integral: 5 LSB; rapiditatea: pn la 15mii probe/s; Modulul Convertor Analog-Digital este utilizat pentru conversia tensiunii analogice ntr-o valoare digital (n AVR pe 10 bii). De exemplu, poate fi utilizat pentru perceptarea ieirii de la un senzor (de temperatur, presiune, etc.) n anumite intervale, sau pentru a executa anumite aciuni n dependen de valoarea primit. Exist mai multe tipuri de convertoare, dar cele utilizate n microcontrollerele AVR sunt convertoarele cu aproximare succesiv. Mai jos urmeaz o schem simplificat a convertorului analog-digital prezent pe AVR:

Fig. 1 Schem simplificat a convertorului analog-digital La intrare avem un multiplexor analog-digital, care este utilizat la selectarea ntre opt intrri analogice diferite. Aceasta nseamn c este posibil conversia a opt semnale (bineneles c nu n acelai timp). La ieire, valoarea convertit este nscris n regitrii ADCL i ADCH, deoarece regitrii AVR au lime de 8 bii este nevoie de o pereche p-u a stoca o valoare pe 10 bii. n modelele ATmega16x, ATmega32x, ATmega64x, ATmega128x pinii ADC-ului pot fi unii n perechi pentru a obine n total pn la 13 canale cu intrare diferenial. Dou canale n aa caz au posibiliatatea de amplificare preventiv de 20 i 200 ori a semnalului de intrare. n cazul coeficienilor de amplificare 1x i 20x rezoluia efectiv a conversiei este de 8 bii, pe cnd la coeficientul 200x 7 bii.

n calitate de tensiune de referin pentru ADC poate fi utilizat att tensiunea microcontrollerului ct i sursa intern sau extern de tensiune de referin. ADC-ul poate funciona n dou regime: regimul conversiei unice, cnd startul fiecrei conversii este iniializat de utilizator. regimul conversiei continue, cnd startul conversiei are loc continuu dup anumite intervale de timp. Tensiunea analogic la intrare trebuie s fie mai mare dect 0V, i mai mic dect tensiunea de referin a convertorului AREF. Tensiunea de referin este o tensiune extern care trebuie aplicat la pinul Aref a microcontrollerului. Valoarea convertit poate fi calculat folosind urmtorea formul: ADCH:L= ((Vin/Vref)*1023) Deoarece convertorul are o rezoluie de 10 bii, avem 1024 valori posibile, adic dac tensiunea de intrare Vin este egal cu 0, atunci valoarea convertit v-a fi zero, dac Vin este egal cu Vref atunci valoarea convertit v-a fi 1023, iar dac Vin este din Vref atunci valoarea ADCH:L este 512. Acest proces de conversie se mai numete cuantificare, bineneles ce produce o eroare, numit eroare de cuantificare. Regimurile de operare a convertorului analog-digital (CAD) Convertorul Analog-Digital are dou regimuri fundamentale de funcionare: Conversie Unar (singular) i Conversie Continu. n regim de conversie unar, este necesar de a iniializa fiecare conversie, cnd este gata rezultatul este plasat n perechea de regitri ADCH:L, i nu se pornete o alt conversie. n regim continuu, este necesar de a porni doar o dat conversia i CAD v-a porni automat urmtoarea conversie n dat ce este finisat cea actual. Conversia analog-digital nu este infptuit instantaneu, este necesar de un anumit interval de timp, care depinde de frecvena de clock folosit de CAD i este proporional cu frecvena de clock i poate fi ntre 50-200 kHz. Dac este de ajuns o rezoluie de conversie mai mic de 10 bii, frecvena CAD poate fi mrit prin ajustarea unui prescaler prezent n CAD, care divide frecvena de clock la un anumit coeficient, setat prin intermediul biilor ADPS2:0 descrii mai jos. Pentru a afla intervalul de timp necesar unei conversii se divide numrul de cicluri necesari unei conversii la frecvena DAC. Normal, o conversie este ndeplinit n 13 cicluri CAD, dar prima conversie (deodat dup pornirea CAD) se ndeplinete n 25 cicluri de clock, i mai este numit Conversie Extins. De exemplu dac folosim un CAD la frecvena de 200kHz, o conversie normal va fi ndeplinit n 65 s, iar una extins n 125 s. Regitrii de stare i control ai CAD CAD conine 4 regitri de I/O: ADMUX ADC Multiplexer Select Register ADCSR ADC Control and Status Register ADCH:L ADC Data Register(High, Low)

Tabel 1. Regitrii de control a ADC-ului

Tab. 2. ADMUX

ADMUX Acest registru este utilizat pentru selectarea unuia din cele 8 canale care va fi convertit. Tabelul de mai jos arat setrile posibile ale acestui registru:

Tab. 3 Setrile posibile ale ADMUX

Fig.2. Formatul registrului ADCSRA(ADCSR)

Tab. 4 Registrul ADCSR ADEN ADC Enable, setnd bitul dat n "1" este pornit CAD, iar n "0" CAD este oprit. Oprind CAD n timpul unei conversii va duce la anularea conversiei date. ADSC ADC Start Convertion, n regim de conversie continu va fi necesar de setat acest bit doar la prima conversie, conversiile urmtoare v-or fi pornite automat. n regim de conversie unar acest bit trebuie setat la fiecare conversie necesar. Acest bit se seteaz n "0" automat la sfritul oricrei conversii. ADFR ADC Free Running Mode, se seteaz n "1" la conversie continu. ADIF ADC Interrupt Flag, acest bit este setat automat n 1 la finisarea unei conversii, sau este setat automat n "0" doar la executarea ISR corespunztor vectorului de ntreruperi, alternativ poate fi setat n "0" nscriind "1" n acest bit. ADIE ADC Interrupt Enable, cnd este setat n "1" i SREG(I)=1 la apariia ADIF se cheam ISR corespunztoare din vectorul de ntreruperi.

ADPS2:0 ADC Prescaler Select, aceti bii determin factorul de dividere a frecvenei de clock pentru CAD, tabela de mai jos arat valorile posibile:

Exactitatea maxim a conversiei se obine, dac frecvena de tact a modulului ADC e cuprins ntre 50...200kHz. respectiv coeficientul scalrii trebuie de ales n aa mod, ca frecvena ADC-ului s se afle n acest diapazon. Dac ns exactitatea conversiei e mai mic de 10 bii e destul, se poate de utilizat o frecven mai mare, mrind astfel frecvena msurrii. n modelele ATmega8x, ATmega16x, ATmega64x i ATmega128x pentru acest scop se utilizeaz bitul ASCHM din registrul SFIOR. La setarea lui n 1 viteza de conversie se mrete. ns concomitent crete i consumul de energie a microcontrollerului.

Fig.3. Formatul registrului ADCSRB

Fig.4. Formatul registrelor ADCH i ADCL Aceti regitri conin ultima valoare convertit, ADCH biii ADC9:8, ADCL biii ADC7:0. Cnd ADCL este citit datele din ADCH nu sunt modificate pn cind nu se citete i ADCH, adic este esenial ca ambii regitri s fie citii n acelai timp adic ADCL se citete naintea ADCH. Seria ATMEGA conin un CAD mai complex, care are aceleai funcii de baz dar i anumite posibiliti mai avansate ca: apte Canale de intrare difereniale; Dou Canale de intrare difereniale cu amplificare 10x i 200x; Ajustarea la stnga a regitrilor ADCH:L (p-u rezoluie de 8 bii); Tensiune de referin selectabil de 2.56V; Mrirea exactitii conversiei Mai jos sunt prezentate careva recomandri, care permit folosirea la maxim a posibilitilor ADC-ului. n primul rnd, pentru a minimiza erorile ADC-ului nsui, e necesar de a alege corect frecvena de tact a conversiei. Cu tot acest scop la intrarea ADC-ului se recomand de conectat un filtru de frecvene joase. n afar de aceasta, la proiectarea construciei i

topologiei plcii trebuie de respectat regulile generale de proiectare a dispozitivelor analogicodigitale: pe plac trebuie prevzut o zon cu metalizare continu pentru mpmntare analogic. Partea analogic a microcontrollerului i partea analogic a ntregului dispozitiv trebuie s fie plasate deasupra la aceast zon. Pmnturile analogic i digital trebuie s se uneasc unul cu altul ntr-un singur punct a plcii; conductorii, prin intermediul crora sunt transmise semnalele analogice, trebuie s fie ct mai scurte i s fie amplasate deasupra pmntului analogic. n afar de aceasta, ei trebuie s fie amplasai ct mai departe de ciruitele digitale rapide; pinul AVCC a microcontrollerului trebuie s fie unit la sursa de alimentare prin filtru LC, cu e artat n fig.5 dac careva din pinii de intrare a ADC se utilizeaz ca pini de ieire digitali, ei nu trebuie s-i schimbe starea n timpul conversiei.

Fig. 5 Conectarea alimentrii la ADC Pentru a micora la minim zgomotele electromagnetice, induse de nucleul procesorului, n toate microcontrollerele analizate, exist un regim adugtor de somn - ADC Noise Reduction. n acest regim, din toate periferiile lucreaz doar ADC i watchdog-ul. Cu acelai scop, dar efectivitate mai mic poate fi folosit regimul Idle. Pentru utilizarea ADC-ului n oricare din regimele indicate, e necesar de a se convinge c ADC-ul este conectat i nu e ocupat cu vreo conversie, dup care de conectat ADC-ul n regim de conversie unic i de permis intreruperile de la ADC, dup care de pus microcontrollerul n regim ADC Noise Reduction (sau Idle). Imediat dup oprirea procesorului se va ncepe ciclul de conversie. Dup finisarea conversiei o s fie generat o ntrerupere, care va readuce microcontrollerul n regim de lucru, i se va ncepe executarea subrutinei de prelucare a ntreruperii date.

Fig. 6 Parametrii de baz a ADC Mersul lurrii: 1) Pentru afiarea variaiei tensiunii sursei de curent, vom utiliza un bargraph cu 10 nivele. Pentru controlul lui vom utiliza Portul C i primii 2 pini din Portul D. Pentru intrarea semnalului vom utiliza PinA0. Principiul de lucru va fi urmtorul: ADC-ul e setat n regim de conversie continu i va lua probe ale semnalului de intrare, i la finisarea conversiei va genera o ntrerupere. n subrutina de prelucrare a ntreruperii se va face compararea valorii ADC-ului cu valorile asociate cu fiecare nivel, astfel dac valoarea ADC-ului e mai mare dect un nivel, LED-ul respectiv va fi conectat, dac nu, atunci deconectat. Mai clar e prezintat principiul de lucru n Schema bloc.

Frecvena de lucru a microcontrollerului de 1Mhz e mai mult ca destul pentru aceast sarcin. Valoarea prescalerului ADC-ului este egal cu 8, deci ADC-ul funioneaz cu frecvena 125kHz, ce se afl n mijlocul diapazonului su de lucru 50200kHz.

2) n baza schemei create, se construiete schema electric cu ajutorul programului PROTEUS, care la rndul ei va aciona n baza programului.

3) n baza schemei bloc create prezentm listingul programului: .include "m16def.inc" .cseg .org 0 rjmp reset .org ADCCaddr rjmp ADC_isr .org 40 reset: ldi R16,High(RAMEND) out SPH,R16 ldi R16,LOW(RAMEND) out SPL,R16 ldi R16,0xFF out DDRD,R16 ldi R16,0x00 out DDRA,R16 out PORTA,R16 out PORTD,R16 ldi R16,(1<<ADEN)+(1<<ADSC)+(1<<ADATE)+(1<<ADIE)+(1<<ADPS2)+(1<<ADPS1) out ADCSRA,R16 ldi R16,(1<<REFS0)+(1<<ADLAR) out ADMUX,R16 SEI main: rjmp main ADC_isr: in R16,ADCH cpi R16,2 BRSH A1 CBI PORTD,7 rjmp A2 A1: SBI PORTD,7 A2: CPI R16,32 BRSH A3 CBI PORTD,6 rjmp A4 A3: SBI PORTD,6 A4: Cpi R16,64 BRSH A5 CBI PORTD,5 rjmp A6 A5: SBI PORTD,5 A6: CPI R16,96 BRSH A7 CBI PORTD,4 rjmp A8 A7: SBI PORTD,4 A8: CPI R16,128 BRSH A9 CBI PORTD,3

rjmp A10 A9: SBI PORTD,3 A10:CPI R16,160 BRSH A11 CBI PORTD,2 rjmp A12 A11:SBI PORTD,2 A12:CPI R16,192 BRSH A13 CBI PORTD,1 rjmp A14 A13:SBI PORTD,1 A14:CPI R16,224 BRSH A15 CBI PORTD,0 rjmp A16 A15:SBI PORTD,0 A16:RETI 4) Compilarea programului i verificarea funcionrii sale (executrii) pas cu pas cu scopul de a gsi i elimina erorile. 5) Ultimul pas este simularea circuitului creat n PROTEUS, corecia acestuia n caz de necesitate, n urma creia ne putem convinge c programul funioneaz corect i c microcontrollerul execut toate comenzile cu exactitate, obinnd rezultatul dorit : adic in dependen de valoarea semnalului Analogic la una din intrrile analogice a microcontrollerului s indice nivelul semnalului la un set de 8 leduri, nivelul minimal va aprinde 1 singur led, iar nivelul maxim va aprinde toate ledurile, dar la un nivel intermediar se va aprinde un set de leduri la nivelul aplicat. Descrierea comenzilor utilizate: LDI R1, K - ncarc n registrul R1 o constant IN R1, PINx citete n registrul R1 datele de intrare de la PINx OUT PORTx, R1 ncarc n registrul de ieire a potului x datele din registrul R1 BRLO(Branch if Lower) sare dac este mai mic, operandul k If Rd<-PC+k+1. Nu activeaza nici un flag. Concluzie: : In aceasta lucrarea data de laborator am facut cunostinta cu principiile de functionare a convertorului,registrii lui si bitii de configurare.Am realizat conversia unei tensiuni date la intrarea convertorului,astfel la iesire in dependenta de tensiune se aprinde ledul corespunzator.

S-ar putea să vă placă și