- Kaj je ADC (analogna v digitalno pretvorbo)
- ADC v mikrokrmilniku AVR Atmega16
- Potrebne komponente
- Shema vezja
- Nastavitev nadzornih registrov ADC v Atmega16
- Programiranje Atmega16 za ADC
Skupna značilnost, ki se uporablja v skoraj vseh vdelanih aplikacijah, je modul ADC (analogni v digitalni pretvornik). Ti analogno-digitalni pretvorniki lahko berejo napetost iz analognih senzorjev, kot so temperaturni senzor, senzor nagiba, trenutni senzor, Flex senzor itd. V tej vadnici bomo izvedeli, kaj je ADC in kako uporabljati ADC v Atmega16. Ta vadnica vključuje priključitev majhnega potenciometra na ADC zatič Atmega16, 8 LED pa se uporabljajo za prikaz spreminjajoče se napetosti izhodne vrednosti ADC glede na spremembo vhodne vrednosti ADC.
Prej smo razložili ADC v drugih mikrokrmilnikih:
- Kako uporabljati ADC v ARM7 LPC2148 - Merjenje analogne napetosti
- Kako uporabljati ADC v STM32F103C8 - Merjenje analogne napetosti
- Kako uporabljati ADC v MSP430G2 - Merjenje analogne napetosti
- Kako uporabljati ADC v Arduino Uno?
- Uporaba modula ADC mikrokrmilnika PIC z MPLAB in XC8
Kaj je ADC (analogna v digitalno pretvorbo)
ADC pomeni Analog to Digital Converter. V elektroniki je ADC naprava, ki pretvori analogni signal, kot sta tok in napetost, v digitalno kodo (binarna oblika). V resničnem svetu je večina signalov analognih in kateri koli mikrokrmilnik ali mikroprocesor razume binarni ali digitalni jezik (0 ali 1). Da bi torej mikrokrmilniki razumeli analogne signale, moramo te analogne signale pretvoriti v digitalno obliko. ADC točno to stori namesto nas. Za različne aplikacije je na voljo veliko vrst ADC. Nekaj priljubljenih ADC-jev je bliskovni, zaporedni približek in sigma-delta.
Najbolj poceni tip ADC je zaporedna aproksimacija in v tej vadnici bo uporabljen zaporedni približevalni ADC. Pri zaporednem približevanju ADC se zaporedoma generira vrsta digitalnih kod, od katerih vsaka ustreza določeni analogni ravni. Notranji števec se uporablja za primerjavo z analognim signalom v pretvorbi. Generacija se ustavi, ko analogni nivo postane le večji od analognega signala. Digitalna koda ustreza analogni ravni je želena digitalna predstavitev analognega signala. S tem smo zaključili našo malo razlago o zaporednem približevanju.
Če želite podrobno raziskati ADC, si lahko ogledate našo prejšnjo vadnico o ADC. ADC-ji so na voljo v obliki IC-jev, danes pa imajo tudi mikrokrmilniki vgrajene ADC-je. V tej vadnici bomo uporabili vgrajeni ADC Atmega16. Pogovorimo se o vgrajenem ADC Atmega16.
ADC v mikrokrmilniku AVR Atmega16
Atmega16 ima vgrajen 10-bitni in 8-kanalni ADC. 10 bit ustreza temu, če je vhodna napetost 0-5V, bo razdeljena na 10 bitno vrednost, tj. 1024 ravni diskretnih analognih vrednosti (2 10 = 1024). Zdaj 8-kanalni ustreza namenskim 8 ADC zatičem na Atmega16, kjer lahko vsak zatič bere analogno napetost. Popoln portA (GPIO33-GPIO40) je namenjen za delovanje ADC. Privzeto so zatiči PORTA splošni IO zatiči, kar pomeni, da so zatiči vrat multipleksirani. Za uporabo teh nožic kot ADC nožic moramo konfigurirati nekatere registre, namenjene nadzoru ADC. Zato so registri znani kot kontrolni registri ADC. Pogovorimo se o tem, kako nastaviti te registre, da začnejo delovati vgrajeni ADC.
ADC zatiči v Atmega16
Potrebne komponente
- IC mikrokrmilnik Atmega16
- Kristalni oscilator 16 MHz
- Dva kondenzatorja 100nF
- Dva kondenzatorja 22pF
- Pritisni gumb
- Jumper žice
- Breadboard
- USBASP v2.0
- Led (poljubne barve)
Shema vezja
Nastavitev nadzornih registrov ADC v Atmega16
1. Register ADMUX (Register za izbiro multiplektorja ADC) :
Register ADMUX je namenjen izbiri kanala ADC in izbiri referenčne napetosti. Spodnja slika prikazuje pregled registra ADMUX. Opis je razložen spodaj.
- Bit 0-4: bitov za izbiro kanala.
MUX4 |
MUX3 |
MUX2 |
MUX1 |
MUX0 |
Izbran je kanal ADC |
0 |
0 |
0 |
0 |
0 |
ADC0 |
0 |
0 |
0 |
0 |
1. |
ADC1 |
0 |
0 |
0 |
1. |
0 |
ADC2 |
0 |
0 |
0 |
1. |
1. |
ADC3 |
0 |
0 |
1. |
0 |
0 |
ADC4 |
0 |
0 |
1. |
0 |
1. |
ADC5 |
0 |
0 |
1. |
1. |
0 |
ADC6 |
0 |
0 |
1. |
1. |
1. |
ADC7 |
- Bit-5: Uporablja se za prilagajanje rezultata v desno ali levo.
ADLAR |
Opis |
0 |
Rezultat prilagodite desno |
1. |
Rezultat prilagodite levo |
- Bit 6-7: Uporabljajo se za izbiro referenčne napetosti za ADC.
REFS1 |
REFS0 |
Izbira referenčne napetosti |
0 |
0 |
AREF, interni Vref je izklopljen |
0 |
1. |
AVcc z zunanjim kondenzatorjem na zatiču AREF |
1. |
0 |
Rezervirano |
1. |
1. |
Notranja referenčna napetost 2,56 z zunanjim kondenzatorjem na AREF Pin |
Zdaj začnite konfigurirati te registrske bite v programu tako, da dobimo notranje ADC branje in izpis na vse nožice PORTC.
Programiranje Atmega16 za ADC
Celoten program je naveden spodaj. Zaženite program v Atmega16 s pomočjo JTAG in Atmel studia in zavrtite potenciometer, da spremenite vrednost ADC. Tu je koda razložena po vrsticah.
Začnite z izdelavo ene funkcije za branje pretvorjene vrednosti ADC. Nato v funkciji ADC_read posredujte vrednost kanala kot 'chnl' .
unsigned int ADC_read (unsigned char chnl)
Vrednosti kanalov morajo biti med 0 in 7, saj imamo samo 8 ADC kanalov.
chnl = chnl & 0b00000111;
Z zapisovanjem "40", tj. "01000000" v register ADMUX, smo izbrali PORTA0 kot ADC0, kjer bo analogni vhod povezan za digitalno pretvorbo.
ADMUX = 0x40;
Zdaj ta korak vključuje postopek pretvorbe ADC, kjer s pisanjem ONE v ADSC Bit v registru ADCSRA začnemo pretvorbo. Po tem počakajte, da bit ADIF vrne vrednost, ko je pretvorba končana. Pretvorbo ustavimo tako, da na ADIF Bit v register ADCSRA zapišemo '1'. Ko je pretvorba končana, vrnite vrednost ADC.
ADCSRA - = (1 <
Tu se z nastavitvijo bita REFS0 izbere notranja referenčna napetost ADC. Po tem omogočite ADC in izberite prescaler kot 128.
ADMUX = (1 <
Zdaj shranite vrednost ADC in jo pošljite v PORTC. V PORTC je priključenih 8 LED, ki prikazujejo digitalni izhod v 8-bitnem formatu. Primer, ki smo ga prikazali, spreminja napetost med 0V in 5V z uporabo ene posode 1K.
i = ADC_read (0); PORTC = i;
Digitalni multimeter se uporablja za prikaz analogne vhodne napetosti v ADC Pin-ju, 8 LED-jev pa za prikaz ustrezne 8-bitne vrednosti izhoda ADC. Samo zavrtite potenciometer in si oglejte ustrezen rezultat na multimetru in na svetlečih LED.
Popolna koda in delovni video je podan spodaj.