Sisukord:

Sissejuhatus AVC mikrokontrolleri ADC -sse - algajatele: 14 sammu
Sissejuhatus AVC mikrokontrolleri ADC -sse - algajatele: 14 sammu

Video: Sissejuhatus AVC mikrokontrolleri ADC -sse - algajatele: 14 sammu

Video: Sissejuhatus AVC mikrokontrolleri ADC -sse - algajatele: 14 sammu
Video: Lecture 5 - PWM && DAC && ADC 2024, November
Anonim
Sissejuhatus AVC mikrokontrolleri ADC -sse | algajatele
Sissejuhatus AVC mikrokontrolleri ADC -sse | algajatele

Selles õpetuses saate teada kõike, mis on ADR mikrokontrolleris

Samm: mis on ADC?

ADC või analoog -digitaalmuundur võimaldab teisendada analoogpinge digitaalseks väärtuseks, mida saab kasutada mikrokontroller. On palju analoogsignaalide allikaid, mida võiks soovida mõõta. Saadaval on analoogandurid, mis mõõdavad temperatuuri, valguse intensiivsust, kaugust, asendit ja jõudu.

Samm 2: Kuidas töötada ADC-ga AVR-mikrokontrolleris

AVR ADC võimaldab AVR -i mikrokontrolleril teisendada analoogpinged digitaalseteks väärtusteks, ilma väliste osadeta. ATmega8-l on 10-bitine järjestikune ligikaudne ADC. ATmega8-l on PortC-s 7 kanaliga ADC. ADC -l on eraldi analoogtoitepinge, AVCC. AVCC ei tohi VCC -st erineda rohkem kui ± 0,3 V. AREF -i tihvti juures võib pingeviite väliselt lahti ühendada. Pinge võrdlusalusena kasutatakse AVCC -d. ADC saab seadistada ka pidevaks töötamiseks (vabalt töötav režiim) või ainult ühe teisenduse tegemiseks.

3. samm: ADC teisendusvalem

ADC teisendusvalem
ADC teisendusvalem

Kus Vin on pinge valitud sisendpoldil ja Vref valitud pinge võrdlus

Samm: kuidas konfigureerida ADC ATmega8 -s?

Kuidas seadistada ADC ATmega8 -s?
Kuidas seadistada ADC ATmega8 -s?

Järgmisi registreid kasutatakse ADC rakendamiseks ATmega8 -s

ADC multiplekseri valik

Samm: ADLAR -i valik

ADLAR valik
ADLAR valik
ADLAR valik
ADLAR valik

ADC vasakpoolse reguleerimise tulemus ADLAR -bit mõjutab ADC -teisendustulemuse esitamist ADC -andmeregistris. Kirjutage üks ADLAR -i vasakule, et tulemust reguleerida. Vastasel juhul on tulemus õigesti reguleeritud

Kui ADC teisendamine on lõpule viidud, leitakse tulemus ADCH -st ja ADCL -ist. ADCL -i lugemisel ei värskendata ADC -andmeregistrit enne, kui ADCH on loetud. Järelikult, kui tulemus jäetakse reguleerimata ja pole vaja rohkem kui 8-bitist täpsust, piisab ADCH lugemisest. Vastasel juhul tuleb kõigepealt lugeda ADCL, seejärel ADCH. Analoogkanali valiku bitid Nende bittide väärtus valib, millised analoogsisendid on ADC -ga ühendatud.

6. samm: ADCSRA valik

ADCSRA valik
ADCSRA valik
ADCSRA valik
ADCSRA valik

• Bitt 7 - ADEN: ADC Luba Selle biti kirjutamine ühele lubab ADC. Kirjutades selle nulli, lülitatakse ADC välja

• Bitt 6 - ADSC: ADC Alusta teisendamist Ühe konversiooni režiimis kirjutage see bitt ühele, et alustada iga konversiooni. Tasuta jooksurežiimis kirjutage see bitt ühele, et alustada esimest teisendust.

• Bitt 5 - ADFR: ADC vabajooksu valimine Kui see bit (üks) on seatud, töötab ADC vabasõidu režiimis. Selles režiimis proovib ja uuendab ADC pidevalt andmeregistreid. Selle biti (null) kustutamine lõpetab vabajooksu režiimi.

• Bit 4 - ADIF: ADC katkestuslipp See bit määratakse siis, kui ADC teisendamine on lõpule viidud ja andmeregistreid värskendatakse. ADC Conversion Complete Interrupt käivitatakse, kui ADIE-bit ja SREG-i I-bit on seatud. Vastava katkestuskäsitlusvektori käivitamisel kustutab ADIF riistvara. Teise võimalusena kustutatakse ADIF, kirjutades lipule loogilise.

• Bitt 3-ADIE: ADC-katkestuse lubamine Kui see bit on ühele kirjutatud ja SREG-i I-bit on seatud, aktiveeritakse ADC Conversion Complete Interrupt.

• Bits 2: 0 - ADPS2: 0: ADC prescaler Select Bits Vastavalt andmelehele tuleb see eelkalar seadistada nii, et ADC sisendsagedus oleks vahemikus 50 KHz kuni 200 KHz. ADC kell on tuletatud süsteemikellast ADPS2 abil: 0 Need bitid määravad jaotusteguri XTAL sageduse ja ADC sisendkella vahel.

Samm: kui soovite võtta ADC väärtust, peate tegema allpool loetletud tööd

  • Määrake ADC väärtus
  • Väljundi LED -tihvti seadistamine
  • Seadistage ADC riistvara
  • Luba ADC
  • Alustage analoog -digitaalkonversioone
  • KUI Igavesti

KUI ADC väärtus on kõrgem, siis määrake väärtus, lülitage LED sisse ELSE Lülitage LED välja

Samm: määrake ADC väärtus

Kood: uint8_t ADCValue = 128;

Samm: konfigureerige väljundi LED -tihvt

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

Samm: konfigureerige ADC riistvara

Seadistage ADC riistvara

Seda tehakse bittide seadistamisega ADC juhtregistrites. Esiteks seadistame ADC -le eelkalar. Andmelehe kohaselt tuleb see eelkalar seadistada nii, et ADC sisendsagedus oleks vahemikus 50 KHz kuni 200 KHz. ADC kell on tuletatud süsteemi kellast. Kui süsteemisagedus on 1MHz, siis 8 -kordse eelskaala tulemuseks on ADC sagedus 125 Khz. Eelseadistamise määravad ADCSRA registri ADPS -bitid. Vastavalt andmelehele peavad kõik kolm ADPS2: 0 bitti olema seatud väärtusele 011, et saada 8 eelseadistust.

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

Järgmisena seadistame ADC võrdluspinge. Seda juhivad REFS -bitid ADMUX -registris. Järgnev seab võrdluspingeks AVCC.

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

Selleks, et seadistada multiplekserist läbitud kanal ADC -le, tuleb vastavalt seadistada ADMUX -registri MUX -bitid. Kuna me kasutame siin ADC5

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

ADC vabalt töötavasse režiimi seadmiseks seadke ADCSRA registrisse sobiva nimega ADFR-bit:

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

Viimane seadete muudatus tehakse, et muuta ADC väärtuse lugemine lihtsamaks. Kuigi ADC eraldusvõime on 10 bitti, pole see palju teavet sageli vajalik. See 10 -bitine väärtus on jagatud kaheks 8 -bitiseks registriks, ADCH ja ADCL. Vaikimisi on ADCL -is ADC -väärtuse madalaimad 8 bitti, millest kaks ülemist on ADCH -i kaks alumist bitti. Seades ADMUX -registrisse ADLAR -biti, saame ADC väärtuse vasakule joondada. See paneb mõõtmise kõrgeimad 8 bitti ADCH -registrisse, ülejäänud - ADCL -registrisse. Kui me siis loeme ADCH registrit, saame 8 -bitise väärtuse, mis tähistab meie 0–5 -voldist mõõtmist numbrina 0–255. Põhimõtteliselt muudame oma 10 -bitise ADC -mõõtmise 8 -bitiseks. Siin on kood ADLAR -bitti seadistamiseks:

Kood:

ADMUX | = (1 << ADLAR); See lõpetab selle näite jaoks ADC riistvara häälestamise. Enne kui ADC hakkab mõõtmisi tegema, tuleb määrata veel kaks bitti.

Samm: lubage ADC

ADC lubamiseks seadke ADCSRA -s ADEN -bit:

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

12. samm: alustage analoog -digitaalkonversioone

ADC mõõtmiste alustamiseks tuleb ADCSRA ADSC bit seadistada:

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

Sel hetkel hakkaks ADC pidevalt proovima ADC5 -l esitatud pinget. Selle aja kood näeks välja selline:

Samm 13: KUI Igavesti

Ainus asi, mida teha, on testida ADC väärtust ja seadistada LED -id näitama kõrge / madala näitu. Kuna ADCH näidu ADCH maksimaalne väärtus on 255, valiti testväärtus th, et teha kindlaks, kas pinge oli kõrge või madal. Lihtne IF/ELSE avaldus FOR -ahelates võimaldab meil õige LED -i sisse lülitada:

Kood

kui (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // Lülitage LED sisse

}

muidu

{

PORTB & = ~ (1 << PB0); // Lülita LED välja

}

14. samm: lõpus on täielik kood

Kood:

#kaasake

int main (tühine)

{

uint8_t ADCValue = 128;

DDRB | = (1 << PB0); // Määra väljundiks LED1

ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Seadistage ADC eelkalar 8 - 125KHz proovivõtu sagedusele 1MHz

ADMUX | = (1 << REFS0); // Määra ADC viide AVCC -le

ADMUX | = (1 << ADLAR); // Vasakpoolne ADC tulemus, et võimaldada hõlpsat 8 -bitist lugemist

ADMUX & = 0xF0;

ADMUX | = 5; // ADC0 kasutamiseks tuli muuta MUX väärtusi

ADCSRA | = (1 << ADFR); // Seadke ADC vabalt töötavale režiimile

ADCSRA | = (1 << ADEN); // Luba ADC

ADCSRA | = (1 << ADSC); // Alustage A2D konversioone ajal (1) // Loop Forever

{

kui (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // Lülitage LED1 sisse

}

muidu

{

PORTE & = ~ (1 << PB1); // Lülitage LED1 välja

}

}

tagasitulek 0;

}

Esmalt avaldage see õpetus Klõpsake siin

Soovitan: