INHOUDSOPGAWE:

Inleiding tot ADC in AVR -mikrobeheerder - vir beginners: 14 stappe
Inleiding tot ADC in AVR -mikrobeheerder - vir beginners: 14 stappe

Video: Inleiding tot ADC in AVR -mikrobeheerder - vir beginners: 14 stappe

Video: Inleiding tot ADC in AVR -mikrobeheerder - vir beginners: 14 stappe
Video: How measure DC Voltage and Current and build Energy meter with LCD Display | Lesson 104 2024, November
Anonim
Inleiding tot ADC in AVR -mikrobeheerder | vir beginners
Inleiding tot ADC in AVR -mikrobeheerder | vir beginners

In hierdie handleiding sal u alles weet wat ADC in AVR -mikrobeheerder is

Stap 1: Wat is 'n ADC?

Met 'n ADC, of Analog to Digital Converter, kan 'n mens 'n analoog spanning omskakel na 'n digitale waarde wat deur 'n mikrobeheerder gebruik kan word. Daar is baie bronne van analoog seine wat u dalk wil meet. Daar is analoog sensors beskikbaar wat temperatuur, ligintensiteit, afstand, posisie en krag meet, om maar net 'n paar te noem.

Stap 2: Hoe werk ADC in AVR- Microcontroller

Met die AVR ADC kan die AVR -mikrobeheerder analoog spannings omskakel na digitale waardes met min tot geen eksterne dele nie. Die ATmega8 beskik oor 'n opeenvolgende benadering van 10-bis ADC. Atmega8 het ADC met 7 kanale by PortC. Die ADC het 'n aparte analoge toevoerspanningspen, AVCC. AVCC mag nie meer as ± 0.3V van VCC verskil nie. Die spanningsverwysing kan ekstern ontkoppel word by die AREF -pen. AVCC word gebruik as die spanningsverwysing. Die ADC kan ook ingestel word om deurlopend te werk (die vryloopmodus) of om slegs een omskakeling te doen.

Stap 3: ADC -omskakelingsformule

ADC -omskakelingsformule
ADC -omskakelingsformule

Waar Vin die spanning op die geselekteerde invoerpen is en Vref die geselekteerde spanningsverwysing

Stap 4: Hoe om ADC in ATmega8 op te stel?

Hoe om ADC in ATmega8 op te stel?
Hoe om ADC in ATmega8 op te stel?

Die volgende registers word gebruik vir die implementering van ADC in ATmega8

ADC Multiplexer seleksie

Stap 5: ADLAR -keuse

ADLAR -keuse
ADLAR -keuse
ADLAR -keuse
ADLAR -keuse

Resultaat ADC links verstel Die ADLAR -bit beïnvloed die voorstelling van die ADC -omskakelingsresultaat in die ADC -dataregister. Skryf een aan ADLAR na links om die resultaat aan te pas. Andersins word die resultaat reg aangepas

As 'n ADC -omskakeling voltooi is, word die resultaat gevind in ADCH en ADCL As ADCL gelees word, word die ADC -dataregister nie bygewerk totdat ADCH gelees is nie. As die resultaat dus aangepas word en daar nie meer as 8-bis presisie benodig word nie, is dit voldoende om ADCH te lees. Anders moet ADCL eers gelees word, dan ADCH. Analoog kanaalkeuse Bits Die waarde van hierdie bisse kies watter analoog insette aan die ADC gekoppel is.

Stap 6: ADCSRA -keuse

ADCSRA Keuse
ADCSRA Keuse
ADCSRA Keuse
ADCSRA Keuse

• Bit 7 - ADEN: ADC Aktiveer Deur hierdie bietjie na een te skryf, word die ADC moontlik gemaak. Deur dit op nul te skryf, word die ADC afgeskakel

• Bit 6 - ADSC: ADC -omskakeling begin In enkel -omskakelingsmodus skryf hierdie bis aan een om elke omskakeling te begin. Skryf hierdie stukkie in die vrylopende modus vir een om die eerste omskakeling te begin.

• Bit 5 - ADFR: ADC Free Running Kies As hierdie bit (een) ingestel is, werk die ADC in Free Running -modus. In hierdie modus neem en dateer die ADC die dataregisters voortdurend. As u hierdie bietjie (nul) uitvee, word die vryloopmodus beëindig.

• Bit 4 - ADIF: ADC Interrupt Flag Hierdie bit word gestel wanneer 'n ADC -omskakeling voltooi is en die dataregisters opgedateer word. Die ADC Conversion Complete Interrupt word uitgevoer as die ADIE-bit en die I-bit in SREG ingestel is. ADIF word deur hardeware skoongemaak wanneer die ooreenstemmende onderbrekingshanteringsvektor uitgevoer word. Alternatiewelik word ADIF skoongemaak deur 'n logiese een aan die vlag te skryf.

• Bit 3-ADIE: ADC-onderbreking geaktiveer As hierdie bit na een geskryf word en die I-bit in SREG ingestel is, word die ADC Conversion Complete Interrupt geaktiveer.

• Bits 2: 0 - ADPS2: 0: ADC Prescaler Kies Bits Volgens die datablad moet hierdie prescalar so ingestel word dat die ADC -invoervrekwensie tussen 50 KHz en 200 KHz is. Die ADC -klok word afgelei van die stelselklok met behulp van ADPS2: 0 Hierdie bisse bepaal die verdelingsfaktor tussen die XTAL -frekwensie en die ingangsklok na die ADC.

Stap 7: As u die ADC -waarde wil neem, benodig u 'n bietjie werk wat hieronder uiteengesit word

  • Stel ADC -waarde
  • Stel die uitvoer -LED -pen in
  • Stel ADC -hardeware op
  • Aktiveer ADC
  • Begin analoog na digitale omskakelings
  • TERWYL ewig

AS ADC -waarde hoër dan stel waarde, skakel LED anders aan, skakel LED aan

Stap 8: Stel ADC -waarde in

Kode: uint8_t ADCValue = 128;

Stap 9: Stel die uitvoer -LED -pen in

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

Stap 10: Stel ADC -hardeware op

Stel ADC -hardeware op

Dit word gedoen deur bits in die kontroleregisters vir die ADC in te stel. Laat ons eers die prescalar vir die ADC stel. Volgens die datablad moet hierdie prescalar so ingestel word dat die ADC -insetfrekwensie tussen 50 KHz en 200 KHz is. Die ADC -klok word afgelei van die stelselklok. Met 'n stelselfrekwensie van 1MHz, sal 'n voorskaler van 8 'n ADC -frekwensie van 125 Khz tot gevolg hê. Die voorskaal word bepaal deur die ADPS -bisse in die ADCSRA -register. Volgens die datablad moet al drie ADPS2: 0 -bisse op 011 gestel word om die 8 voorskaler te kry.

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

Laat ons dan die ADC -verwysingspanning stel. Dit word beheer deur die REFS -stukkies in die ADMUX -register. Die volgende stel die verwysingspanning op AVCC.

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

Om die kanaal wat deur die multiplexer na die ADC gestuur word, in te stel, moet die MUX -bisse in die ADMUX -register dienooreenkomstig ingestel word. Aangesien ons hier ADC5 gebruik

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

Om die ADC in die vrylopende modus te plaas, stel die toepaslike ADFR-bit in die ADCSRA-register in:

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

'N Laaste instellingsverandering word aangebring om die lees van die ADC -waarde makliker te maak. Alhoewel die ADC 'n resolusie van 10 bis het, is hierdie veel inligting dikwels nie nodig nie. Hierdie 10 bis waarde word verdeel oor twee 8 bit registers, ADCH en ADCL. Standaard word die laagste 8 bisse van die ADC -waarde in ADCL aangetref, terwyl die boonste twee die laagste twee bisse van ADCH is. Deur die ADLAR -bit in die ADMUX -register in te stel, kan ons die ADC -waarde links belyn. Dit plaas die hoogste 8 bisse van die meting in die ADCH -register, met die res in die ADCL -register. As ons dan die ADCH -register lees, kry ons 'n 8 bis waarde wat ons 0 tot 5 volt meting verteenwoordig as 'n getal van 0 tot 255. Ons verander basies ons 10 bit ADC meting in 'n 8 bit one. Hier is die kode om die ADLAR -bit in te stel:

Kode:

ADMUX | = (1 << ADLAR); Dit voltooi die opstel van die ADC -hardeware vir hierdie voorbeeld. Nog twee stukkies moet ingestel word voordat die ADC metings begin neem.

Stap 11: Aktiveer ADC

Stel die ADEN -bit in ADCSRA in om die ADC te aktiveer:

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

Stap 12: Begin analoog na digitale omskakelings

Om die ADC -metings te begin, moet die ADSC -bit in ADCSRA ingestel word:

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

Op hierdie punt sou die ADC voortdurend begin met die monsterneming van die spanning wat op ADC5 aangebied word. Die kode tot op hierdie punt sou so lyk:

Stap 13: TERWYL ewig

Die enigste ding wat u hoef te doen is om die ADC -waarde te toets en die LED's op 'n hoë / lae aanduiding te stel. Aangesien die ADC -lesing in ADCH 'n maksimum waarde van 255 het, is 'n toetswaarde van th gekies om te bepaal of die spanning hoog of laag was. Met 'n eenvoudige IF/ELSE verklaring in die FOR -lusse kan ons die regte LED aanskakel:

Kode

as (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // Skakel LED aan

}

anders

{

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

}

Stap 14: Aan die einde is die volledige kode

Kode:

#insluit

int main (leeg)

{

uint8_t ADCValue = 128;

DDRB | = (1 << PB0); // Stel LED1 as uitset in

ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Stel ADC prescalar op 8 - // 125KHz monstertempo 1MHz

ADMUX | = (1 << REFS0); // Stel ADC -verwysing op AVCC

ADMUX | = (1 << ADLAR); // Verstel die ADC -resultaat aan die linkerkant om maklike 8 -bis -lees moontlik te maak

ADMUX & = 0xF0;

ADMUX | = 5; // MUX -waardes moes verander word om ADC0 te gebruik

ADCSRA | = (1 << ADFR); // Stel ADC in die vrylopende modus

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

ADCSRA | = (1 << ADSC); // Begin A2D -omskakelings terwyl (1) // Loop Forever

{

as (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // Skakel LED1 aan

}

anders

{

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

}

}

terugkeer 0;

}

Publiseer eers hierdie tutoriaal Klik hier

Aanbeveel: