- Co je ADC (analogově-digitální převod)
- ADC v mikrokontroléru AVR Atmega16
- Požadované komponenty
- Kruhový diagram
- Nastavení řídicích registrů ADC v Atmega16
- Programování Atmega16 pro ADC
Společnou funkcí, která se používá téměř ve všech vestavěných aplikacích, je modul ADC (analogově-digitální převodník). Tyto analogově-digitální převodníky umí číst napětí z analogových snímačů, jako jsou teplotní snímače, snímače náklonu, proudové snímače, snímače Flex atd. V tomto výukovém programu se dozvíte, co je ADC a jak používat ADC v Atmega16. Tento výukový program zahrnuje připojení malého potenciometru k pinu ADC Atmega16 a 8 LED se používá k zobrazení měnícího se napětí výstupní hodnoty ADC s ohledem na změnu vstupní hodnoty ADC.
Dříve jsme vysvětlili ADC v jiných mikrokontrolérech:
- Jak používat ADC v ARM7 LPC2148 - Měření analogového napětí
- Jak používat ADC v STM32F103C8 - Měření analogového napětí
- Jak používat ADC v MSP430G2 - Měření analogového napětí
- Jak používat ADC v Arduino Uno?
- Použití modulu ADC mikrokontroléru PIC s MPLAB a XC8
Co je ADC (analogově-digitální převod)
ADC znamená Analog to Digital Converter. V elektronice je ADC zařízení, které převádí analogový signál, jako je proud a napětí, na digitální kód (binární forma). V reálném světě je většina signálů analogová a jakýkoli mikrokontrolér nebo mikroprocesor rozumí binárnímu nebo digitálnímu jazyku (0 nebo 1). Abychom mikrokontrolérům porozuměli analogovým signálům, musíme tyto analogové signály převést do digitální podoby. ADC to přesně dělá za nás. Existuje mnoho typů ADC pro různé aplikace. Několik populárních ADC je flash, postupná aproximace a sigma-delta.
Nejlevnějším typem ADC je postupná aproximace a v tomto kurzu bude použita postupná aproximace ADC. V typu postupné aproximace ADC se postupně generuje řada digitálních kódů, z nichž každý odpovídá pevné analogové úrovni. K porovnání s převáděným analogovým signálem se používá interní čítač. Generování se zastaví, když se analogová úroveň stane jen větší než analogový signál. Digitální kód odpovídá analogové úrovni je požadovaná digitální reprezentace analogového signálu. Tím končí naše malé vysvětlení postupné aproximace.
Pokud chcete prozkoumat ADC mnohem hlouběji, můžete si přečíst náš předchozí tutoriál o ADC. ADC jsou k dispozici ve formě integrovaných obvodů a také mikrokontroléry se dnes dodávají s vestavěným ADC. V tomto kurzu použijeme vestavěný ADC Atmega16. Pojďme diskutovat o vestavěném ADC Atmega16.
ADC v mikrokontroléru AVR Atmega16
Atmega16 má zabudovaný 10bitový a 8kanálový ADC. 10 bitů odpovídá tomu, že pokud je vstupní napětí 0-5 V, bude rozděleno na 10 bitovou hodnotu, tj. 1024 úrovní diskrétních analogových hodnot (2 10 = 1024). Nyní 8kanálový odpovídá vyhrazeným 8 pinům ADC na Atmega16, kde každý pin může číst analogové napětí. Complete PortA (GPIO33-GPIO40) je určen pro provoz ADC. Ve výchozím nastavení jsou piny PORTA obecné piny IO, to znamená, že piny portů jsou multiplexovány. Aby bylo možné použít tyto piny jako piny ADC, budeme muset nakonfigurovat určité registry vyhrazené pro ovládání ADC. Z tohoto důvodu jsou registry známé jako řídicí registry ADC. Pojďme diskutovat o tom, jak nastavit tyto registry, aby začaly fungovat vestavěný ADC.
Piny ADC v Atmega16
Požadované komponenty
- IC mikrokontroléru Atmega16
- 16MHz krystalový oscilátor
- Dva 100nF kondenzátory
- Dva kondenzátory 22pF
- Stiskněte tlačítko
- Propojovací dráty
- Nepájivá deska
- USBASP v2.0
- LED (libovolná barva)
Kruhový diagram
Nastavení řídicích registrů ADC v Atmega16
1. Registr ADMUX (registr výběru ADC multiplexeru) :
Registr ADMUX slouží k výběru kanálu ADC a výběru referenčního napětí. Níže uvedený obrázek ukazuje přehled registru ADMUX. Popis je vysvětlen níže.
- Bit 0-4: bity pro výběr kanálu.
MUX4 |
MUX3 |
MUX2 |
MUX1 |
MUX0 |
Je vybrán 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žívá se k úpravě výsledku doprava nebo doleva.
ADLAR |
Popis |
0 |
Upravte výsledek správně |
1 |
Vlevo upravte výsledek |
- Bit 6-7: Používají se k výběru referenčního napětí pro ADC.
REFS1 |
REFS0 |
Volba reference napětí |
0 |
0 |
AREF, Internal Vref vypnutý |
0 |
1 |
AVcc s externím kondenzátorem na pinu AREF |
1 |
0 |
Rezervováno |
1 |
1 |
Interní referenční napětí 2,56 s externím kondenzátorem na Pin AREF |
Nyní začněte konfigurovat tyto registrační bity v programu tak, abychom dostali interní ADC čtení a výstup na všechny piny PORTC.
Programování Atmega16 pro ADC
Kompletní program je uveden níže. Vypalte program v Atmega16 pomocí JTAG a Atmel studio a otáčením potenciometru změňte hodnotu ADC. Zde je kód vysvětlen řádek po řádku.
Začněte vytvořením jedné funkce pro čtení převedené hodnoty ADC. Pak předejte hodnotu kanálu jako 'chnl' ve funkci ADC_read .
unsigned int ADC_read (unsigned char chnl)
Hodnoty kanálu musí být mezi 0 až 7, protože máme pouze 8 kanálů ADC.
chnl = chnl & 0b00000111;
Zápisem „40“, tj. „01000000“ do registru ADMUX, jsme vybrali PORTA0 jako ADC0, kde bude připojen analogový vstup pro digitální převod.
ADMUX = 0x40;
Nyní tento krok zahrnuje proces převodu ADC, kde zápisem ONE to ADSC Bit v registru ADCSRA zahájíme převod. Poté počkejte, až bit ADIF vrátí hodnotu po dokončení převodu. Konverzi zastavíme zápisem „1“ na bit ADIF v registru ADCSRA. Po dokončení převodu vraťte hodnotu ADC.
ADCSRA - = (1 <
Zde je vybráno interní referenční napětí ADC nastavením bitu REFS0. Poté povolte ADC a vyberte prescaler jako 128.
ADMUX = (1 <
Nyní uložte hodnotu ADC a odešlete ji do PORTC. V PORTC je připojeno 8 LED, které ukazují digitální výstup v 8 bitovém formátu. Příklad, který jsme si ukázali, mění napětí mezi 0V až 5V pomocí jedné 1K nádoby.
i = ADC_read (0); PORTC = i;
Digitální multimetr se používá k zobrazení analogového vstupního napětí v kolíku ADC a 8 LED se používá k zobrazení odpovídající 8bitové hodnoty výstupu ADC. Stačí otočit potenciometrem a zobrazit odpovídající výsledek na multimetru i na svítících LED.
Kompletní kód a pracovní video jsou uvedeny níže.