- Što je ADC (analogna u digitalnu konverziju)
- ADC u AVR mikrokontroleru Atmega16
- Komponente potrebne
- Kružni dijagram
- Postavljanje ADC kontrolnih registara u Atmega16
- Programiranje Atmega16 za ADC
Jedna uobičajena značajka koja se koristi u gotovo svakoj ugrađenoj aplikaciji je ADC modul (analogni u digitalni pretvarač). Ovi analogno-digitalni pretvarači mogu očitavati napon s analognih senzora kao što su temperaturni senzor, senzor nagiba, trenutni senzor, Flex senzor itd. U ovom uputstvu naučit ćemo što je ADC i kako koristiti ADC u Atmega16. Ovaj vodič uključuje povezivanje malog potenciometra na ADC pin Atmega16, a 8 LED-a se koriste za prikaz promjenjivog napona izlazne vrijednosti ADC-a s obzirom na promjenu ulazne vrijednosti ADC-a.
Prethodno smo objasnili ADC u drugim mikrokontrolerima:
- Kako se koristi ADC u ARM7 LPC2148 - Mjerenje analognog napona
- Kako se koristi ADC u STM32F103C8 - Mjerenje analognog napona
- Kako se koristi ADC u MSP430G2 - Mjerenje analognog napona
- Kako koristiti ADC u Arduino Uno?
- Korištenje ADC modula PIC mikrokontrolera s MPLAB i XC8
Što je ADC (analogna u digitalnu konverziju)
ADC je kratica od Analog to Digital Converter. U elektronici, ADC je uređaj koji analogni signal poput struje i napona pretvara u digitalni kod (binarni oblik). U stvarnom svijetu većina signala je analogna i bilo koji mikrokontroler ili mikroprocesor razumije binarni ili digitalni jezik (0 ili 1). Dakle, kako bismo mikrokontroleri razumjeli analogne signale, moramo pretvoriti te analogne signale u digitalni oblik. ADC to točno radi za nas. Postoji mnogo vrsta ADC-a dostupnih za različite primjene. Nekoliko popularnih ADC-a su flash, uzastopna aproksimacija i sigma-delta.
Najjeftiniji tip ADC-a je Sukcesivna aproksimacija i u ovom vodiču koristit će se Sukcesivno aproksimacijski ADC. U sukcesivno približnom tipu ADC-a, niz digitalnih kodova, svaki odgovara fiksnoj analognoj razini, sukcesivno se generira. Unutarnji brojač koristi se za usporedbu s analognim signalom u pretvorbi. Generiranje se zaustavlja kada analogna razina postane samo veća od analognog signala. Digitalni kod odgovara analognoj razini je željeni digitalni prikaz analognog signala. Ovo završava naše malo objašnjenje o sukcesivnoj aproksimaciji.
Ako želite detaljno istražiti ADC, možete uputiti naš prethodni vodič o ADC-u. ADC-ovi su dostupni u obliku IC-a, a mikrokontroleri danas dolaze s ugrađenim ADC-om. U ovom uputstvu koristit ćemo ugrađeni ADC od Atmega16. Razgovarajmo o ugrađenom ADC-u Atmega16.
ADC u AVR mikrokontroleru Atmega16
Atmega16 ima ugrađeni 10-bitni i 8-kanalni ADC. 10 bit odgovara onom ako je ulazni napon 0-5V, tada će biti podijeljen na 10 bitnu vrijednost, tj. 1024 razine diskretnih analognih vrijednosti (2 10 = 1024). Sada 8-kanalni odgovara namjenskim 8 ADC pinova na Atmega16, gdje svaki pin može čitati analogni napon. Kompletni portA (GPIO33-GPIO40) namijenjen je ADC radu. Po defaultu, PORTA pinovi su općenito IO pinovi, to znači da su pinovi porta multipleksirani. Da bismo te pinove koristili kao ADC pinove, morat ćemo konfigurirati određene registre posvećene ADC kontroli. Zbog toga su registri poznati kao ADC kontrolni registri. Razgovarajmo o tome kako postaviti ove registre kako bi počeli funkcionirati ugrađeni ADC.
ADC pribadače u Atmega16

