- Mi az ADC (analóg-digitális átalakítás)
- ADC az AVR mikrokontroller Atmega16-ban
- Szükséges alkatrészek
- Kördiagramm
- ADC vezérlő nyilvántartások beállítása az Atmega16-ban
- Atmega16 programozása az ADC számára
Szinte minden beágyazott alkalmazásban használt egyik közös jellemző az ADC modul (Analog to Digital Converter). Ezek analóg-digitális átalakító tud olvasni feszültségű analóg érzékelők, mint Hőmérséklet-érzékelő, Hajlásérzékelő Current érzékelő szenzor Flex stb Ebben a leckében megtanuljuk, Mi az ADC és hogyan kell használni az ADC Atmega16. Ez az oktatóanyag tartalmaz egy kis potenciométer csatlakoztatását az Atmega16 ADC tűjéhez, és 8 LED-et használnak az ADC kimeneti érték változó feszültségének megjelenítésére az ADC bemeneti értékének változásához képest.
Korábban más mikrovezérlőkben ismertettük az ADC-t:
- Az ADC használata az ARM7 LPC2148-ban - Analóg feszültség mérése
- Az ADC használata az STM32F103C8-ban - Analóg feszültség mérése
- Az ADC használata az MSP430G2-ben - Analóg feszültség mérése
- Hogyan kell használni az ADC-t az Arduino Uno-ban?
- A PIC mikrokontroller ADC moduljának használata MPLAB-mal és XC8-mal
Mi az ADC (analóg-digitális átalakítás)
Az ADC rövidítése az analóg-digitális átalakító. Az elektronikában az ADC olyan eszköz, amely az analóg jelet, mint az áramot és a feszültséget, digitális kóddá alakítja (bináris formában). A valós világban a jelek többsége analóg, és bármely mikrovezérlő vagy mikroprocesszor megérti a bináris vagy digitális nyelvet (0 vagy 1). Tehát ahhoz, hogy a mikrovezérlők megértsék az analóg jeleket, ezeket az analóg jeleket digitális formává kell alakítanunk. Az ADC pontosan ezt teszi meg helyettünk. Sokféle ADC érhető el különböző alkalmazásokhoz. Kevés népszerű ADC a flash, az egymást követő közelítés és a sigma-delta.
Az ADC legolcsóbb típusa a Szekvenciális -Közelítés, és ebben az oktatóanyagban Szekvenciális-Közelítő ADC-t fogunk használni. Az ADC szekvenciális közelítésű típusában sorozatosan generálnak digitális kódok sorozatát, amelyek mindegyike fix analóg szintnek felel meg. Belső számlálót használnak az átalakítás alatt álló analóg jel összehasonlításához. A generálás leáll, ha az analóg szint éppen nagyobb lesz, mint az analóg jel. A digitális kód az analóg szintnek felel meg, az analóg jel kívánt digitális ábrázolása. Ezzel befejezzük az egymás utáni közelítéssel kapcsolatos kis magyarázatunkat.
Ha nagyon mélyre akarja fedezni az ADC-t, akkor tekintse meg korábbi ADC-oktató anyagunkat. Az ADC-k IC-k formájában kaphatók, és a mikrovezérlők manapság beépített ADC-kkel is rendelkeznek. Ebben az oktatóanyagban az Atmega16 beépített ADC-jét fogjuk használni. Beszéljünk az Atmega16 beépített ADC-jéről.
ADC az AVR mikrokontroller Atmega16-ban
Az Atmega16 beépített 10 bites és 8 csatornás ADC-vel rendelkezik. A 10 bit megfelel annak, hogy ha a bemeneti feszültség 0-5V, akkor 10 bit értékre, azaz 1024 diszkrét analóg értékre osztjuk fel (2 10 = 1024). Most a 8 csatornás megfelel az Atmega16 8 dedikált csatlakozójának, ahol az egyes csapok leolvashatják az analóg feszültséget. A teljes PortA (GPIO33-GPIO40) dedikált az ADC működéséhez. Alapértelmezés szerint a PORTA csapok általános IO csapok, ez azt jelenti, hogy a port csapok multiplexeltek. Ahhoz, hogy ezeket a csapokat ADC csapokként használhassuk, konfigurálnunk kell bizonyos regisztereket, amelyek dedikáltak az ADC vezérléshez. Ezért a regisztereket ADC vezérlő regisztereknek nevezik. Beszéljük meg, hogyan állítsák be ezeket a regisztereket a beépített ADC működésének megkezdéséhez.
ADC csapok az Atmega16-ban
Szükséges alkatrészek
- Atmega16 mikrokontroller IC
- 16Mhz kristályoszcillátor
- Két 100nF kondenzátor
- Két 22pF kondenzátor
- Nyomógomb
- Jumper huzalok
- Kenyérlemez
- USBASP v2.0
- Led (bármilyen színű)
Kördiagramm
ADC vezérlő nyilvántartások beállítása az Atmega16-ban
1. ADMUX regiszter (ADC Multiplexer Selection Register) :
Az ADMUX regiszter az ADC csatorna kiválasztására és a referenciafeszültség kiválasztására szolgál. Az alábbi kép az ADMUX regiszter áttekintését mutatja. A leírást az alábbiakban ismertetjük.
- 0-4. Bit: csatornaválasztó bitek.
MUX4 |
MUX3 |
MUX2 |
MUX1 |
MUX0 |
ADC csatorna kiválasztva |
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 |
- 5. bit: Az eredmény jobbra vagy balra történő beállítására szolgál.
ADLAR |
Leírás |
0 |
Jobbra állítsa be az eredményt |
1 |
Balra állíthatja az eredményt |
- 6-7. Bit: Az ADC referenciafeszültségének kiválasztására szolgálnak.
REFS1 |
REFS0 |
Feszültség referencia kiválasztása |
0 |
0 |
AREF, a belső Vref ki van kapcsolva |
0 |
1 |
AVcc külső kondenzátorral az AREF tűnél |
1 |
0 |
Fenntartott |
1 |
1 |
Belső 2,56 feszültségreferencia külső kondenzátorral az AREF csapon |
Most kezdje el konfigurálni ezeket a regiszterbiteket a programban úgy, hogy megkapjuk a belső ADC olvasást és kimenetet a PORTC összes lábához.
Atmega16 programozása az ADC számára
A teljes program alább található. Égesse el a programot az Atmega16-ban a JTAG és az Atmel stúdió segítségével, és forgassa el a potenciométert az ADC-érték változtatásához. Itt a kódot soronként magyarázzák.
Először hozzon létre egy funkciót az ADC-konvertált érték beolvasására. Ezután adja át a csatorna értékét 'chnl' néven az ADC_read függvényben.
unsigned int ADC_read (unsigned char chnl)
A csatornaértékeknek 0 és 7 között kell lenniük, mivel csak 8 ADC csatornánk van.
chnl = chnl & 0b00000111;
A '40' azaz '01000000' beírásával az ADMUX regiszterbe a PORTA0-t választottuk ADC0-nak, ahol az analóg bemenetet digitális átalakításhoz csatlakoztatjuk.
ADMUX = 0x40;
Ez a lépés magában foglalja az ADC konverziós folyamatot, ahol a ONE-t az ADSC Bit-be írva az ADCSRA regiszterbe megkezdjük az átalakítást. Ezután várja meg, amíg az ADIF bit visszatér az értékre, amikor az átalakítás befejeződött. Az átalakítást úgy állítjuk le, hogy az ADCSRA regiszter ADIF bitjére írjuk az '1' értéket. Amikor az átalakítás befejeződött, adja vissza az ADC értéket.
ADCSRA - = (1 <
Itt a belső ADC referenciafeszültséget a REFS0 bit beállításával választjuk meg. Ezt követően engedélyezze az ADC-t, és válassza az előkőmérőt 128-nak.
ADMUX = (1 <
Most mentse el az ADC értéket, és küldje el a PORTC-nak. A PORTC-ben 8 LED van csatlakoztatva, amelyek a digitális kimenetet 8 bites formátumban mutatják. Az általunk bemutatott példa 0 V és 5 V közötti feszültséget változtatja 1K pot segítségével.
i = ADC_read (0); PORTC = i;
A digitális multiméter az analóg bemeneti feszültség ADC-érintkezõben történõ kijelzésére szolgál, és 8 LED-el a megfelelõ 8 bites ADC-kimenet megjelenítésére. Csak forgassa el a potenciométert, és nézze meg a megfelelő eredményt a multiméteren, valamint az izzó LED-eken.
A teljes kódot és a működő videót az alábbiakban adjuk meg.