Sadržaj:

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

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

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

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

Korak 1: Šta 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 neko ž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ćava AVR mikrokontroleru pretvaranje analognih napona u digitalne vrijednosti sa 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 kontinuirano (način rada u slobodnom hodu) ili da izvrši samo jednu konverziju.

Korak 3: ADC konverzijska formula

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

Izbor ADC multipleksera

Korak 5: ADLAR odabir

ADLAR Selection
ADLAR Selection
ADLAR Selection
ADLAR Selection

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

Kad je konverzija ADC -a završena, rezultat se nalazi u ADCH -u i ADCL -u. Kada 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. U suprotnom, 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

ADCSRA Selection
ADCSRA Selection
ADCSRA Selection
ADCSRA Selection

• Bit 7 - ADEN: ADC Enable Opisivanje ovog bita u jedan omogućava ADC. Ako ga upišete 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 konverzije. U načinu rada Slobodno trčanje upišite ovaj bit u jedan za početak prve konverzije.

• Bit 5 - ADFR: ADC izbor slobodnog trčanja Odabir Kad 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. Brisanje ovog bita (nula) će prekinuti 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 izvodi se ako su postavljeni ADIE bit i I-bit u SREG-u. ADIF se briše hardverom prilikom izvršavanja odgovarajućeg vektora rukovanja prekidom. Alternativno, ADIF se briše upisivanjem logičkog u zastavicu.

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

• Bitovi 2: 0 - ADPS2: 0: Odabir bitova za pretkaler ADC -a Prema podatkovnom listu, ovaj preskalar treba postaviti tako da je ulazna frekvencija ADC -a između 50 KHz i 200 KHz. ADC sat izveden je iz sistemskog takta 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ći ADC
  • Pokrenite analogno -digitalnu konverziju
  • DOK ZAUVEK

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

Korak 8: Postavite vrijednost ADC -a

Kod: 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 kontrolne registre za ADC. Prvo, postavimo predskalar za ADC. Prema tablici s podacima, ovaj preskalar treba postaviti tako da ulazna frekvencija ADC -a bude između 50 KHz i 200 KHz. ADC sat izveden je iz sistemskog takta. Sa sistemskom frekvencijom od 1MHz, predskaler od 8 rezultirat će ADC frekvencijom od 125 Khz. Predkaliriranje se postavlja pomoću ADPS bitova u registru ADCSRA. Prema tablici s podacima, 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 je postavljen referentni napon na AVCC.

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

Da biste kanal koji je prošao kroz multiplekser postavili 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;

Da biste ADC prebacili u slobodni način rada, postavite odgovarajući naziv ADFR bita 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 je podijeljena 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 ADLAR bita u ADMUX registar možemo lijevo poravnati ADC vrijednost. Ovo stavlja najvećih 8 bita 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:

Šifra:

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 bi započeo kontinuirano uzorkovanje napona prikazanog na ADC5. Kod do ove tačke bi izgledao ovako:

Korak 13: DOK ZAUvijek

Jedino što treba učiniti je provjeriti vrijednost ADC -a i postaviti LED diode da prikazuju indikaciju visoke / niske. 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. Jednostavan IF/ELSE izraz u FOR petljama omogućit će nam da uključimo ispravnu LED diodu:

Kod

if (ADCH> ADCValue)

{

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

}

else

{

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

}

Korak 14: Na kraju kompletna šifra je

Šifra:

#include

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 brzina uzorkovanja 1MHz

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

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

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čite LED1

}

else

{

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

}

}

return 0;

}

Prvo objavite ovaj vodič Kliknite ovdje

Preporučuje se: