- Kas yra ADC (analoginė į skaitmeninę konversiją)
- ADC AVR mikrovaldiklyje „Atmega16“
- Būtini komponentai
- Grandinės schema
- ADC valdymo registrų nustatymas „Atmega16“
- „Atmega16“ programavimas ADC
Vienas bendras bruožas, naudojamas beveik kiekvienoje įterptojoje programoje, yra ADC modulis (analoginis į skaitmeninį keitiklį). Šie analoginiai – skaitmeniniai keitikliai gali nuskaityti įtampą iš analoginių jutiklių, tokių kaip temperatūros jutiklis, pakreipimo jutiklis, srovės jutiklis, „Flex“ jutiklis ir kt. Šioje pamokoje sužinosime, kas yra ADC ir kaip naudoti ADC sistemoje „Atmega16“. Šioje pamokoje yra mažo potenciometro prijungimas prie „Atmega16“ ADC kaiščio ir 8 šviesos diodai naudojami rodyti kintančią ADC išėjimo vertės įtampą atsižvelgiant į ADC įvesties vertės pokyčius.
Anksčiau mes paaiškinome ADC kituose mikrovaldikliuose:
- Kaip naudoti ADC sistemoje ARM7 LPC2148 - analoginės įtampos matavimas
- Kaip naudoti ADC sistemoje STM32F103C8 - analoginės įtampos matavimas
- Kaip naudoti ADC MSP430G2 - Analoginės įtampos matavimas
- Kaip naudoti ADC „Arduino Uno“?
- Naudojant PIC mikrovaldiklio ADC modulį su MPLAB ir XC8
Kas yra ADC (analoginė į skaitmeninę konversiją)
ADC reiškia analoginį ir skaitmeninį keitiklį. Elektronikoje ADC yra įtaisas, kuris analoginį signalą, pavyzdžiui, srovę ir įtampą, paverčia skaitmeniniu kodu (dvejetainiu pavidalu). Realiame pasaulyje dauguma signalų yra analogiški ir bet kuris mikrovaldiklis ar mikroprocesorius supranta dvejetainę ar skaitmeninę kalbą (0 arba 1). Taigi, kad mikrovaldikliai suprastų analoginius signalus, turime konvertuoti šiuos analoginius signalus į skaitmeninę formą. ADC tiksliai tai daro už mus. Skirtingoms programoms yra daugybė ADC tipų. Keletas populiarių ADC yra blykstė, nuoseklus derinimas ir sigma-delta.
Pigiausias ADC tipas yra nuoseklus artinimas ir šioje pamokoje bus naudojamas nuoseklus artinimas ADC. Sėkmingo artėjimo ADC tipe nuosekliai generuojama skaitmeninių kodų serija, kiekviena iš jų atitinka fiksuotą analoginį lygį. Vidinis skaitiklis naudojamas palyginti su konvertuojamu analoginiu signalu. Generavimas sustabdomas, kai analoginis lygis tampa tik didesnis nei analoginis signalas. Skaitmeninis kodas atitinka analoginį lygį - tai pageidaujamas skaitmeninis analoginio signalo atvaizdavimas. Tai užbaigia mūsų mažą paaiškinimą apie nuoseklų artinimą.
Jei norite giliai ištirti ADC, galite kreiptis į mūsų ankstesnę ADC pamoką. ADC yra IC formos, taip pat mikrovaldikliai yra integruoti ADC šiais laikais. Šioje pamokoje naudosime integruotą „Atmega16“ ADC. Aptarkime apie įmontuotą „Atmega16“ ADC.
ADC AVR mikrovaldiklyje „Atmega16“
„Atmega16“ turi įmontuotą 10 bitų ir 8 kanalų ADC. 10 bitų atitinka tai, kad jei įėjimo įtampa yra 0–5 V, ji bus padalinta į 10 bitų vertę, ty 1024 atskirų analoginių verčių lygius (2 10 = 1024). Dabar 8 kanalai atitinka „Atmega16“ skirtus 8 ADC kaiščius, kur kiekvienas kaištis gali nuskaityti analoginę įtampą. Visas „PortA“ (GPIO33-GPIO40) skirtas ADC darbui. Pagal numatytuosius nustatymus PORTA kaiščiai yra bendrieji IO kaiščiai, tai reiškia, kad prievado kaiščiai yra multipleksuojami. Norėdami naudoti šiuos kaiščius kaip ADC kaiščius, turėsime sukonfigūruoti tam tikrus registrus, skirtus ADC valdymui. Štai kodėl registrai yra vadinami ADC valdymo registrais. Aptarkime, kaip sukonfigūruoti šiuos registrus, kad pradėtų veikti integruotas ADC.
ADC kaiščiai „Atmega16“
Būtini komponentai
- „Atmega16“ mikrovaldiklio IC
- 16Mhz kristalinis osciliatorius
- Du 100nF kondensatoriai
- Du 22pF kondensatoriai
- Paspauskite mygtuką
- Šuolių laidai
- Bandomoji Lenta
- „USBASP v2.0“
- Led (bet kokios spalvos)
Grandinės schema
ADC valdymo registrų nustatymas „Atmega16“
1. ADMUX registras (ADC „Multiplexer Selection Register“) :
ADMUX registras skirtas ADC kanalui pasirinkti ir atskaitos įtampai pasirinkti. Žemiau esančiame paveikslėlyje parodyta ADMUX registro apžvalga. Aprašymas paaiškintas žemiau.
- 0-4 bitai : kanalo pasirinkimo bitai.
MUX4 |
MUX3 |
MUX2 |
MUX1 |
MUX0 |
Pasirinktas ADC kanalas |
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 bitas: jis naudojamas rezultatui koreguoti į dešinę arba į kairę.
ADLAR |
apibūdinimas |
0 |
Dešinėn sureguliuokite rezultatą |
1 |
Kairėje pakoreguoti rezultatą |
- 6-7 bitai: Jie naudojami ADC etaloninei įtampai pasirinkti.
NUORODOS1 |
REFS0 |
Įtampos atskaitos pasirinkimas |
0 |
0 |
AREF, „Internal Vref“ išjungtas |
0 |
1 |
AVcc su išoriniu kondensatoriumi prie AREF kaiščio |
1 |
0 |
Rezervuota |
1 |
1 |
Vidinė 2,56 įtampos atskaitos su išoriniu kondensatoriumi AREF kaiščiu |
Dabar pradėkite konfigūruoti šiuos registro bitus programoje taip, kad gautume vidinį ADC skaitymą ir išvestį į visus PORTC kaiščius.
„Atmega16“ programavimas ADC
Visa programa pateikiama žemiau. Įrašykite programą „Atmega16“, naudodami „JTAG“ ir „Atmel“ studiją, ir pasukite potenciometrą, kad pakeistumėte ADC vertę. Čia kodas paaiškinamas eilutėmis.
Pradėkite nuo vienos funkcijos, skirtos nuskaityti ADC konvertuotą vertę. Tada pereiti kanalo vertę "CHNL" į ADC_read funkcija.
nepasirašytas int ADC_read (nepasirašytas char chnl)
Kanalo vertės turi būti nuo 0 iki 7, nes turime tik 8 ADC kanalus.
chnl = chnl & 0b00000111;
Parašę „40“, ty „01000000“ į ADMUX registrą, mes pasirinkome PORTA0 kaip ADC0, kur analoginis įėjimas bus prijungtas skaitmeniniam keitimui.
ADMUX = 0x40;
Dabar šis žingsnis apima ADC konversijos procesą, kai ADCSRA registre įrašydami ONE į ADSC Bit pradedame konversiją. Po to palaukite, kol ADIF bitai grąžins vertę, kai konversija bus baigta. Mes sustabdome konversiją, ADCSRA registre ADIF bituose įrašydami „1“. Kai konversija bus baigta, grąžinkite ADC vertę.
ADCSRA - = (1 <
Čia parenkama vidinė ADC etaloninė įtampa nustatant REFS0 bitą. Po to įjunkite ADC ir pasirinkite preskalerį kaip 128.
ADMUX = (1 <
Dabar išsaugokite ADC vertę ir nusiųskite ją į PORTC. „PORTC“ yra prijungti 8 šviesos diodai, rodantys skaitmeninę išvestį 8 bitų formatu. Mūsų parodytas pavyzdys keičia įtampą nuo 0 V iki 5 V, naudojant vieną 1K puodą.
i = ADC_read (0); PORTC = i;
Skaitmeninis multimetras naudojamas rodyti analoginę įėjimo įtampą ADC kontakte, o 8 šviesos diodai naudojami atitinkamai 8 bitų ADC išvesties vertei rodyti. Tiesiog pasukite potenciometrą ir pamatykite atitinkamą rezultatą ant multimetro ir šviečiančių šviesos diodų.
Visas kodas ir darbinis vaizdo įrašas pateikiami žemiau.