- Kas ir ADC (Analog to Digital Conversion)
- ADC AVR mikrokontrollerī Atmega16
- Nepieciešamās sastāvdaļas
- Ķēdes shēma
- ADC vadības reģistru iestatīšana vietnē Atmega16
- Atmega16 programmēšana ADC
Viena kopīga iezīme, kas tiek izmantota gandrīz katrā iegultā lietojumprogrammā, ir ADC modulis (Analog to Digital Converter). Šie analogie uz ciparu pārveidotāji var nolasīt spriegumu no analogiem sensoriem, piemēram, temperatūras sensora, slīpuma sensora, strāvas sensora, elastības sensora utt. Šajā apmācībā mēs uzzināsim, kas ir ADC un kā lietot ADC programmā Atmega16. Šajā apmācībā ietilpst neliela potenciometra pievienošana Atmega16 ADC tapai, un 8 LED tiek izmantoti, lai parādītu ADC izejas vērtības mainīgo spriegumu attiecībā pret ADC ievades vērtības izmaiņām.
Iepriekš mēs izskaidrojām ADC citos mikrokontrolleros:
- Kā izmantot ADC ARM7 LPC2148 - Analogā sprieguma mērīšana
- Kā ADC lietot STM32F103C8 - Analogā sprieguma mērīšana
- Kā lietot ADC programmā MSP430G2 - analogā sprieguma mērīšana
- Kā lietot ADC Arduino Uno?
- Izmantojot PIC mikrokontrollera ADC moduli ar MPLAB un XC8
Kas ir ADC (Analog to Digital Conversion)
ADC nozīmē Analog to Digital Converter. Elektronikā ADC ir ierīce, kas pārveido analogo signālu, piemēram, strāvu un spriegumu, ciparu kodā (binārā formā). Reālajā pasaulē lielākā daļa signālu ir analogie, un jebkurš mikrokontrolleris vai mikroprocesors saprot bināro vai digitālo valodu (0 vai 1). Tātad, lai mikrokontrolleri saprastu analogos signālus, šie analogie signāli mums jāpārvērš digitālā formā. ADC tieši to dara mūsu vietā. Dažādām lietojumprogrammām ir pieejami daudzi ADC veidi. Daži populāri ADC ir zibspuldze, secīga aproksimācija un sigma-delta.
Vislētākais ADC veids ir secīga aproksimācija, un šajā apmācībā tiks izmantota secīga aproksimācija. ADC secīgas aproksimācijas tipā secīgi tiek ģenerēta virkne digitālo kodu, kas katrs atbilst fiksētam analogajam līmenim. Iekšējais skaitītājs tiek izmantots, lai salīdzinātu ar pārveidojamo analogo signālu. Paaudzēšana tiek pārtraukta, kad analogais līmenis kļūst tikai lielāks nekā analogais signāls. Digitālais kods atbilst analogajam līmenim ir vēlamais analogā signāla digitālais attēlojums. Tas pabeidz mūsu mazo paskaidrojumu par secīgu tuvināšanu.
Ja vēlaties izpētīt ADC daudz dziļāk, varat atsaukties uz mūsu iepriekšējo apmācību par ADC. ADC ir pieejami IC formā, un mūsdienās mikrokontrolleriem ir iebūvēts ADC. Šajā apmācībā mēs izmantosim iebūvēto Atmega16 ADC. Apspriedīsimies par Atmega16 iebūvēto ADC.
ADC AVR mikrokontrollerī Atmega16
Atmega16 ir iebūvēts 10 bitu un 8 kanālu ADC. 10 biti atbilst tam, ja ieejas spriegums ir 0–5 V, tas tiks sadalīts 10 bitu vērtībā, ti, 1024 diskrēto analogo vērtību līmeņos (2 10 = 1024). Tagad 8 kanāli atbilst veltītajiem 8 ADC kontaktiem Atmega16, kur katra tapa var nolasīt analogo spriegumu. Pilnīga PortA (GPIO33-GPIO40) ir paredzēta ADC darbībai. Pēc noklusējuma PORTA tapas ir vispārīgas IO tapas, tas nozīmē, ka porta tapas ir multipleksētas. Lai šīs tapas izmantotu kā ADC tapas, mums būs jākonfigurē noteikti ADC vadībai veltīti reģistri. Tāpēc reģistri ir pazīstami kā ADC vadības reģistri. Ļaujiet mums apspriest, kā iestatīt šos reģistrus, lai sāktu darboties iebūvētajā ADC.
ADC tapas vietnē Atmega16
Nepieciešamās sastāvdaļas
- Atmega16 mikrokontrolleru IC
- 16Mhz kristāla oscilators
- Divi 100nF kondensatori
- Divi 22pF kondensatori
- Uzspied pogu
- Džemperu vadi
- Maizes dēlis
- USBASP v2.0
- Led (jebkura krāsa)
Ķēdes shēma
ADC vadības reģistru iestatīšana vietnē Atmega16
1. ADMUX reģistrs (ADC multipleksētāja atlases reģistrs) :
ADMUX reģistrs ir paredzēts ADC kanāla izvēlei un atsauces sprieguma izvēlei. Zemāk redzamajā attēlā parādīts ADMUX reģistra pārskats. Apraksts ir paskaidrots zemāk.
- Bits 0-4: kanālu izvēles biti.
MUX4 |
MUX3 |
MUX2 |
MUX1 |
MUX0 |
Atlasīts ADC kanāls |
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. bits: to izmanto, lai pielāgotu rezultātu pa labi vai pa kreisi.
ADLAR |
Apraksts |
0 |
Pielāgojiet rezultātu pa labi |
1 |
Pa kreisi pielāgojiet rezultātu |
- Bits 6-7: tos izmanto, lai izvēlētos ADC standartspriegumu.
ATSAUKSMES1 |
REFS0 |
Sprieguma atskaites izvēle |
0 |
0 |
AREF, iekšējais Vref ir izslēgts |
0 |
1 |
AVcc ar ārējo kondensatoru pie AREF tapas |
1 |
0 |
Rezervēts |
1 |
1 |
Iekšējā 2,56 sprieguma atskaite ar ārējo kondensatoru pie AREF tapas |
Tagad sāciet konfigurēt šos reģistru bitus programmā tā, lai mēs saņemtu iekšējo ADC lasījumu un izvadi uz visām PORTC tapām.
Atmega16 programmēšana ADC
Pilna programma ir dota zemāk. Iededziniet programmu Atmega16, izmantojot JTAG un Atmel studio, un pagrieziet potenciometru, lai mainītu ADC vērtību. Šeit kods tiek skaidrots pa rindai.
Sāciet ar vienas funkcijas izveidi, lai nolasītu ADC konvertēto vērtību. Tad iet kanāla vērtība, "chnl" in ADC_read funkciju.
neparakstīts int ADC_read (neparakstīts char chnl)
Kanālu vērtībām jābūt no 0 līdz 7, jo mums ir tikai 8 ADC kanāli.
chnl = chnl & 0b00000111;
Uzrakstot ADMUX reģistrā “40”, ti, “01000000”, mēs izvēlējāmies PORTA0 kā ADC0, kur analogajai ieejai tiks pievienota digitālā pārveidošana.
ADMUX = 0x40;
Tagad šis solis ir saistīts ar ADC pārveidošanas procesu, kur, ierakstot ONE uz ADSC Bit ADCSRA reģistrā, mēs sākam pārveidošanu. Pēc tam gaidiet, līdz ADIF bits atgūs vērtību, kad konvertēšana ir pabeigta. Mēs pārtraucam pārveidošanu, ADCSRA reģistrā ierakstot “1” pie ADIF Bit. Kad konvertēšana ir pabeigta, atgrieziet ADC vērtību.
ADCSRA - = (1 <
Šeit tiek izvēlēts iekšējais ADC atsauces spriegums, iestatot REFS0 bitu. Pēc tam iespējojiet ADC un atlasiet preskaler kā 128.
ADMUX = (1 <
Tagad saglabājiet ADC vērtību un nosūtiet to uz PORTC. PORTC ir pievienotas 8 gaismas diodes, kas parādīs digitālo izvadi 8 bitu formātā. Mūsu parādītais piemērs maina spriegumu no 0V līdz 5V, izmantojot vienu 1K pot.
i = ADC_lasījums (0); PORTC = i;
Digitālais multimetrs tiek izmantots, lai parādītu analogā ieejas spriegumu ADC tapā, un 8 gaismas diodes tiek izmantotas, lai parādītu atbilstošo ADC izejas 8 bitu vērtību. Vienkārši pagrieziet potenciometru un skatiet atbilstošo rezultātu uz multimetra, kā arī uz kvēlojošām gaismas diodēm.
Pilns kods un darba video ir norādīts zemāk.