- Ano ang ADC (Analog sa Digital Conversion)
- ADC sa AVR Microcontroller Atmega16
- Kinakailangan ang Mga Bahagi
- Diagram ng Circuit
- Pagse-set up ng Mga Rehistro ng kontrol sa ADC sa Atmega16
- Programming Atmega16 para sa ADC
Ang isang karaniwang tampok na ginagamit sa halos bawat naka-embed na application ay ang ADC module (Analog to Digital Converter). Ang Mga Analog na ito sa mga digital na Converter ay maaaring basahin ang boltahe mula sa mga analog sensor tulad ng Temperatura sensor, Ikiling sensor, Kasalukuyang sensor, Flex sensor atbp Sa tutorial na ito matututunan natin Ano ang ADC at Paano gamitin ang ADC sa Atmega16. Ang tutorial na ito ay nagsasama ng pagkonekta ng isang maliit na potensyomiter sa ADC pin ng Atmega16 at 8 LED's ay ginagamit upang ipakita ang pagbabago ng boltahe ng halaga ng output ng ADC na patungkol sa pagbabago sa halaga ng pag-input ng ADC.
Dati ipinaliwanag namin ang ADC sa iba pang mga microcontroller:
- Paano gamitin ang ADC sa ARM7 LPC2148 - Pagsukat ng Boltahe ng Analog
- Paano gamitin ang ADC sa STM32F103C8 - Pagsukat ng Boltahe ng Analog
- Paano gamitin ang ADC sa MSP430G2 - Pagsukat ng Boltahe ng Analog
- Paano Gumamit ng ADC sa Arduino Uno?
- Paggamit ng ADC Module ng PIC Microcontroller na may MPLAB at XC8
Ano ang ADC (Analog sa Digital Conversion)
Ang ADC ay nangangahulugang Analog to Digital Converter. Sa electronics, ang isang ADC ay isang aparato na nagpapalit ng isang analog signal tulad ng kasalukuyang at boltahe sa digital code (binary form). Sa totoong mundo ang karamihan sa mga signal ay analog at anumang microcontroller o microprocessor ay nauunawaan ang binary o digital na wika (0 o 1). Kaya, upang maunawaan ng mga microcontroller ang mga analog signal, kailangan nating baguhin ang mga analog signal na ito sa digital form. Eksaktong ginagawa ito ng ADC para sa amin. Maraming uri ng ADC na magagamit para sa iba't ibang mga application. Ilang mga sikat na ADC's ang flash, sunud-sunod na approximation at sigma-delta.
Ang pinaka-murang uri ng ADC ay Sunud-sunod at sa tutorial na ito Magamit ang sunud-sunod na ADC. Sa isang sunud-sunod na uri ng ADC, isang serye ng mga digital code, bawat isa ay tumutugma sa isang antas ng pag-aayos ng analog, ay sunod-sunod na nabuo. Ginagamit ang isang panloob na counter upang ihambing sa analog signal sa ilalim ng conversion. Huminto ang henerasyon kapag ang antas ng analog ay nagiging mas malaki lamang kaysa sa analog signal. Ang digital code ay tumutugma sa antas ng analog ay ang nais na digital na representasyon ng analog signal. Tinatapos nito ang aming munting paliwanag sa sunud-sunod na pagtatantya.
Kung nais mong galugarin ang ADC nang mas malalim pagkatapos ay maaari kang mag-refer sa aming nakaraang tutorial sa ADC. Ang ADC ay magagamit sa anyo ng IC's at gayundin ang mga microcontroller ay may kasamang inbuilt na ADC sa panahong ito. Sa tutorial na ito gagamitin namin ang inbuilt ADC ng Atmega16. Talakayin natin ang tungkol sa hindi naitayong ADC ng Atmega16.
ADC sa AVR Microcontroller Atmega16
Ang Atmega16 ay may isang nakapaloob na 10 bit at 8-channel ADC. 10 bit ay tumutugma sa na kung ang input boltahe ay 0-5V pagkatapos ito ay nahahati sa 10 bit halaga ie 1024 antas ng discrete Analog halaga (2 10 = 1024). Ngayon ang 8-channel ay tumutugma sa nakatuon na 8 ADC Pins sa Atmega16 kung saan maaaring mabasa ng bawat pin ang boltahe ng Analog. Ang kumpletong PortA (GPIO33-GPIO40) ay nakatuon para sa operasyon ng ADC. Bilang default, ang mga PORTA na pin ay pangkalahatang mga pin ng IO, nangangahulugan ito na ang mga port pin ay multiplexed. Upang magamit ang mga pin na ito bilang mga ADC pin magkakaroon kami upang i-configure ang ilang mga rehistro na nakatuon sa kontrol ng ADC. Ito ang dahilan kung bakit ang mga rehistro ay kilala bilang mga rehistro ng kontrol sa ADC. Talakayin natin kung paano i-set up ang mga rehistro na ito upang simulan ang paggana ng inbuilt ADC.
Mga ADC Pins sa Atmega16
Kinakailangan ang Mga Bahagi
- Atmega16 Microcontroller IC
- 16Mhz Crystal Oscillator
- Dalawang 100nF Capacitor
- Dalawang 22pF Capacitor
- Push Button
- Jumper Wires
- Breadboard
- USBASP v2.0
- Led (Anumang Kulay)
Diagram ng Circuit
Pagse-set up ng Mga Rehistro ng kontrol sa ADC sa Atmega16
1. Rehistro ng ADMUX (Rehistro ng Pagpili ng Multiplexer ng ADC) :
Ang Rehistro ng ADMUX ay para sa pagpili ng ADC channel at pagpili ng boltahe ng sanggunian. Ipinapakita ng larawan sa ibaba ang pangkalahatang-ideya ng rehistro ng ADMUX. Ang paglalarawan ay ipinaliwanag sa ibaba.
- Bit 0-4: mga pagpipilian sa pagpili ng channel.
MUX4 |
MUX3 |
MUX2 |
MUX1 |
MUX0 |
Napili ang ADC Channel |
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: Ginagamit ito upang ayusin ang resulta sa kanan o kaliwa.
ADLAR |
Paglalarawan |
0 |
Tamang ayusin ang resulta |
1 |
Kaliwa ayusin ang resulta |
- Bit 6-7: Ginagamit ang mga ito upang piliin ang boltahe ng sanggunian para sa ADC.
REFS1 |
REFS0 |
Pagpili ng Sanggunian ng Boltahe |
0 |
0 |
AREF, naka-off ang Panloob na Vref |
0 |
1 |
Ang AVcc na may panlabas na kapasitor sa AREF pin |
1 |
0 |
Nakareserba |
1 |
1 |
Panloob na 2.56 Boltahe na Sanggunian na may panlabas na kapasitor sa AREF Pin |
Simulang i-configure ang mga rehistro na bit na ito sa programa na makakakuha kami ng panloob na ADC na mabasa at ma-output sa Lahat ng mga Pin ng PORTC.
Programming Atmega16 para sa ADC
Ang kumpletong programa ay ibinibigay sa ibaba. Sunugin ang programa sa Atmega16 gamit ang JTAG at Atmel studio at paikutin ang potensyomiter upang maiiba ang halaga ng ADC. Dito, ang code ay ipinaliwanag linya sa pamamagitan ng linya.
Magsimula sa paggawa ng isang pagpapaandar upang mabasa ang na-convert na halaga ng ADC. Pagkatapos ipasa ang halaga ng channel bilang 'chnl' sa pagpapaandar ng ADC_read .
unsigned int ADC_read (unsigned char chnl)
Ang mga halaga ng channel ay dapat nasa pagitan ng 0 hanggang 7 dahil mayroon lamang kaming 8 mga ADC channel.
chnl = chnl & 0b00000111 ;
Sa pamamagitan ng pagsulat ng '40' ie '01000000' sa ADMUX magparehistro pinili namin ang PORTA0 bilang ADC0 kung saan ang Analog input ay konektado para sa digital conversion.
ADMUX = 0x40;
Ngayon ang hakbang na ito ay nagsasangkot ng proseso ng pag-convert ng ADC, kung saan sa pamamagitan ng pagsulat ng ONE sa ADSC Bit sa rehistro ng ADCSRA sinisimulan namin ang conversion. Pagkatapos nito, hintaying ibalik ang halaga ng ADIF kapag nakumpleto ang conversion. Humihinto kami sa conversion sa pamamagitan ng pagsulat ng '1' sa ADIF Bit sa rehistro ng ADCSRA. Kapag nakumpleto ang conversion pagkatapos ay ibalik ang halaga ng ADC.
ADCSRA - = (1 <
Narito ang panloob na boltahe ng sanggunian ng ADC ay napili sa pamamagitan ng pagtatakda ng REFS0 bit. Pagkatapos nito paganahin ang ADC at piliin ang prescaler bilang 128.
ADMUX = (1 <
I-save ngayon ang halaga ng ADC at ipadala ito sa PORTC. Sa PORTC, ang 8 LED ay konektado na magpapakita ng digital output sa 8 bit na format. Ang halimbawa na ipinakita namin ay nag-iiba-iba ng boltahe sa pagitan ng 0V hanggang 5V na gumagamit ng isang 1K na palayok.
i = ADC_read (0); PORTC = i;
Ginagamit ang Digital Multimeter upang maipakita ang analog input boltahe sa ADC Pin at 8 LED's ay ginagamit upang ipakita ang kaukulang 8 Bit na halaga ng output ng ADC. Paikutin lamang ang Potentiometer at tingnan ang kaukulang resulta sa multimeter pati na rin sa mga kumikinang na LED.
Ang kumpletong code at gumaganang video ay ibinibigay sa ibaba.