Talaan ng mga Nilalaman:

Panimula sa ADC sa AVR Microcontroller - para sa mga Nagsisimula: 14 Hakbang
Panimula sa ADC sa AVR Microcontroller - para sa mga Nagsisimula: 14 Hakbang

Video: Panimula sa ADC sa AVR Microcontroller - para sa mga Nagsisimula: 14 Hakbang

Video: Panimula sa ADC sa AVR Microcontroller - para sa mga Nagsisimula: 14 Hakbang
Video: LDmicro 14: I2C LCD & DS3231 Real-Time Clock (Microcontroller PLC Ladder Programming with LDmicro) 2024, Nobyembre
Anonim
Panimula sa ADC sa AVR Microcontroller | para sa mga nagsisimula pa lamang
Panimula sa ADC sa AVR Microcontroller | para sa mga nagsisimula pa lamang

Sa thid tutorial malalaman mo ang lahat ng ADC sa avr microcontroller

Hakbang 1: Ano ang isang ADC?

Ang isang ADC, o Analog sa Digital Converter, ay nagbibigay-daan sa isa na i-convert ang isang analog boltahe sa isang digital na halaga na maaaring magamit ng isang microcontroller. Maraming mga mapagkukunan ng mga analog signal na maaaring sukatin ng isa. May mga magagamit na mga analog sensor na sumusukat sa temperatura, ilaw ng ilaw, distansya, posisyon, at puwersa, sa ilang pangalan lamang.

Hakbang 2: Paano Magtrabaho ang ADC sa AVR- Microcontroller

Pinapayagan ng AVR ADC ang AVR microcontroller na i-convert ang mga voltages ng analog sa mga digital na halagang walang kaunti sa mga panlabas na bahagi. Nagtatampok ang ATmega8 ng 10-bit na sunud-sunod na pagtatantya sa ADC. Ang ATega8 ay mayroong 7 channel ADC sa PortC. Ang ADC ay may hiwalay na analog supply boltahe na pin, AVCC. Ang AVCC ay hindi dapat magkakaiba ng higit sa ± 0.3V mula sa VCC.. Ang sanggunian ng boltahe ay maaaring mapalabas ng panlabas na pin sa AREF. Ginamit ang sanggunian ng boltahe ng AVCC. Maaari ring maitakda ang ADC upang magpatakbo ng tuloy-tuloy (ang mode na walang bayad) o upang gawin lamang ang isang conversion.

Hakbang 3: Formula ng Conversion ng ADC

Formula ng Conversion ng ADC
Formula ng Conversion ng ADC

Kung saan ang Vin ay ang boltahe sa napiling input pin at Vref ang napiling sanggunian ng boltahe

Hakbang 4: Paano I-configure ang ADC sa ATmega8?

Paano i-configure ang ADC sa ATmega8?
Paano i-configure ang ADC sa ATmega8?

Ang mga sumusunod na Rehistro ay ginagamit para sa pagpapatupad ng ADC sa ATmega8

Seleksyon ng Multiplexer ng ADC

Hakbang 5: Pagpili ng ADLAR

Pagpili ng ADLAR
Pagpili ng ADLAR
Pagpili ng ADLAR
Pagpili ng ADLAR

ADC Left Adjust Result Ang ADLAR ay nakakaapekto sa pagtatanghal ng resulta ng conversion ng ADC sa Rehistro ng Data ng ADC. Sumulat ng isa sa ADLAR sa kaliwa ayusin ang resulta. Kung hindi man, ang resulta ay tamang nababagay

Kapag ang isang pag-convert ng ADC ay kumpleto, ang resulta ay matatagpuan sa ADCH at ADCL Kapag nabasa ang ADCL, ang Pagrehistro ng Data ng ADC ay hindi na-update hanggang mabasa ang ADCH. Dahil dito, kung ang resulta ay naiwan na nababagay at hindi hihigit sa 8-bit na katumpakan na kinakailangan, sapat na upang basahin ang ADCH. Kung hindi man, dapat basahin muna ang ADCL, pagkatapos ay ang ADCH. Mga Bit Seleksyon ng Analog Channel Ang halaga ng mga bit na ito ay pipili kung aling mga analog input ang konektado sa ADC.

Hakbang 6: Seleksyon ng ADCSRA

Seleksyon ng ADCSRA
Seleksyon ng ADCSRA
Seleksyon ng ADCSRA
Seleksyon ng ADCSRA

• Bit 7 - ADEN: Paganahin ng ADC Ang pagsulat ng kaunting ito sa isa ay nagbibigay-daan sa ADC. Sa pamamagitan ng pagsulat nito sa zero, naka-off ang ADC

• Bit 6 - ADSC: Magsimula ang Conversion ng ADC Sa mode na Single Conversion, isulat ang bit na ito sa isa upang simulan ang bawat conversion. Sa Free Running mode, isulat ang kaunti sa isa upang simulan ang unang conversion.

• Bit 5 - ADFR: Piliin ang Libreng Pagpapatakbo ng ADC Kapag naayos ang bit na ito (isa) ang ADC ay nagpapatakbo sa mode na Libreng Running. Sa mode na ito, ang mga sample ng ADC at patuloy na ina-update ang Mga Rehistro ng Data na tuloy-tuloy. Tatapusin ng pag-clear sa bit na ito (zero) ang Libreng Running mode.

• Bit 4 - ADIF: ADC Interrupt Flag Ang bit na ito ay itinakda kapag nakumpleto ang isang conversion ng ADC at na-update ang Mga Rehistro ng Data. Ang ADC Conversion complete Interrupt ay isinasagawa kung ang ADIE bit at ang I-bit sa SREG ay nakatakda. Ang ADIF ay na-clear sa pamamagitan ng hardware kapag nagpapatupad ng kaukulang nakakagambala na Paghawak ng Vector. Bilang kahalili, ang ADIF ay nabura sa pamamagitan ng pagsulat ng isang lohikal sa watawat.

• Bit 3 - ADIE: ADC Interrupt Enable Kapag ang bit na ito ay nakasulat sa isa at ang I-bit sa SREG ay nakatakda, ang ADC Conversion Kumpleto na Pag-abala ay naaktibo.

• Bits 2: 0 - ADPS2: 0: ADC Prescaler Select Bits Ayon sa datasheet, ang prescalar na ito ay kailangang maitakda upang ang dalas ng input ng ADC ay nasa pagitan ng 50 KHz at 200 KHz. Ang orasan ng ADC ay nagmula sa orasan ng system sa tulong ng ADPS2: 0 Ang mga bit na ito ay tumutukoy sa kadahilanan ng paghahati sa pagitan ng dalas ng XTAL at ng input na orasan sa ADC.

Hakbang 7: Kung Nais Mong Kumuha ng Halaga ng ADC Kailangan Mong Mangangailangan ng Ilang Trabaho Tapos Na Nakalista sa ibaba

  • Itakda ang halaga ng ADC
  • I-configure ang output LED pin
  • I-configure ang ADC Hardware
  • Paganahin ang ADC
  • Simulan ang Analog sa Mga Digital na Conversion
  • HABANG Habang Panahon

KUNG Mas Mahalaga ang ADC Value pagkatapos ay Itakda ang halaga, I-on ang LED ELSE Turn Off LED

Hakbang 8: Itakda ang Halaga ng ADC

Code: uint8_t ADCValue = 128;

Hakbang 9: I-configure ang Output LED Pin

Code: DDRB | = (1 << PB1);

Hakbang 10: I-configure ang ADC Hardware

I-configure ang ADC Hardware

Ginagawa ito sa pamamagitan ng pagtatakda ng mga piraso sa mga rehistro ng kontrol para sa ADC. Una, itakda natin ang prescalar para sa ADC. Ayon sa datasheet, ang prescalar na ito ay kailangang itakda upang ang dalas ng input ng ADC ay nasa pagitan ng 50 KHz at 200 KHz. Ang orasan ng ADC ay nagmula sa orasan ng system. Sa dalas ng system na 1MHz, isang prescaler na 8 ay magreresulta sa dalas ng ADC na 125 Khz. Ang prescaling ay itinakda ng mga piraso ng ADPS sa rehistro ng ADCSRA. Ayon sa datasheet, ang lahat ng tatlong mga piraso ng ADPS2: 0 ay dapat itakda sa 011 upang makuha ang 8 prescaler.

Code: ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

Susunod, itakda natin ang boltahe ng sanggunian ng ADC. Kinokontrol ito ng mga REFS na bit sa rehistro ng ADMUX. Ang sumusunod ay nagtatakda ng sanggunian boltahe sa AVCC.

Code: ADMUX | = (1 << REFS0);

Upang maitakda ang channel na dumaan sa multiplexer sa ADC, ang mga bit na MUX sa rehistro ng ADMUX ay kailangang maitakda nang naaayon. Dahil ginagamit namin ang ADC5 dito

Code: ADMUX & = 0xF0; ADMUX | = 5;

Upang mailagay ang ADC sa mode na walang bayad, itakda ang aptly na pinangalanang ADFR bit sa rehistro ng ADCSRA:

Code: ADCSRA | = (1 << ADFR);

Ang isang huling pagbabago sa mga setting ay gagawin upang gawing mas simple ang pagbabasa ng halaga ng ADC. Bagaman ang ADC ay may resolusyon na 10 bits, ang karaming impormasyon na ito ay madalas na hindi kinakailangan. Ang halagang 10 bit na ito ay nahahati sa dalawang 8 bit register, ADCH at ADCL. Bilang default, ang pinakamababang 8 piraso ng halaga ng ADC ay matatagpuan sa ADCL, na ang pinakamataas na dalawa ay ang pinakamababang dalawang piraso ng ADCH. Sa pamamagitan ng pagtatakda ng ADLAR na bit sa rehistro ng ADMUX, maaari nating iwanang ihanay ang halaga ng ADC. Inilalagay nito ang pinakamataas na 8 piraso ng pagsukat sa rehistro ng ADCH, kasama ang natitira sa rehistro ng ADCL. Kung binasa namin ang rehistro ng ADCH, nakakakuha kami ng isang halaga ng 8 bit na kumakatawan sa aming 0 hanggang 5 volt na pagsukat bilang isang numero mula 0 hanggang 255. Karaniwan naming binabago ang aming 10 bit na pagsukat ng ADC sa isang 8 bit na isa. Narito ang code upang maitakda ang ADLAR bit:

Code:

ADMUX | = (1 << ADLAR); Nakumpleto nito ang pag-set up ng hardware ng ADC para sa halimbawang ito. Dalawang iba pang mga piraso ang kailangang maitakda bago magsimula ang ADC sa pagsukat.

Hakbang 11: Paganahin ang ADC

Upang paganahin ang ADC, itakda ang ADEN bit sa ADCSRA:

Code: ADCSRA | = (1 << ADEN);

Hakbang 12: Simulan ang Analog sa Mga Digital na Conversion

Upang simulan ang mga sukat ng ADC, ang ADSC bit sa ADCSRA ay kailangang maitakda:

Code: ADCSRA | = (1 << ADSC);

Sa puntong ito, ang ADC ay magsisimulang patuloy na pag-sample ng boltahe na ipinakita sa ADC5. Ang code sa puntong ito ay ganito ang hitsura:

Hakbang 13: HABANG Kailanman

Ang natitirang bagay na dapat gawin ay subukan ang halaga ng ADC at itakda ang mga LED upang ipakita ang isang mataas / mababang pahiwatig. Dahil ang pagbabasa ng ADC sa ADCH ay may maximum na halaga na 255, isang halaga ng pagsubok na ika ang napili upang matukoy kung ang boltahe ay mataas o mababa. Ang isang simpleng pahayag na KUNG / IBA sa mga FOR loop ay magpapahintulot sa amin na buksan ang tamang LED:

Code

kung (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // I-on ang LED

}

iba pa

{

PORTB & = ~ (1 << PB0); // Patayin ang LED

}

Hakbang 14: Sa Wakas na Kumpletong Code Ay

Code:

# isama

int main (walang bisa)

{

uint8_t ADCValue = 128;

DDRB | = (1 << PB0); // Itakda ang LED1 bilang output

ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Itakda ang ADC prescalar sa 8 - // 125KHz sample rate na 1MHz

ADMUX | = (1 << REFS0); // Itakda ang sanggunian ng ADC sa AVCC

ADMUX | = (1 << ADLAR); // Kaliwa ayusin ang resulta ng ADC upang payagan ang madaling 8 bit na pagbabasa

ADMUX & = 0xF0;

ADMUX | = 5; // MUX mga halagang kinakailangan upang mabago upang magamit ang ADC0

ADCSRA | = (1 << ADFR); // Itakda ang ADC sa Free-Running Mode

ADCSRA | = (1 << ADEN); // Paganahin ang ADC

ADCSRA | = (1 << ADSC); // Start A2D Conversions habang (1) // Loop Forever

{

kung (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // I-on ang LED1

}

iba pa

{

PORTE & = ~ (1 << PB1); // Patayin ang LED1

}

}

ibalik ang 0;

}

Una I-publish ang tutorial na ito Mag-click Dito

Inirerekumendang: