Sisällysluettelo:

Johdatus ADC: hen AVR -mikrokontrollerissa - aloittelijoille: 14 vaihetta
Johdatus ADC: hen AVR -mikrokontrollerissa - aloittelijoille: 14 vaihetta

Video: Johdatus ADC: hen AVR -mikrokontrollerissa - aloittelijoille: 14 vaihetta

Video: Johdatus ADC: hen AVR -mikrokontrollerissa - aloittelijoille: 14 vaihetta
Video: LDmicro 1: Введение (программирование релейной логики ПЛК микроконтроллера с помощью LDmicro) 2024, Marraskuu
Anonim
Johdatus ADC: hen AVR -mikrokontrollerissa | aloittelijoille
Johdatus ADC: hen AVR -mikrokontrollerissa | aloittelijoille

Tässä opetusohjelmassa tiedät kaiken ADC: n avr -mikrokontrollerissa

Vaihe 1: Mikä on ADC?

ADC tai analoginen digitaalimuunnin mahdollistaa analogisen jännitteen muuntamisen digitaaliseksi arvoksi, jota mikrokontrolleri voi käyttää. On olemassa monia analogisten signaalien lähteitä, joita voisi haluta mitata. Saatavilla on analogisia antureita, jotka mittaavat lämpötilaa, valon voimakkuutta, etäisyyttä, asentoa ja voimaa.

Vaihe 2: Kuinka ADC toimii AVR-mikrokontrollerissa

AVR ADC mahdollistaa AVR -mikrokontrollerin muuntaa analogiset jännitteet digitaalisiksi arvoiksi ilman ulkoisia osia. ATmega8 sisältää 10-bittisen peräkkäisen likimääräisen ADC: n. ATmega8: ssa on 7-kanavainen ADC PortC: ssä. ADC: ssä on erillinen analoginen syöttöjännitetappi, AVCC. AVCC ei saa poiketa VCC: stä enempää kuin ± 0,3 V. Jänniteohje voi olla ulkoisesti irrotettu AREF -nastasta. Jänniteohjeena käytetään AVCC: tä. ADC voidaan myös asettaa toimimaan jatkuvasti (vapaakäyntitila) tai suorittamaan vain yksi muunnos.

Vaihe 3: ADC -muunnoskaava

ADC -muunnoskaava
ADC -muunnoskaava

Missä Vin on valitun tulotapin jännite ja Vref valittu jänniteohje

Vaihe 4: Kuinka määrittää ADC ATmega8: ssa?

Kuinka määrittää ADC ATmega8: ssa?
Kuinka määrittää ADC ATmega8: ssa?

Seuraavia rekistereitä käytetään ADC: n toteuttamiseen ATmega8: ssa

ADC -multiplekserin valinta

Vaihe 5: ADLAR -valinta

ADLAR -valinta
ADLAR -valinta
ADLAR -valinta
ADLAR -valinta

ADC -vasemmanpuoleisen säädön tulos ADLAR -bitti vaikuttaa ADC -muunnostuloksen esittämiseen ADC -rekisterissä. Kirjoita yksi ADLARille vasemmalle säätääksesi tulosta. Muuten tulos on oikein säädetty

Kun ADC -muunnos on valmis, tulos löytyy ADCH: sta ja ADCL: stä. Näin ollen, jos tulos jätetään säätämättä ja vaaditaan enintään 8-bittistä tarkkuutta, riittää lukea ADCH. Muussa tapauksessa ADCL on ensin luettava ja sitten ADCH. Analogisen kanavan valintabitit Näiden bittien arvo valitsee, mitkä analogiatulot on kytketty ADC: hen.

Vaihe 6: ADCSRA -valinta

ADCSRA -valinta
ADCSRA -valinta
ADCSRA -valinta
ADCSRA -valinta

• Bitti 7 - ADEN: ADC Ota käyttöön Tämän bitin kirjoittaminen yhdeksi ottaa ADC: n käyttöön. Kirjoittamalla sen nollaan ADC kytkeytyy pois päältä

• Bitti 6 - ADSC: ADC Käynnistä muunnos Kirjoita tämä bitti yhdelle -muodossa, jos haluat aloittaa jokaisen muunnoksen. Vapaa juoksu -tilassa kirjoita tämä bitti yhdelle aloittaaksesi ensimmäisen muunnoksen.

• Bitti 5 - ADFR: ADC Free Running Select Kun tämä bitti on asetettu (yksi), ADC toimii Free Running -tilassa. Tässä tilassa ADC ottaa näytteitä ja päivittää tietorekistereitä jatkuvasti. Tämän bitin (nolla) tyhjentäminen lopettaa vapaakäyntitilan.

• Bitti 4 - ADIF: ADC -keskeytyslippu Tämä bitti asetetaan, kun ADC -muunnos on valmis ja tietorekisterit päivitetään. ADC Conversion Complete Interrupt suoritetaan, jos ADIE- ja I-bitit SREG: ssä on asetettu. Laitteisto tyhjentää ADIF: n suorittaessaan vastaavan keskeytyskäsittelyvektorin. Vaihtoehtoisesti ADIF tyhjennetään kirjoittamalla lippuun looginen.

• Bitti 3-ADIE: ADC-keskeytyksen esto Kun tämä bitti on kirjoitettu yhdelle ja IEG-bitti SREG: ssä on asetettu, ADC Conversion Complete Interrupt aktivoidaan.

• Bitit 2: 0 - ADPS2: 0: ADC -esiscaler -valintabitit Tietolomakkeen mukaan tämä esiskalari on asetettava siten, että ADC -tulotaajuus on 50–200 KHz. ADC -kello johdetaan järjestelmäkellosta ADPS2: 0: n avulla. Nämä bitit määrittävät jakautumistekijän XTAL -taajuuden ja ADC: n tulokellon välillä.

Vaihe 7: Jos haluat ottaa ADC -arvon, sinun on suoritettava alla lueteltu työ

  • Aseta ADC -arvo
  • Määritä lähdön LED -nasta
  • Määritä ADC -laitteisto
  • Ota ADC käyttöön
  • Aloita analogisesta digitaaliseen muuntaminen
  • IKINÄ ikuisesti

JOS ADC -arvo on suurempi kuin asetusarvo, sytytä LED ELSE Sammuta LED

Vaihe 8: Aseta ADC -arvo

Koodi: uint8_t ADCValue = 128;

Vaihe 9: Määritä lähdön LED -nasta

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

Vaihe 10: Määritä ADC -laitteisto

Määritä ADC -laitteisto

Tämä tehdään asettamalla bittejä ADC: n ohjausrekistereihin. Asetetaan ensin ADC: n eskalaari. Tietolomakkeen mukaan tämä eskalaari on asetettava siten, että ADC: n tulotaajuus on 50–200 KHz. ADC -kello on johdettu järjestelmän kellosta. Kun järjestelmän taajuus on 1 MHz, esiskaalaus 8 johtaa ADC -taajuuteen 125 Khz. Esiskaalaus asetetaan ADCSRA -rekisterin ADPS -bittien avulla. Tietolomakkeen mukaan kaikki kolme ADPS2: 0 -bittiä on asetettava arvoon 011, jotta saat 8 esiasetinta.

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

Seuraavaksi asetetaan ADC -referenssijännite. Tätä ohjaavat ADMUX -rekisterin REFS -bitit. Seuraavassa asetetaan vertailujännite AVCC: ksi.

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

Jos haluat asettaa kanavan multiplekserin kautta ADC: hen, ADMUX -rekisterin MUX -bitit on asetettava vastaavasti. Koska käytämme täällä ADC5: tä

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

Aseta ADC vapaaseen toimintatilaan asettamalla sopivan niminen ADFR-bitti ADCSRA-rekisteriin:

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

Viimeinen asetusten muutos helpottaa ADC -arvon lukemista. Vaikka ADC: n resoluutio on 10 bittiä, niin paljon tietoa ei usein tarvita. Tämä 10 -bittinen arvo on jaettu kahteen 8 -bittiseen rekisteriin, ADCH ja ADCL. Oletuksena ADCL: n ADCL -arvon alimmat 8 bittiä löytyvät ADCL: stä, ja kaksi ylempää ovat ADCH: n alimmat kaksi bittiä. Asettamalla ADLAR -bitin ADMUX -rekisteriin voimme kohdistaa ADC -arvon vasemmalle. Tämä asettaa mittauksen korkeimmat 8 bittiä ADCH -rekisteriin ja loput ADCL -rekisteriin. Jos luemme sitten ADCH -rekisterin, saamme 8 -bittisen arvon, joka edustaa 0–5 voltin mittaustamme numerona 0–255. Kääntämme 10 -bittisen ADC -mittauksemme 8 -bittiseksi. Tässä on koodi ADLAR -bitin asettamiseksi:

Koodi:

ADMUX | = (1 << ADLAR); Tämä viimeistelee ADC -laitteiston asennuksen tässä esimerkissä. Ennen kuin ADC aloittaa mittausten tekemisen, on asetettava kaksi muuta bittiä.

Vaihe 11: Ota ADC käyttöön

Ota ADC käyttöön asettamalla ADEN -bitti ADCSRA:

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

Vaihe 12: Aloita analogisesta digitaaliseen muuntaminen

ADC -mittausten aloittamiseksi ADCSRA: n ADSC -bitti on asetettava:

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

Tässä vaiheessa ADC aloittaisi jatkuvasti näytteenoton ADC5: n jännitteestä. Tässä vaiheessa koodi näyttäisi tältä:

Vaihe 13: IKINÄ ikuisesti

Ainoa asia, joka on tehtävä, on testata ADC -arvo ja asettaa LED -valot näyttämään korkea / matala -ilmaisin. Koska ADCH: n ADC -lukeman maksimiarvo on 255, testiarvo th valittiin sen määrittämiseksi, onko jännite korkea vai matala. Yksinkertainen IF/ELSE -lauseke FOR -silmukoissa antaa meille mahdollisuuden kytkeä oikea LED -valo päälle:

Koodi

jos (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // Kytke LED päälle

}

muu

{

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

}

Vaihe 14: Lopussa täydellinen koodi on

Koodi:

#sisältää

int main (mitätön)

{

uint8_t ADCValue = 128;

DDRB | = (1 << PB0); // Aseta LED1 lähtöksi

ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Aseta ADC -eskalaari 8 - 125 KHz: n näytteenottotaajuuteen 1 MHz

ADMUX | = (1 << REFS0); // Aseta ADC -viitteeksi AVCC

ADMUX | = (1 << ADLAR); // Vasemmanpuoleinen ADC -tulos mahdollistaa helpon 8 -bittisen lukemisen

ADMUX & = 0xF0;

ADMUX | = 5; // MUX -arvoja on muutettava ADC0: n käyttämiseksi

ADCSRA | = (1 << ADFR); // Aseta ADC Free-Running Mode -tilaan

ADCSRA | = (1 << ADEN); // Ota ADC käyttöön

ADCSRA | = (1 << ADSC); // Aloita A2D -muunnokset (1) // Silmukka ikuisesti

{

jos (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // Kytke LED -valo päälle 1

}

muu

{

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

}

}

palauta 0;

}

Julkaise ensin tämä opetusohjelma Napsauta tätä

Suositeltava: