Përmbajtje:

Hyrje në ADC në AVR Mikrokontrollues - për fillestarët: 14 hapa
Hyrje në ADC në AVR Mikrokontrollues - për fillestarët: 14 hapa

Video: Hyrje në ADC në AVR Mikrokontrollues - për fillestarët: 14 hapa

Video: Hyrje në ADC në AVR Mikrokontrollues - për fillestarët: 14 hapa
Video: ESP32 Tutorial 15 - DC Motor Speed Control with ESP32 L293D | SunFounder's ESP32 IoT Learnig kit 2024, Nëntor
Anonim
Hyrje në ADC në mikrokontrollues AVR | për Fillestarët
Hyrje në ADC në mikrokontrollues AVR | për Fillestarët

Në këtë tutorial do të dini gjithçka ADC në mikrokontrollues avr

Hapi 1: Çfarë është një ADC?

Një ADC, ose Konvertuesi analog në dixhital, ju lejon të konvertoni një tension analog në një vlerë dixhitale që mund të përdoret nga një mikrokontrollues. Ka shumë burime të sinjaleve analoge që dikush mund të dëshirojë të masë. Ekzistojnë sensorë analogë që matin temperaturën, intensitetin e dritës, distancën, pozicionin dhe forcën, vetëm për të përmendur disa.

Hapi 2: Si funksionon ADC në AVR- Mikrokontrollues

AVR ADC lejon mikrokontrolluesin AVR të konvertojë tensione analoge në vlera dixhitale me pak ose aspak pjesë të jashtme. ATmega8 përmban një përafrim të njëpasnjëshëm 10-bit ADC. ATmega8 ka 7 kanale ADC në PortC. ADC ka një pin të veçantë analog të tensionit të furnizimit, AVCC. AVCC nuk duhet të ndryshojë më shumë se ± 0.3V nga VCC. Referenca e tensionit mund të shkëputet nga jashtë në kunjin AREF. AVCC përdoret si referencë e tensionit. ADC gjithashtu mund të vendoset që të funksionojë vazhdimisht (mënyra e funksionimit të lirë) ose të bëjë vetëm një konvertim.

Hapi 3: Formula e Konvertimit ADC

Formula e konvertimit ADC
Formula e konvertimit ADC

Ku Vin është tensioni në pinin e zgjedhur të hyrjes dhe Vref referenca e tensionit të zgjedhur

Hapi 4: Si të konfiguroni ADC në ATmega8?

Si të konfiguroni ADC në ATmega8?
Si të konfiguroni ADC në ATmega8?

Regjistrat e mëposhtëm përdoren për zbatimin e ADC në ATmega8

Përzgjedhja e ADP Multiplexer

Hapi 5: Përzgjedhja e ADLAR

Përzgjedhja ADLAR
Përzgjedhja ADLAR
Përzgjedhja ADLAR
Përzgjedhja ADLAR

ADC Left Adjust Result Biti ADLAR ndikon në paraqitjen e rezultatit të konvertimit ADC në Regjistrin e të dhënave ADC. Shkruani një në ADLAR për të rregulluar rezultatin në të majtë. Përndryshe, rezultati rregullohet siç duhet

Kur një konvertim ADC është i plotë, rezultati gjendet në ADCH dhe ADCL Kur lexohet ADCL, Regjistri i të Dhënave ADC nuk azhurnohet derisa ADCH të lexohet. Rrjedhimisht, nëse rezultati lihet i rregulluar dhe nuk kërkohet më shumë se një saktësi 8-bit, mjafton të lexoni ADCH. Përndryshe, ADCL duhet të lexohet së pari, pastaj ADCH. Bitët e përzgjedhjes së kanaleve analoge Vlera e këtyre bitëve zgjedh se cilat hyrje analoge janë të lidhura me ADC.

Hapi 6: Përzgjedhja e ADCSRA

Përzgjedhja e ADCSRA
Përzgjedhja e ADCSRA
Përzgjedhja e ADCSRA
Përzgjedhja e ADCSRA

• Bit 7 - ADEN: ADC Enable Shkrimi i këtij biti në një mundëson ADC. Duke e shkruar atë në zero, ADC fiket

• Bit 6 - ADSC: ADC Start Conversion Në modalitetin Single Conversion, shkruajeni këtë bit në një për të filluar çdo konvertim. Në modalitetin e Kandidimit Falas, shkruani këtë pjesë në një për të filluar konvertimin e parë.

• Bit 5 - ADFR: ADC Free Running Select Kur të vendoset ky bit (një) ADC funksionon në modalitetin Free Running. Në këtë mënyrë, ADC mostrat dhe përditëson regjistrat e të dhënave vazhdimisht. Pastrimi i këtij biti (zero) do të përfundojë mënyrën e funksionimit falas.

• Bit 4 - ADIF: Flamuri i ndërprerjes ADC Ky bit vendoset kur përfundon një konvertim ADC dhe azhurnohen regjistrat e të dhënave. Ndërprerja e plotë e konvertimit ADC ekzekutohet nëse janë vendosur biti ADIE dhe biti në SREG. ADIF pastrohet nga hardueri kur ekzekuton Vektorin e Trajtimit të ndërprerjes përkatëse. Përndryshe, ADIF pastrohet duke shkruar një logjike në flamur.

• Bit 3-ADIE: ADC Interrupt Enable Kur ky bit shkruhet në një dhe vendoset biti I në SREG, aktivizohet ndërprerja e plotë e konvertimit ADC.

• Bitet 2: 0 - ADPS2: 0: ADC Prescaler Select Bits Sipas fletës së të dhënave, kjo prescalar duhet të vendoset në mënyrë që frekuenca e hyrjes ADC të jetë midis 50 KHz dhe 200 KHz. Ora ADC rrjedh nga ora e sistemit me ndihmën e ADPS2: 0 Këto bit përcaktojnë faktorin e ndarjes midis frekuencës XTAL dhe orës hyrëse në ADC.

Hapi 7: Nëse dëshironi të merrni vlerën ADC ju duhet të keni nevojë për një punë të kryer që është renditur më poshtë

  • Vendosni vlerën ADC
  • Konfiguroni kunjin LED të daljes
  • Konfiguroni harduerin ADC
  • Aktivizo ADC
  • Filloni konvertimet analoge në dixhitale
  • NDIRSE Përgjithmonë

NFSE Vlera ADC Më e Lartë pastaj Vendosni Vlerën, Ndizni LED ELSE Fikni LED

Hapi 8: Vendosni Vlerën ADC

Kodi: uint8_t ADCValue = 128;

Hapi 9: Konfiguroni Pin -in LED të daljes

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

Hapi 10: Konfiguroni harduerin ADC

Konfiguroni harduerin ADC

Kjo bëhet përmes vendosjes së bitëve në regjistrat e kontrollit për ADC. Së pari, le të vendosim preskalerin për ADC. Sipas fletës së të dhënave, kjo prescalar duhet të vendoset në mënyrë që frekuenca e hyrjes ADC të jetë midis 50 KHz dhe 200 KHz. Ora ADC rrjedh nga ora e sistemit. Me një frekuencë sistemi prej 1MHz, një para -shkallëzues prej 8 do të rezultojë në një frekuencë ADC prej 125 Khz. Parakalimi vendoset nga bitët ADPS në regjistrin ADCSRA. Sipas fletës së të dhënave, të tre bitët ADPS2: 0 duhet të vendosen në 011 për të marrë parapaguesin 8.

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

Tjetra, le të vendosim tensionin e referencës ADC. Kjo kontrollohet nga bitët REFS në regjistrin ADMUX. Më poshtë vendos tensionin e referencës në AVCC.

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

Për të vendosur kanalin e kaluar nëpër multiplexer në ADC, bitet MUX në regjistrin ADMUX duhet të vendosen në përputhje me rrethanat. Meqenëse ne po përdorim ADC5 këtu

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

Në mënyrë që të vendosni ADC në modalitetin e funksionimit të lirë, vendosni bitin ADFR me emrin e duhur në regjistrin ADCSRA:

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

Një ndryshim i fundit i cilësimeve do të bëhet për ta bërë leximin e vlerës ADC më të thjeshtë. Megjithëse ADC ka një rezolutë prej 10 bitësh, ky informacion shumë shpesh nuk është i nevojshëm. Kjo vlerë prej 10 bitësh ndahet në dy regjistra 8 bitësh, ADCH dhe ADCL. Si parazgjedhje, 8 bitët më të ulët të vlerës ADC gjenden në ADCL, me dy të sipërmet dy bitët më të ulët të ADCH. Duke vendosur bitin ADLAR në regjistrin ADMUX, ne mund të rreshtojmë majtas vlerën ADC. Kjo vendos 8 bitët më të lartë të matjes në regjistrin ADCH, ndërsa pjesa tjetër në regjistrin ADCL. Nëse lexojmë pastaj regjistrin ADCH, marrim një vlerë 8 bit që përfaqëson matjen tonë 0 deri në 5 volt si një numër nga 0 në 255. Ne në thelb po e kthejmë matjen tonë ADC 10 bit në një 8 bit. Këtu është kodi për të vendosur bitin ADLAR:

Kodi:

ADMUX | = (1 << ADLAR); Kjo përfundon konfigurimin e harduerit ADC për këtë shembull. Dy bit të tjerë duhet të vendosen para se ADC të fillojë të marrë matje.

Hapi 11: Aktivizo ADC

Për të aktivizuar ADC, vendosni bitin ADEN në ADCSRA:

Kodi: ADCSRA | = (1 << ADEN];

Hapi 12: Filloni konvertimet analoge në ato dixhitale

Për të filluar matjet ADC, biti ADSC në ADCSRA duhet të vendoset:

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

Në këtë pikë, ADC do të fillonte marrjen e mostrave të vazhdueshme të tensionit të paraqitur në ADC5. Kodi deri në këtë pikë do të duket kështu:

Hapi 13: NDRSE Përgjithmonë

E vetmja gjë që mbetet për të bërë është të testoni vlerën ADC dhe të vendosni LED -të të shfaqin një tregues të lartë / të ulët. Meqenëse leximi ADC në ADCH ka një vlerë maksimale prej 255, një vlerë testimi e th u zgjodh për të përcaktuar nëse tensioni ishte i lartë apo i ulët. Një deklaratë e thjeshtë IF/ELSE në sythe FOR do të na lejojë të ndezim LED -in e duhur:

Kodi

nëse (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // Ndizni LED

}

tjeter

{

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

}

Hapi 14: Në fund Kodi i plotë është

Kodi:

#përfshi

int kryesore (e pavlefshme)

{

uint8_t ADCVlera = 128;

DDRB | = (1 << PB0); // Vendosni LED1 si dalje

ADCSRA | = (0 << ADPS2) | (1 << ADPS1] | (1 << ADPS0]; // Vendosni ADC prescalar në 8 - // Norma e mostrës 125KHz 1MHz

ADMUX | = (1 << REFS0); // Vendosni referencën ADC në AVCC

ADMUX | = (1 << ADLAR); // Rregulloni majtas rezultatin ADC për të lejuar lexim të lehtë me 8 bit

ADMUX & = 0xF0;

ADMUX | = 5; // Vlerat MUX duheshin ndryshuar për të përdorur ADC0

ADCSRA | = (1 << ADFR); // Vendosni ADC në modalitetin e funksionimit falas

ADCSRA | = (1 << ADEN]; // Aktivizo ADC

ADCSRA | = (1 << ADSC); // Filloni Konvertimet A2D ndërsa (1) // Loop Forever

{

nëse (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // Ndizni LED1

}

tjeter

{

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

}

}

kthimi 0;

}

Së pari Publikoni këtë tutorial Kliko Këtu

Recommended: