Turinys:

Įvadas į AVC mikrovaldiklio ADC - pradedantiesiems: 14 žingsnių
Įvadas į AVC mikrovaldiklio ADC - pradedantiesiems: 14 žingsnių

Video: Įvadas į AVC mikrovaldiklio ADC - pradedantiesiems: 14 žingsnių

Video: Įvadas į AVC mikrovaldiklio ADC - pradedantiesiems: 14 žingsnių
Video: Pamoka: Python info surinkimas iš "giliojo" interneto 2 dalis 2024, Liepa
Anonim
Įvadas į AVC mikrovaldiklio ADC | pradedantiesiems
Įvadas į AVC mikrovaldiklio ADC | pradedantiesiems

Šioje pamokoje jūs žinosite viską, kas yra ADC mikrovaldiklyje

1 žingsnis: Kas yra ADC?

ADC arba analoginis į skaitmeninį keitiklį leidžia konvertuoti analoginę įtampą į skaitmeninę vertę, kurią gali naudoti mikrovaldiklis. Yra daug analoginių signalų šaltinių, kuriuos galbūt norėsite išmatuoti. Galimi analoginiai jutikliai, kurie matuoja temperatūrą, šviesos intensyvumą, atstumą, padėtį ir jėgą.

2 žingsnis: Kaip veikia ADC naudojant AVR-mikrovaldiklį

AVR ADC leidžia AVR mikrovaldikliui konvertuoti analoginę įtampą į skaitmenines vertes be jokių išorinių dalių. „ATmega8“turi 10 bitų iš eilės apytikslį ADC. „ATmega8“turi 7 kanalų ADC „PortC“. ADC turi atskirą analoginį maitinimo įtampos kaištį, AVCC. AVCC nuo VCC turi skirtis ne daugiau kaip ± 0,3 V.. Įtampos atskaitos taškas gali būti išoriškai atsietas prie AREF kaiščio. AVCC naudojamas kaip atskaitos įtampa. ADC taip pat gali būti nustatytas nuolatiniam veikimui (laisvo veikimo režimas) arba tik vienai konversijai.

3 žingsnis: ADC konversijos formulė

ADC konversijos formulė
ADC konversijos formulė

Kur Vin yra pasirinkto įvesties kaiščio įtampa, o Vref - pasirinktos įtampos atskaitos taškas

4 žingsnis: Kaip sukonfigūruoti ADC ATmega8?

Kaip sukonfigūruoti ADC ATmega8?
Kaip sukonfigūruoti ADC ATmega8?

Šie registrai naudojami ADC diegimui ATmega8

ADC multiplekserio pasirinkimas

5 žingsnis: ADLAR pasirinkimas

ADLAR pasirinkimas
ADLAR pasirinkimas
ADLAR pasirinkimas
ADLAR pasirinkimas

ADC kairiojo reguliavimo rezultatas ADLAR bitas veikia ADC konvertavimo rezultato pateikimą ADC duomenų registre. Parašykite vieną ADLAR į kairę, norėdami koreguoti rezultatą. Priešingu atveju rezultatas bus tinkamai sureguliuotas

Kai ADC konvertavimas yra baigtas, rezultatas randamas ADCH ir ADCL Skaitant ADCL, ADC duomenų registras neatnaujinamas, kol neskaitomas ADCH. Taigi, jei rezultatas paliekamas sureguliuotas ir reikalaujama ne daugiau kaip 8 bitų tikslumo, pakanka perskaityti ADCH. Priešingu atveju pirmiausia reikia perskaityti ADCL, tada ADCH. Analoginių kanalų pasirinkimo bitai Šių bitų reikšmė pasirenka, kurie analoginiai įėjimai yra prijungti prie ADC.

6 žingsnis: ADCSRA pasirinkimas

ADCSRA pasirinkimas
ADCSRA pasirinkimas
ADCSRA pasirinkimas
ADCSRA pasirinkimas

• 7 bitas - ADEN: ADC Enable Įrašant šį bitą į vieną, įjungiamas ADC. Užrašius jį iki nulio, ADC išjungiamas

• 6 bitas - ADSC: ADC Pradėti konversiją Vienos konversijos režimu parašykite šį bitą į vieną, kad pradėtumėte kiekvieną konversiją. Laisvojo veikimo režimu parašykite šį bitą vienam, kad pradėtumėte pirmąją konversiją.

• 5 bitas - ADFR: ADC Free Running Select Kai nustatytas šis bitas (vienas), ADC veikia laisvojo veikimo režimu. Šiuo režimu ADC nuolat ima ir atnaujina duomenų registrus. Išvalius šį bitą (nulį) laisvojo veikimo režimas bus nutrauktas.

• 4 bitas - ADIF: ADC pertraukimo vėliava Šis bitas nustatomas, kai ADC konversija baigiama ir atnaujinami duomenų registrai. ADC konversijos užbaigimo pertraukimas vykdomas, jei yra nustatyti ADIE ir I bitai SREG. Vykdant atitinkamą pertraukimo tvarkymo vektorių, ADIF pašalinama aparatine įranga. Arba ADIF pašalinamas rašant loginį prie vėliavos.

• 3 bitas-ADIE: ADC pertraukimo įjungimas Kai šis bitas yra įrašytas į vieną ir nustatytas IEG bitas SREG, įjungiamas ADC Conversion Complete Interrupt.

• Bitai 2: 0 - ADPS2: 0: ADC prescaler Select Bits Pagal duomenų lapą, šis prescalar turi būti nustatytas taip, kad ADC įvesties dažnis būtų nuo 50 KHz iki 200 KHz. ADC laikrodis yra išvestas iš sistemos laikrodžio naudojant ADPS2: 0 Šie bitai nustato padalijimo koeficientą tarp XTAL dažnio ir įvesties laikrodžio į ADC.

7 veiksmas: jei norite gauti ADC vertę, turite atlikti toliau išvardytą darbą

  • Nustatykite ADC vertę
  • Konfigūruokite išvesties LED kaištį
  • Konfigūruokite ADC aparatinę įrangą
  • Įgalinti ADC
  • Pradėkite analoginių į skaitmenines konversijas
  • KAIP amžinai

JEI ADC reikšmė didesnė nei nustatyta vertė, įjunkite LED ELSE Išjunkite LED

8 veiksmas: nustatykite ADC reikšmę

Kodas: uint8_t ADCValue = 128;

9 veiksmas: sukonfigūruokite išvesties LED kaištį

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

10 veiksmas: sukonfigūruokite ADC aparatinę įrangą

Konfigūruokite ADC aparatinę įrangą

Tai daroma nustatant bitus ADC valdymo registruose. Pirma, nustatykime ADC išankstinį skalą. Remiantis duomenų lapu, šį išankstinį skaliarą reikia nustatyti taip, kad ADC įvesties dažnis būtų nuo 50 KHz iki 200 KHz. ADC laikrodis gaunamas iš sistemos laikrodžio. Esant 1MHz sistemos dažniui, padidinus 8, ADC dažnis bus 125 Khz. Išankstinio mastelio keitimą nustato ADPS bitai ADCSRA registre. Pagal duomenų lapą, norint gauti 8 prescaler, visi trys ADPS2: 0 bitai turi būti nustatyti į 011.

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

Toliau nustatykime ADC etaloninę įtampą. Tai valdo REFS bitai ADMUX registre. Toliau nustatyta atskaitos įtampa į AVCC.

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

Norint per kanalą perduotą kanalą nustatyti į ADC, reikia atitinkamai nustatyti MUX bitus ADMUX registre. Kadangi čia naudojame ADC5

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

Norėdami įjungti ADC laisvai veikiančio režimo režimą, ADCSRA registre įveskite tinkamai pavadintą ADFR bitą:

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

Bus atliktas paskutinis nustatymų pakeitimas, kad būtų paprasčiau skaityti ADC vertę. Nors ADC skiriamoji geba yra 10 bitų, tokios informacijos dažnai nereikia. Ši 10 bitų vertė yra padalinta į du 8 bitų registrus - ADCH ir ADCL. Pagal numatytuosius nustatymus ADCL yra mažiausi 8 bitai ADC vertės, o viršutiniai du yra mažiausi du ADCH bitai. Nustačius ADLAR bitą ADMUX registre, galime išlyginti ADC vertę į kairę. Taip aukščiausi 8 matavimo bitai įrašomi į ADCH registrą, o kiti - į ADCL registrą. Jei tada perskaitysime ADCH registrą, gausime 8 bitų reikšmę, kuri parodys mūsų nuo 0 iki 5 voltų matavimą kaip skaičių nuo 0 iki 255. Mes iš esmės paverčiame 10 bitų ADC matavimą į 8 bitų. Štai kodas, skirtas nustatyti ADLAR bitą:

Kodas:

ADMUX | = (1 << ADLAR); Tai užbaigia šio pavyzdžio ADC aparatinės įrangos sąranką. Prieš pradedant ADC matuoti, reikia nustatyti dar du bitus.

11 veiksmas: įjunkite ADC

Norėdami įjungti ADC, nustatykite ADEN bitą ADCSRA:

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

12 veiksmas: pradėkite analoginių į skaitmenines konversijas

Norint pradėti ADC matavimus, ADCSRA reikia nustatyti ADSC bitą:

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

Šiuo metu ADC pradės nuolat imti įtampą, pateiktą ADC5. Šiuo metu kodas atrodytų taip:

13 žingsnis: KADA amžinai

Liko tik išbandyti ADC vertę ir nustatyti, kad šviesos diodai rodytų aukštą / žemą indikaciją. Kadangi ADC rodmenys ADCH maksimali vertė yra 255, buvo pasirinkta bandymo vertė th, siekiant nustatyti, ar įtampa buvo aukšta, ar žema. Paprastas IF/ELSE teiginys FOR kilpose leis mums įjungti teisingą šviesos diodą:

Kodas

jei (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // Įjunkite šviesos diodą

}

Kitas

{

PORTB & = ~ (1 << PB0); // Išjungti šviesos diodą

}

14 žingsnis: pabaigoje visas kodas yra

Kodas:

#įtraukti

int main (niekinis)

{

uint8_t ADCValue = 128;

DDRB | = (1 << PB0); // Nustatykite LED1 kaip išvestį

ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Nustatykite ADC prescalar į 8 - 125KHz mėginių dažnį 1MHz

ADMUX | = (1 << REFS0); // Nustatykite ADC nuorodą į AVCC

ADMUX | = (1 << ADLAR); // Kairysis ADC rezultato reguliavimas, kad būtų galima lengvai skaityti 8 bitus

ADMUX & = 0xF0;

ADMUX | = 5; // Norint naudoti ADC0, reikėjo pakeisti MUX reikšmes

ADCSRA | = (1 << ADFR); // Nustatykite ADC į laisvai veikiantį režimą

ADCSRA | = (1 << ADEN); // Įgalinti ADC

ADCSRA | = (1 << ADSC); // Pradėkite A2D konversijas, kol (1) // Loop Forever

{

jei (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // Įjunkite LED1

}

Kitas

{

PORTE & = ~ (1 << PB1); // Išjungti LED1

}

}

grįžti 0;

}

Pirmiausia paskelbkite šį vadovėlį Spustelėkite čia

Rekomenduojamas: