Cuprins:
- Pasul 1: Ce este un ADC?
- Pasul 2: Cum funcționează ADC în microcontrolerul AVR
- Pasul 3: Formula de conversie ADC
- Pasul 4: Cum se configurează ADC în ATmega8?
- Pasul 5: Selecție ADLAR
- Pasul 6: Selecția ADCSRA
- Pasul 7: Dacă doriți să luați valoare ADC, trebuie să aveți nevoie de unele lucrări care sunt enumerate mai jos
- Pasul 8: Setați valoarea ADC
- Pasul 9: Configurați pinul de ieșire LED
- Pasul 10: Configurați hardware ADC
- Pasul 11: Activați ADC
- Pasul 12: Porniți conversiile analogice la digitale
- Pasul 13: WHILE Forever
- Pasul 14: la sfârșit Codul complet este
Video: Introducere în ADC în microcontrolerul AVR - pentru începători: 14 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:45
În acest tutorial veți ști totul ADC în microcontrolerul AVR
Pasul 1: Ce este un ADC?
Un ADC, sau convertor analog la digital, permite conversia unei tensiuni analogice la o valoare digitală care poate fi utilizată de un microcontroler. Există multe surse de semnale analogice pe care s-ar putea să le măsoare. Există senzori analogici disponibili care măsoară temperatura, intensitatea luminii, distanța, poziția și forța, doar pentru a numi câteva.
Pasul 2: Cum funcționează ADC în microcontrolerul AVR
AVR ADC permite microcontrolerului AVR să convertească tensiunile analogice în valori digitale, cu puține sau fără părți externe. ATmega8 are o aproximare succesivă de 10 biți ADC. ATmega8 are 7 canale ADC la PortC. ADC are un pin de tensiune de alimentare analogic separat, AVCC. AVCC nu trebuie să difere mai mult de ± 0,3V față de VCC.. Referința de tensiune poate fi decuplată extern la pinul AREF. AVCC este utilizat ca referință de tensiune. ADC poate fi setat să ruleze continuu (modul de rulare liberă) sau să facă o singură conversie.
Pasul 3: Formula de conversie ADC
Unde Vin este tensiunea pe pinul de intrare selectat și Vref referința de tensiune selectată
Pasul 4: Cum se configurează ADC în ATmega8?
Următoarele registre sunt utilizate pentru implementarea ADC în ATmega8
Selecție multiplexor ADC
Pasul 5: Selecție ADLAR
ADC Left Adjust Result Bitul ADLAR afectează prezentarea rezultatului conversiei ADC în Registrul de date ADC. Scrieți unul la ADLAR pentru a regla la stânga rezultatul. În caz contrar, rezultatul este corect ajustat
Când o conversie ADC este finalizată, rezultatul se găsește în ADCH și ADCL Când ADCL este citit, Registrul de date ADC nu este actualizat până când ADCH nu este citit. În consecință, dacă rezultatul este lăsat ajustat și nu este necesară o precizie mai mare de 8 biți, este suficient să citiți ADCH. În caz contrar, ADCL trebuie citit mai întâi, apoi ADCH. Biți de selecție a canalului analogic Valoarea acestor biți selectează ce intrări analogice sunt conectate la ADC.
Pasul 6: Selecția ADCSRA
• Bit 7 - ADEN: ADC Enable Scrierea acestui bit pe unul activează ADC. Scriindu-l la zero, ADC este oprit
• Bitul 6 - ADSC: ADC Start Conversion În modul Single Conversion, scrieți acest bit pe unul pentru a începe fiecare conversie. În modul Free Running, scrieți acest bit pe unul pentru a începe prima conversie.
• Bitul 5 - ADFR: ADC Free Running Select Când acest bit este setat (unul), ADC funcționează în modul Free Running. În acest mod, ADC eșantionează și actualizează continuu registrele de date. Ștergerea acestui bit (zero) va termina modul de rulare liberă.
• Bitul 4 - ADIF: Indicator de întrerupere ADC Acest bit este setat la finalizarea unei conversii ADC și la actualizarea registrelor de date. Întreruperea completă a conversiei ADC este executată dacă bitul ADIE și bitul I din SREG sunt setate. ADIF este eliminat de hardware atunci când execută întreruperea corespunzătoare Handling Vector. Alternativ, ADIF este eliminat scriind unul logic pe steag.
• Bitul 3 - ADIE: Activare întrerupere ADC Când acest bit este scris pe unul și bitul I din SREG este setat, întreruperea completă a conversiei ADC este activată.
• Biti 2: 0 - ADPS2: 0: Biti selectați de precalificatori ADC Conform fișei tehnice, acest prescalar trebuie setat astfel încât frecvența de intrare ADC să fie între 50 KHz și 200 KHz. Ceasul ADC este derivat din ceasul sistemului cu ajutorul ADPS2: 0 Acești biți determină factorul de divizare între frecvența XTAL și ceasul de intrare la ADC.
Pasul 7: Dacă doriți să luați valoare ADC, trebuie să aveți nevoie de unele lucrări care sunt enumerate mai jos
- Setați valoarea ADC
- Configurați pinul de ieșire LED
- Configurați hardware ADC
- Activați ADC
- Porniți conversii analogice la digitale
- CÂND În veci
Dacă valoarea ADC este mai mare decât valoarea setată, porniți LED-ul ELSE Dezactivați LED-ul
Pasul 8: Setați valoarea ADC
Cod: uint8_t ADCValue = 128;
Pasul 9: Configurați pinul de ieșire LED
Cod: DDRB | = (1 << PB1);
Pasul 10: Configurați hardware ADC
Configurați hardware ADC
Acest lucru se face prin setarea de biți în registrele de control pentru ADC. În primul rând, să setăm prescalar pentru ADC. Conform fișei tehnice, acest prescalar trebuie setat astfel încât frecvența de intrare ADC să fie între 50 KHz și 200 KHz. Ceasul ADC este derivat din ceasul sistemului. Cu o frecvență de sistem de 1 MHz, un prescaler de 8 va avea ca rezultat o frecvență ADC de 125 Khz. Prescalarea este setată de biții ADPS din registrul ADCSRA. Conform fișei tehnice, toți cei trei biți ADPS2: 0 trebuie să fie setați la 011 pentru a obține 8 prescaler.
Cod: ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
Apoi, să setăm tensiunea de referință ADC. Aceasta este controlată de biții REFS din registrul ADMUX. Următorul setează tensiunea de referință la AVCC.
Cod: ADMUX | = (1 << REFS0);
Pentru a seta canalul trecut prin multiplexor la ADC, biții MUX din registrul ADMUX trebuie să fie setați corespunzător. Deoarece folosim ADC5 aici
Cod: ADMUX & = 0xF0; ADMUX | = 5;
Pentru a pune ADC în modul de rulare liberă, setați bitul ADFR numit în mod corespunzător în registrul ADCSRA:
Cod: ADCSRA | = (1 << ADFR);
O ultimă modificare a setărilor va fi făcută pentru a simplifica citirea valorii ADC. Deși ADC are o rezoluție de 10 biți, multe informații nu sunt deseori necesare. Această valoare de 10 biți este împărțită în două registre de 8 biți, ADCH și ADCL. În mod implicit, cei mai mici 8 biți ai valorii ADC se găsesc în ADCL, cei doi superiori fiind cei mai mici biți ADCH. Prin setarea bitului ADLAR în registrul ADMUX, putem alinia la stânga valoarea ADC. Aceasta plasează cei mai mari 8 biți de măsurare în registrul ADCH, iar restul în registrul ADCL. Dacă citim apoi registrul ADCH, obținem o valoare de 8 biți care reprezintă măsurarea de la 0 la 5 volți ca număr de la 0 la 255. Practic, transformăm măsurarea ADC de 10 biți într-una de 8 biți. Iată codul pentru a seta bitul ADLAR:
Cod:
ADMUX | = (1 << ADLAR); Aceasta finalizează configurarea hardware-ului ADC pentru acest exemplu. Trebuie setate încă două biți înainte ca ADC să înceapă să facă măsurători.
Pasul 11: Activați ADC
Pentru a activa ADC, setați bitul ADEN în ADCSRA:
Cod: ADCSRA | = (1 << ADEN);
Pasul 12: Porniți conversiile analogice la digitale
Pentru a începe măsurătorile ADC, bitul ADSC din ADCSRA trebuie setat:
Cod: ADCSRA | = (1 << ADSC);
În acest moment, ADC ar începe să probeze continuu tensiunea prezentată pe ADC5. Codul până în acest punct ar arăta astfel:
Pasul 13: WHILE Forever
Singurul lucru rămas de făcut este să testați valoarea ADC și să setați LED-urile să afișeze o indicație înaltă / scăzută. Deoarece citirea ADC în ADCH are o valoare maximă de 255, a fost aleasă o valoare de test pentru a determina dacă tensiunea a fost ridicată sau scăzută. O declarație simplă IF / ELSE din buclele FOR ne va permite să aprindem LED-ul corect:
Cod
dacă (ADCH> ADCValue)
{
PORTB | = (1 << PB0); // Porniți LED-ul
}
altceva
{
PORTB & = ~ (1 << PB0); // Opriți LED-ul
}
Pasul 14: la sfârșit Codul complet este
Cod:
#include
int main (nul)
{
uint8_t ADCValue = 128;
DDRB | = (1 << PB0); // Setați LED1 ca ieșire
ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Setați ADC prescalar la 8 - // 125KHz rata de eșantionare 1MHz
ADMUX | = (1 << REFS0); // Setați referința ADC la AVCC
ADMUX | = (1 << ADLAR); // Stânga reglați rezultatul ADC pentru a permite citirea ușoară pe 8 biți
ADMUX & = 0xF0;
ADMUX | = 5; // Valorile MUX trebuiau modificate pentru a utiliza ADC0
ADCSRA | = (1 << ADFR); // Setați ADC în modul Free-Running
ADCSRA | = (1 << ADEN); // Activați ADC
ADCSRA | = (1 << ADSC); // Începeți conversiile A2D în timp ce (1) // Buclați pentru totdeauna
{
dacă (ADCH> ADCValue)
{
PORTB | = (1 << PB0); // Porniți LED1
}
altceva
{
PORTE & = ~ (1 << PB1); // Opriți LED1
}
}
retur 0;
}
Mai întâi publicați acest tutorial Faceți clic aici
Recomandat:
Cum să primiți date de la microcontrolerul STM32 pe computer: 5 pași
Cum să primiți date de la microcontrolerul bazat pe STM32 la computer: Aici în acest tutorial am transmis date de la microcontroler la computer utilizând unul dintre UART-urile STM32l100 mcu
Robotul care evită obstacolele folosind microcontrolerul (Arduino): 5 pași
Robotul de evitare a obstacolelor folosind microcontrolerul (Arduino): În acest instructiv, vă voi învăța cum să faceți un robot de evitare a obstacolelor care funcționează cu Arduino. Trebuie să vă familiarizați cu Arduino. Arduino este o placă de control care utilizează microcontrolerul ATMEGA. Puteți folosi orice versiune de Arduino, dar eu ha
Generați PWM Wave cu microcontrolerul PIC: 6 pași
Generați PWM Wave cu microcontrolerul PIC: CE ESTE PWM? Pentru a înțelege acest concept, luați în considerare în mod clar un impuls de ceas sau orice semnal de undă pătrată, are un ciclu de funcționare de 50%, ceea ce înseamnă că perioada Ton și Toff este aceeași
Introducere în microcontrolerul CloudX: 3 pași
Introducere în microcontrolerul CloudX: microcontrolerul CloudX este un software open source și un computer softwaremic care vă permite să vă creați propriile proiecte interactive. CloudX este un mic chip chip care permite utilizatorilor să-i spună ce trebuie să facă înainte de a lua orice acțiune, acceptă diferite k
Microcontrolerul AVR mic rulează pe o baterie de fructe: 9 pași (cu imagini)
Microcontrolerul AVR mic funcționează pe o baterie de fructe: Unele dintre fructele și legumele pe care le consumăm pot fi folosite pentru a produce electricitate. Electroliții din multe fructe și legume, împreună cu electrozi din diverse metale pot fi folosiți pentru a produce celule primare. Una dintre cele mai ușor disponibile legume