În controlerul Atmega8, ADC are următoarele caracteristici
- Rezoluție 10 biți,
- Timpul pentru conversia unei indicații de la 13 la 250 de microsecunde, în funcție de dimensiunea bitului de măsurare, precum și frecvența de ceas a oscilatorului, controlerul de ceasornic,
- Suport pentru declanșarea întreruperilor,
Există multe caracteristici diferite, cu care, probabil, ne vom cunoaște în viitor.
Cum funcționează conversia digitală?
Tensiunea de referință este luată și comparată cu tensiunea măsurată. În consecință, tensiunea de referință trebuie să fie întotdeauna mai mare decât tensiunea măsurată. Dacă nu este cazul, atunci va fi necesar să se aplice separatoare de tensiune.
Prezentăm schematic procesul de măsurare
O piesă este o serie de măsurători. Este între zero și tensiunea de referință. Și săgeata este tensiunea măsurată.
Acest segment este împărțit la jumătate, iar ADC estimează ce jumătate este tensiunea aplicată
Dacă este în partea de zero, atunci 0 este scris la cel mai semnificativ bit al rezultatului, iar dacă în partea de tensiune maximă, atunci una. Vom avea unul. Apoi, jumătate din segmentul pe care se află tensiunea măsurată este împărțit în jumătate, iar ADC măsoară din nou în care jumătate din segmentul deja pe care avem tensiunea măsurată
Evaluarea urmează același principiu - în ce direcție este segmentul. În cazul nostru va fi 0. Și acest zero este scris la următorul bit inferior
Apoi, acest trimestru este împărțit din nou pe jumătate, iar ADC estimează din nou locul în care se află segmentul
Și ADC continuă acest proces până când celulele pentru biți se termină. Asta este, dacă vom folosi modul de 10 biți, atunci. respectiv, și vor fi 10 măsurători similare și 10 biți din valoare vor fi umplută. Cele mai multe biți, cu cât rezultatul este mai precis, dar va dura mai mult timp și un ADC mai serios și mai precis. Având acest rezultat, va fi ușor pentru calculul valorii tensiunii măsurate. Știm. că dacă avem un ADC de 10 biți, atunci acest rezultat se află în intervalul de la 0 la 1024, obținem doar 1023 bucăți. Și apoi ne împărțim rezultatul nostru cu 1023 și înmulțim cu valoarea tensiunii de referință.
Să vedem diagrama bloc a ADC-ului în controlerul Atmega8
Vedem că avem un multiplexor care are 8 canale, o intrare pentru tensiunea AREF. Există, de asemenea, un autobuz de date pe 8 biți, valorile din care sunt înscrise într-un registru specific. Există un registru de date, un registru de control și stare și un registru de control pentru multiplexor.
Vom folosi prima intrare a ADC0 și ca sursă a tensiunii măsurate vom folosi piciorul central al unui rezistor variabil conectat la contactele de putere
Vom lucra mai întâi în Proteus. De asemenea, vedem că avem un afișaj conectat în modul cel mai obișnuit.
De asemenea, vom conecta totul la controlerul live
Există mai multe variante de tensiuni de referință pe care le putem folosi în ADC-ul nostru. Vom folosi tensiunea de referință internă la 2,56 volți, este mai ușor, nu trebuie să conectați nimic. Poate că această opțiune nu are o precizie foarte puternică, dar nu este nevoie să creăm un instrument de măsură precis. Avem o sarcină - să studiem posibilitatea utilizării ADC în controlerul AVR.
Și aici este tabelul de variante ale tensiunilor de încercare pentru ADC
Să prezentăm aceste opțiuni de mai sus pe masă. 1 variantă - este tensiunea internă de referință egală cu tensiunea de alimentare, opțiunea 2 - tensiune de referință AREF este furnizat la intrarea din exterior, varianta 3 - internă 2.56 volt folosind un condensator extern pe care am deja cositorite la PCB la anumite picioare controler de depanare.
ADC are, de asemenea, un divizor de frecvență de la 2 la 128. Acest divizor pentru a se asigura că am realizat frecvența ADC nu mai mult de 200 kHz, în caz contrar precizia de măsurare va fi foarte mică și ne-am confundat biții cei mai puțin semnificativi. Dacă solicităm o măsurare a vitezei și avem deja o precizie atât de importantă, atunci vom putea folosi frecvențe de măsurare chiar mai mari.
Acum, un pic mai aproape familiarizat cu registrele ADC.
Înregistrați ADCSRA - registrul de control și stare
ADEN - acest bit include un ADC.
ADSC - când este setat la 1, ADC pornește conversia.
ADFR - utilizat în mod cu întreruperi. Atunci când este setat la 1, este activat un mod circular, în care măsurătorile urmează automat unul după altul.
Bit ADIF, folosit și numai în modul de întrerupere. Acesta este stegul de întrerupere, care este setat în anumite condiții.
ADIE - un pic care include modul de întrerupere.
ADPS2-ADPS0 - biți, a căror combinație depinde de valoarea divizorului
Registrul ADMUX este un registru pentru controlul canalelor multiplexorului ADC
Dar, pe lângă biții de control al canalelor, acest registru are mai mulți biți de control
REFS1-REFS0 - biți care includ un anumit mod de utilizare a tensiunii de referință. Tabelul a fost postat pe această pagină de mai sus.
ADLAR este bitul pentru aranjarea locației celor 10 biți măsurați în doi octeți ai perechii de date de registru. O să ne cunoaștem puțin mai târziu această locație.
MUX3-MUX0 - biți care includ un anumit canal al multiplexorului
Din aceasta vedem că putem utiliza mai multe canale dintr-o dată, la rândul lor, alternativ, inclusiv diverse combinații ale acestor biți. De asemenea, mai jos sunt două combinații pentru calibrarea ADC-ului nostru.
Ei bine, în sfârșit, perechea registru ADCH și ADCL. Se compune din octetul înalt și scăzut în care este înregistrat rezultatul măsurat. Și exact cum se potrivește acolo, acest rezultat depinde de starea bitului ADLAR, considerat mai sus în registrul ADMUX
Adică, în cazul în care bitul nu este setat ADLAR, cele mai mici de 8 biți ai rezultatului sunt în octetul scăzut de perechi de registru, și 2 biți de înaltă ordine - în biți de mare octet junior. Dacă ne-bit ADLAR este setat, cei 8 biți mai semnificativi ai rezultatului sunt octet satrshem și 2 junior în partea superioară a 2 biți ale perechii de registru octet scăzut. A doua opțiune este interesantă pentru noi când folosim modul pe 8 biți. În acest caz, citim doar octetul înalt.
Proiectul a fost creat în întregime din proiectul lecției privind studierea modului de conectare pe 4 biți LCDTest09 și a fost numit MyADCLCD.
De asemenea, pentru codul de implementare a periferiei ADC, două fișiere adc.h și adc.c. În consecință, fișierul adc.h a fost conectat în fișierul principal.h și în adc.c.
În fișierul MyADCLCD.c, codul a fost, de asemenea, copiat complet din fișierul principal de proiect Test09, toate au fost șterse toate inutile. Codul din acest fișier după operația dată a avut următoarea formă
void port_ini (void)