Sadržaj:

Uvod u ADC u mikrokontroleru AVR - za početnike: 14 koraka
Uvod u ADC u mikrokontroleru AVR - za početnike: 14 koraka

Video: Uvod u ADC u mikrokontroleru AVR - za početnike: 14 koraka

Video: Uvod u ADC u mikrokontroleru AVR - za početnike: 14 koraka
Video: mikroPIC uputstvo 2024, Studeni
Anonim
Uvod u ADC u mikrokontroleru AVR | za početnike
Uvod u ADC u mikrokontroleru AVR | za početnike

U ovom vodiču ćete znati sve o ADC -u u mikrokontroleru AVR

Korak 1: Što je ADC?

ADC ili analogno -digitalni pretvarač omogućuje pretvaranje analognog napona u digitalnu vrijednost koju može koristiti mikrokontroler. Postoji mnogo izvora analognih signala koje bi netko želio izmjeriti. Dostupni su analogni senzori koji mjere temperaturu, intenzitet svjetla, udaljenost, položaj i silu, da spomenemo samo neke.

Korak 2: Kako funkcionira ADC u AVR-mikrokontroleru

AVR ADC omogućuje AVR mikrokontroleru pretvaranje analognih napona u digitalne vrijednosti s malo vanjskih dijelova ili bez njih. ATmega8 ima 10-bitni uzastopni aproksimacijski ADC. ATmega8 ima 7-kanalni ADC na PortC-u. ADC ima zasebni analogni pin naponskog napona, AVCC. AVCC se ne smije razlikovati više od ± 0,3 V od VCC -a. Referentni napon može biti vanjski odvojen na AREF pinu. Kao referentni napon koristi se AVCC. ADC se također može postaviti da radi neprekidno (način rada slobodnog rada) ili da izvrši samo jednu pretvorbu.

Korak 3: Formula konverzije ADC -a

Formula konverzije ADC -a
Formula konverzije ADC -a

Gdje je Vin napon na odabranom ulaznom pinu, a Vref odabrana referentna vrijednost napona

Korak 4: Kako konfigurirati ADC u ATmega8?

Kako konfigurirati ADC u ATmega8?
Kako konfigurirati ADC u ATmega8?

Za implementaciju ADC -a u ATmega8 koriste se sljedeći registri

Odabir ADC multipleksera

Korak 5: ADLAR odabir

ADLAR Odabir
ADLAR Odabir
ADLAR Odabir
ADLAR Odabir

Rezultat prilagodbe lijevog ADC -a Bit ADLAR utječe na prikaz rezultata konverzije ADC -a u ADC podatkovnom registru. Napišite jedan u ADLAR kako biste lijevo prilagodili rezultat. U suprotnom, rezultat je ispravno podešen

Kad je konverzija ADC -a dovršena, rezultat se nalazi u ADCH -u i ADCL -u. Kad se čita ADCL, ADC registar podataka se ne ažurira sve dok se ne pročita ADCH. Slijedom toga, ako je rezultat lijevo podešen i nije potrebna više od 8-bitne preciznosti, dovoljno je pročitati ADCH. Inače, prvo se mora pročitati ADCL, a zatim ADCH. Bitovi za odabir analognih kanala Vrijednost ovih bitova odabire koji su analogni ulazi spojeni na ADC.

Korak 6: Odabir ADCSRA -e

Odabir ADCSRA -e
Odabir ADCSRA -e
Odabir ADCSRA -e
Odabir ADCSRA -e

• Bit 7 - ADEN: Omogući ADC Zapisivanje ovog bita u jedan omogućuje ADC. Zapisujući ga na nulu, ADC se isključuje

• Bit 6 - ADSC: ADC Start Conversion U načinu Single Conversion, upišite ovaj bit u jedan za početak svake pretvorbe. U načinu rada Slobodno trčanje upišite ovaj bit u jedan za početak prve pretvorbe.

• Bit 5 - ADFR: Odabir slobodnog trčanja ADC -a Kada je postavljen ovaj bit (jedan), ADC radi u načinu rada slobodnog trčanja. U ovom načinu rada ADC kontinuirano uzorkuje i ažurira registre podataka. Brisanjem ovog bita (nula) prekinuti će se način rada Free Running.

• Bit 4 - ADIF: Zastavica prekida ADC -a Ovaj bit se postavlja kada se završi konverzija ADC -a i ažuriraju registri podataka. Prekid potpunog pretvaranja ADC-a izvršava se ako su postavljeni bit ADIE i I-bit u SREG-u. ADIF se briše hardverom prilikom izvođenja odgovarajućeg vektora rukovanja prekidom. Alternativno, ADIF se briše upisivanjem logičkog u zastavicu.

• Bit 3-ADIE: Omogućivanje prekida ADC-a Kada je ovaj bit upisan u jedan i postavljen je I-bit u SREG-u, aktivira se prekid dovršenog pretvaranja ADC-a.

• Bitovi 2: 0 - ADPS2: 0: Odabir bitova pretkaler ADC -a Prema podatkovnom listu, ovaj predskalar treba postaviti tako da ulazna frekvencija ADC -a bude između 50 KHz i 200 KHz. ADC sat izveden je iz takta sustava uz pomoć ADPS2: 0 Ovi bitovi određuju faktor podjele između XTAL frekvencije i ulaznog takta ADC -a.

Korak 7: Ako želite uzeti ADC vrijednost, morate obaviti neki posao koji je dolje naveden

  • Postavite vrijednost ADC -a
  • Konfigurirajte izlazni LED pin
  • Konfigurirajte ADC hardver
  • Omogućite ADC
  • Pokrenite analogno -digitalnu konverziju
  • DOK ZAUVIJEK

AKO je vrijednost ADC -a veća od zadane vrijednosti, uključite LED ELSE Isključite LED

Korak 8: Postavite vrijednost ADC -a

Kôd: uint8_t ADCValue = 128;

Korak 9: Konfigurirajte izlazni LED pin

Šifra: DDRB | = (1 << PB1);

Korak 10: Konfigurirajte ADC hardver

Konfigurirajte ADC hardver

To se postiže postavljanjem bitova u upravljačke registre za ADC. Prvo, postavimo preskalar za ADC. Prema podatkovnom listu, ovaj preskalar treba postaviti tako da ulazna frekvencija ADC -a bude između 50 KHz i 200 KHz. ADC sat izveden je iz takta sustava. Sa frekvencijom sustava od 1MHz, predskaler od 8 rezultirat će ADC frekvencijom od 125 Khz. Predmjer se postavlja ADPS bitovima u registru ADCSRA. Prema podatkovnom listu, sva tri bita ADPS2: 0 moraju biti postavljena na 011 da bi se dobio 8 predkalera.

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

Zatim postavimo referentni napon ADC -a. To se kontrolira REFS bitovima u ADMUX registru. U nastavku se referentni napon postavlja na AVCC.

Šifra: ADMUX | = (1 << REFS0);

Za postavljanje kanala koji prolazi kroz multiplekser na ADC, MUX bitovi u ADMUX registru moraju biti postavljeni na odgovarajući način. Budući da ovdje koristimo ADC5

Šifra: ADMUX & = 0xF0; ADMUX | = 5;

Kako biste ADC prebacili u slobodni način rada, postavite ADFR bit prikladnog naziva u ADCSRA registar:

Šifra: ADCSRA | = (1 << ADFR);

Učinit će se posljednja promjena postavki kako bi se čitanje vrijednosti ADC -a učinilo jednostavnijim. Iako ADC ima rezoluciju od 10 bita, toliko informacija često nije potrebno. Ova 10 -bitna vrijednost podijeljena je na dva 8 -bitna registra, ADCH i ADCL. Prema zadanim postavkama, najnižih 8 bitova ADC vrijednosti nalazi se u ADCL -u, a gornja dva su dva najniža bita ADCH -a. Postavljanjem bita ADLAR u ADMUX registar možemo lijevo poravnati vrijednost ADC -a. Ovo stavlja najvećih 8 bitova mjerenja u ADCH registar, a ostatak u ADCL registar. Ako tada pročitamo ADCH registar, dobit ćemo 8 -bitnu vrijednost koja predstavlja naše mjerenje od 0 do 5 volti kao broj od 0 do 255. U osnovi pretvaramo naše 10 -bitno ADC mjerenje u 8 -bitno. Evo koda za postavljanje ADLAR bita:

Kodirati:

ADMUX | = (1 << ADLAR); Time je dovršeno postavljanje ADC hardvera za ovaj primjer. Potrebno je postaviti još dva bita prije nego što ADC počne mjeriti.

Korak 11: Omogućite ADC

Da biste omogućili ADC, postavite ADEN bit u ADCSRA:

Šifra: ADCSRA | = (1 << ADEN);

Korak 12: Pokrenite analogno -digitalnu konverziju

Za pokretanje ADC mjerenja potrebno je postaviti ADSC bit u ADCSRA -i:

Šifra: ADCSRA | = (1 << ADSC);

U ovom trenutku, ADC će početi kontinuirano uzorkovati napon prikazan na ADC5. Kod do ove točke izgledao bi ovako:

Korak 13: DOK ZAUvijek

Jedino što treba učiniti je provjeriti vrijednost ADC -a i postaviti LED diode na prikaz visoke / niske indikacije. Budući da očitanje ADC -a u ADCH -u ima maksimalnu vrijednost 255, odabrana je testna vrijednost th kako bi se utvrdilo je li napon visok ili nizak. Jednostavna naredba IF/ELSE u FOR petljama omogućit će nam uključivanje ispravne LED diode:

Kodirati

if (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // Uključivanje LED diode

}

drugo

{

PORTB & = ~ (1 << PB0); // Isključivanje LED diode

}

Korak 14: Na kraju kompletna šifra jest

Kodirati:

#uključi

int main (void)

{

uint8_t ADCValue = 128;

DDRB | = (1 << PB0); // Postavite LED1 kao izlaz

ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Postavite ADC prescalar na 8 - // 125KHz brzinu uzorkovanja 1MHz

ADMUX | = (1 << REFS0); // Postavite ADC referencu na AVCC

ADMUX | = (1 << ADLAR); // Lijevo podesite rezultat ADC -a kako biste omogućili jednostavno 8 -bitno čitanje

ADMUX & = 0xF0;

ADMUX | = 5; // MUX vrijednosti je potrebno promijeniti za korištenje ADC0

ADCSRA | = (1 << ADFR); // Postavite ADC na Free-Running Mode

ADCSRA | = (1 << ADEN); // Omogući ADC

ADCSRA | = (1 << ADSC); // Pokretanje A2D konverzija dok (1) // Zauvijek petlja

{

if (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // Uključivanje LED1

}

drugo

{

PORTE & = ~ (1 << PB1); // Isključivanje LED1

}

}

return 0;

}

Prvo objavite ovaj vodič Kliknite ovdje

Preporučeni: