- Čo je ADC (analógovo-digitálna konverzia)
- ADC v mikrokontroléri AVR Atmega16
- Súčasti sú povinné
- Schéma zapojenia
- Nastavenie riadiacich registrov ADC v Atmega16
- Programovanie Atmega16 pre ADC
Spoločnou vlastnosťou, ktorá sa používa takmer v každej zabudovanej aplikácii, je modul ADC (analógovo-digitálny prevodník). Tieto analógovo-digitálne prevodníky dokážu čítať napätie z analógových snímačov, ako sú teplotný snímač, snímač náklonu, prúdový snímač, snímač Flex atď. V tomto výučbe sa dozvieme, čo je ADC a ako používať ADC v Atmega16. Tento tutoriál obsahuje pripojenie malého potenciometra na ADC pin Atmega16 a 8 LED diód sa používa na zobrazenie meniaceho sa napätia výstupnej hodnoty ADC s ohľadom na zmenu vstupnej hodnoty ADC.
Predtým sme vysvetlili ADC v iných mikrokontroléroch:
- Ako používať ADC v ARM7 LPC2148 - Meranie analógového napätia
- Ako používať ADC v STM32F103C8 - Meranie analógového napätia
- Ako používať ADC v MSP430G2 - Meranie analógového napätia
- Ako používať ADC v Arduino Uno?
- Použitie modulu ADC mikrokontroléra PIC s MPLAB a XC8
Čo je ADC (analógovo-digitálna konverzia)
ADC je skratka pre Analog to Digital Converter. V elektronike je ADC zariadenie, ktoré prevádza analógový signál, ako je prúd a napätie, na digitálny kód (binárna forma). V skutočnom svete je väčšina signálov analógová a akýkoľvek mikrokontrolér alebo mikroprocesor rozumie binárnemu alebo digitálnemu jazyku (0 alebo 1). Takže aby mikrokontroléry porozumeli analógovým signálom, musíme tieto analógové signály previesť do digitálnej podoby. ADC to presne robí za nás. Existuje veľa druhov ADC pre rôzne aplikácie. Niekoľko populárnych ADC je flash, postupná aproximácia a sigma-delta.
Najlacnejším typom ADC je postupná aproximácia a v tomto návode sa použije postupná aproximácia. V typu postupnej aproximácie ADC sa postupne generuje rad digitálnych kódov, z ktorých každý zodpovedá fixnej analógovej úrovni. Na porovnanie s prevádzaným analógovým signálom sa používa interné počítadlo. Generovanie sa zastaví, keď je analógová úroveň vyššia ako analógový signál. Digitálny kód zodpovedá analógovej úrovni a je požadovanou digitálnou reprezentáciou analógového signálu. Týmto sa končí naše malé vysvetlenie postupnej aproximácie.
Ak chcete preskúmať ADC hlboko, môžete si prečítať náš predchádzajúci návod o ADC. ADC sú dostupné vo forme integrovaných obvodov a tiež mikrokontroléry sa v dnešnej dobe dodávajú so zabudovaným ADC. V tomto tutoriále použijeme zabudovaný ADC Atmega16. Poďme diskutovať o vstavanom ADC Atmega16.
ADC v mikrokontroléri AVR Atmega16
Atmega16 má vstavaný 10-bitový a 8-kanálový ADC. 10 bit zodpovedá tomu, ak je vstupné napätie 0-5 V, potom sa rozdelí na 10 bitovú hodnotu, tj. 1024 úrovní diskrétnych analógových hodnôt (2 10 = 1024). Teraz 8-kanálový zodpovedá vyhradeným 8 pinom ADC na Atmega16, kde každý pin môže čítať analógové napätie. Kompletný PortA (GPIO33-GPIO40) je určený pre prevádzku ADC. V predvolenom nastavení sú piny PORTA všeobecné piny IO, čo znamená, že piny portov sú multiplexované. Aby sme mohli tieto piny použiť ako piny ADC, budeme musieť nakonfigurovať určité registre určené na riadenie ADC. Preto sú registre známe ako kontrolné registre ADC. Poďme diskutovať o tom, ako nastaviť tieto registre, aby sme začali pracovať so zabudovaným ADC.
Kolíky ADC v Atmega16
Súčasti sú povinné
- Integrovaný obvod mikrokontroléra Atmega16
- Krištáľový oscilátor 16 MHz
- Dva kondenzátory 100nF
- Dva kondenzátory 22pF
- Tlačidlo
- Prepojovacie drôty
- Nepál
- USBASP v2.0
- LED (ľubovoľná farba)
Schéma zapojenia
Nastavenie riadiacich registrov ADC v Atmega16
1. Register ADMUX (register výberu multiplexora ADC) :
Register ADMUX slúži na výber kanálu ADC a výber referenčného napätia. Nasledujúci obrázok zobrazuje prehľad registra ADMUX. Popis je vysvetlený nižšie.
- Bit 0-4: bity výberu kanála.
MUX4 |
MUX3 |
MUX2 |
MUX1 |
MUX0 |
Je vybraný kanál 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: Používa sa na nastavenie výsledku doprava alebo doľava.
ADLAR |
Popis |
0 |
Správne upravte výsledok |
1 |
Doľava upravte výsledok |
- Bit 6-7: Používajú sa na výber referenčného napätia pre ADC.
REFS1 |
REFS0 |
Voľba referenčného napätia |
0 |
0 |
AREF, vnútorný Vref je vypnutý |
0 |
1 |
AVcc s externým kondenzátorom na kolíku AREF |
1 |
0 |
Vyhradené |
1 |
1 |
Interná referencia napätia 2,56 s externým kondenzátorom na kolíku AREF |
Teraz začnite konfigurovať tieto registračné bity v programe tak, aby sme dostali interné čítanie ADC a výstup na všetky piny PORTC.
Programovanie Atmega16 pre ADC
Kompletný program je uvedený nižšie. Napáľte program v Atmega16 pomocou programu JTAG a Atmel studio a otáčaním potenciometra zmeňte hodnotu ADC. Tu je kód vysvetlený riadok po riadku.
Začnite vytvorením jednej funkcie na čítanie prevedenej hodnoty ADC. Potom zadajte hodnotu kanála ako 'chnl' vo funkcii ADC_read .
unsigned int ADC_read (unsigned char chnl)
Hodnoty kanálov musia byť medzi 0 až 7, pretože máme iba 8 kanálov ADC.
chnl = chnl & 0b00000111;
Napísaním „40“, tj. „01000000“ do registra ADMUX, sme vybrali PORTA0 ako ADC0, kde bude pripojený analógový vstup pre digitálnu konverziu.
ADMUX = 0x40;
Teraz tento krok zahŕňa proces konverzie ADC, kde zápisom JEDNÉHO na bit ADSC v registri ADCSRA začneme konverziu. Potom počkajte, kým bit ADIF vráti hodnotu, keď je konverzia dokončená. Konverziu zastavíme tak, že do registra ADCSRA napíšeme „1“ na bit ADIF. Po dokončení konverzie vráťte hodnotu ADC.
ADCSRA - = (1 <
Tu sa vyberie interné referenčné napätie ADC nastavením bitu REFS0. Potom povoľte ADC a zvoľte prescaler ako 128.
ADMUX = (1 <
Teraz uložte hodnotu ADC a pošlite ju do PORTC. V PORTC je pripojených 8 LED, ktoré zobrazujú digitálny výstup v 8 bitovom formáte. Príklad, ktorý sme si ukázali, mení napätie medzi 0V až 5V pomocou jednej 1K banky.
i = ADC_read (0); PORTC = i;
Digitálny multimetr sa používa na zobrazenie analógového vstupného napätia v kolíku ADC a 8 LED na zobrazenie zodpovedajúcej 8-bitovej hodnoty výstupu ADC. Stačí otočiť potenciometer a vidieť zodpovedajúci výsledok na multimetri aj na svietiacich LED.
Celý kód a pracovné video sú uvedené nižšie.