Komponente potrebne
- Atmega16 mikrokontroler IC
- Kristalni oscilator od 16 MHz
- Dva kondenzatora od 100 nF
- Dva kondenzatora od 22pF
- Pritisnite tipku
- Jumper žice
- Breadboard
- USBASP v2.0
- Led (bilo koja boja)
Kružni dijagram


Postavljanje ADC kontrolnih registara u Atmega16
1. ADMUX registar (ADC Multiplexer Selection Register) :
ADMUX registar služi za odabir ADC kanala i odabir referentnog napona. Slika ispod prikazuje pregled ADMUX registra. Opis je objašnjen u nastavku.

- Bit 0-4: bitovi za odabir kanala.
|
MUX4 |
MUX3 |
MUX2 |
MUX1 |
MUX0 |
Odabran je ADC kanal |
|
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: Koristi se za podešavanje rezultata udesno ili ulijevo.
|
ADLAR |
Opis |
|
0 |
Desno prilagodite rezultat |
|
1 |
Lijevo prilagodite rezultat |
- Bit 6-7: Koriste se za odabir referentnog napona za ADC.
|
REFS1 |
REFS0 |
Odabir referentnog napona |
|
0 |
0 |
AREF, interni Vref isključen |
|
0 |
1 |
AVcc s vanjskim kondenzatorom na AREF pinu |
|
1 |
0 |
Rezervirano |
|
1 |
1 |
Interni referentni napon od 2,56 s vanjskim kondenzatorom na AREF pinu |
Sada počnite konfigurirati ove bitove registra u programu tako da dobijemo interni ADC očitanje i izlaz na sve pinove PORTC-a.
Programiranje Atmega16 za ADC
Kompletni program dan je u nastavku. Snimite program u Atmega16 koristeći JTAG i Atmel studio i zakrenite potenciometar da biste promijenili ADC vrijednost. Ovdje se šifra objašnjava redak po redak.
Započnite s izradom jedne funkcije za čitanje ADC pretvorene vrijednosti. Zatim proslijedite vrijednost kanala kao 'chnl' u funkciji ADC_read .
nepotpisani int ADC_read (nepotpisani char chnl)
Vrijednosti kanala moraju biti između 0 i 7, jer imamo samo 8 ADC kanala.
chnl = chnl & 0b00000111;
Zapisom '40', tj. '01000000' u ADMUX registar, odabrali smo PORTA0 kao ADC0, gdje će analogni ulaz biti povezan za digitalnu konverziju.
ADMUX = 0x40;
Sada ovaj korak uključuje proces pretvorbe ADC, gdje upisom JEDNOG u ADSC bit u ADCSRA registar započinjemo pretvorbu. Nakon toga pričekajte da ADIF bit vrati vrijednost kada je konverzija dovršena. Zaustavljamo pretvorbu upisivanjem '1' na ADIF Bit u ADCSRA registar. Kada se konverzija dovrši, vratite ADC vrijednost.
ADCSRA - = (1 <
Ovdje se interni referentni napon ADC odabire podešavanjem bita REFS0. Nakon toga omogućite ADC i odaberite prescaler kao 128.
ADMUX = (1 <
Sada spremite ADC vrijednost i pošaljite je na PORTC. U PORTC je spojeno 8 LED-a koji će prikazati digitalni izlaz u 8-bitnom formatu. Primjer koji smo prikazali varira napon između 0V i 5V pomoću jednog lonca od 1K.
i = ADC_read (0); PORTC = i;

Digitalni multimetar koristi se za prikaz analognog ulaznog napona u ADC pinu, a 8 LED-a koristi se za prikaz odgovarajuće 8-bitne vrijednosti ADC izlaza. Samo zakrenite potenciometar i pogledajte odgovarajući rezultat na multimetru kao i na užarenim LED-ima.
Kompletni kod i radni videozapis dati su u nastavku.
