ADC este convertorul analog în digital, care convertește datele analogice în format digital; de obicei este folosit pentru a converti tensiunea analogică în format digital. Semnalul analogic are un număr infinit de valori precum o undă sinusoidală sau vorbirea noastră, ADC le convertește în niveluri sau stări particulare, care pot fi măsurate în numere ca mărime fizică. În loc de conversie continuă, ADC convertește datele periodic, care este de obicei cunoscută sub numele de rată de eșantionare. Modem telefoniceste unul dintre exemplele ADC, care este utilizat pentru internet, convertește datele analogice în date digitale, astfel încât computerul să poată înțelege, deoarece computerul poate înțelege doar datele digitale. Avantajul major al utilizării ADC este că zgomotul poate fi eliminat eficient din semnalul original, iar semnalul digital poate călători mai eficient decât unul analogic. Acesta este motivul pentru care sunetul digital este foarte clar, în timp ce ascultați.
În prezent, există o mulțime de microcontrolere pe piață care au incorporat ADC cu unul sau mai multe canale. Și folosind registrul lor ADC putem interfața. Când selectăm familia de microcontrolere 8051 pentru realizarea oricărui proiect, în care avem nevoie de o conversie ADC, atunci folosim ADC extern. Unele cipuri ADC externe sunt 0803.0804.0808.0809 și există multe altele. Astăzi vom interfața ADC pe 8 canale cu microcontrolerul AT89s52 și anume ADC0808 / 0809.
Componente:
- Microcontroler 8051 (AT89S52)
- ADC0808 / 0809
- 16x2 LCD
- Rezistor (1k, 10k)
- POT (10k x4)
- Condensator (10uf, 1000uf)
- Led roșu
- Pâine sau PCB
- 7805
- 11,0592 MHz Cristal
- Putere
- Conectarea firelor
ADC0808 / 0809:
ADC0808 / 0809 este un dispozitiv CMOS monolitic și logică de control compatibilă cu microprocesor și are 28 de pini, care oferă o valoare de 8 biți în ieșire și pini de intrare ADC pe 8 canale (IN0-IN7). Rezoluția sa este de 8, astfel încât să poată codifica datele analogice într-unul dintre cele 256 de niveluri (2 8). Acest dispozitiv are trei linii de adresă de canal și anume: ADDA, ADDB și ADDC pentru selectarea canalului. Mai jos este Diagrama Pin pentru ADC0808:
ADC0808 / 0809 necesită un impuls de ceas pentru conversie. Îl putem furniza utilizând oscilatorul sau utilizând microcontrolerul. În acest proiect am aplicat frecvența utilizând microcontrolerul.
Putem selecta orice canal de intrare utilizând liniile de adresă, de exemplu, putem selecta linia de intrare IN0 păstrând toate cele trei linii de adresă (ADDA, ADDB și ADDC) joase. Dacă dorim să selectăm canalul de intrare IN2, atunci trebuie să menținem ADDA, ADDB scăzut și ADDC ridicat. Pentru a selecta toate celelalte canale de intrare, aruncați o privire pe tabelul dat:
Nume canal ADC |
PIN ADDC |
PIN ADDB |
PIN ADDA |
IN0 |
SCĂZUT |
SCĂZUT |
SCĂZUT |
ÎN 1 |
SCĂZUT |
SCĂZUT |
ÎNALT |
IN2 |
SCĂZUT |
ÎNALT |
SCĂZUT |
IN3 |
SCĂZUT |
ÎNALT |
ÎNALT |
IN4 |
ÎNALT |
SCĂZUT |
SCĂZUT |
IN5 |
ÎNALT |
SCĂZUT |
ÎNALT |
IN6 |
ÎNALT |
ÎNALT |
SCĂZUT |
IN7 |
ÎNALT |
ÎNALT |
ÎNALT |
Descrierea circuitului:
Circuitul „Interfață ADC0808 cu 8051” este puțin complex, care conține mai multe fire de conectare pentru conectarea dispozitivului unul la altul. În acest circuit am folosit în principal AT89s52 ca microcontroler 8051, ADC0808, potențiometru și LCD.
Un LCD 16x2 este conectat cu microcontrolerul 89s52 în modul pe 4 biți. Pinul de control RS, RW și En sunt conectate direct la pinul P2.0, GND și P2.2. Și pinul de date D4-D7 este conectat la pinii P2.4, P2.5, P2.6 și P2.7 din 89s52. Pinul de ieșire ADC0808 este conectat direct la portul P1 al AT89s52. Pinii de linie de adresă ADDA, ADDB, AADC sunt conectați la P3.0, P3.1 și P3.2.
ALE (Activare blocare adresă), SC (Start conversie), EOC (Sfârșit conversie), OE (Activare ieșire) și pinii de ceas sunt conectați la P3.3, P3.4, P3.5, P3.6 și P3.7.
Și aici am folosit trei potențiometre conectate la pinii 26, 27 și 28 din ADC0808.
Pentru alimentarea circuitului se utilizează o baterie de 9 volți și un regulator de tensiune de 5 volți și anume 7805.
Lucru:
În acest proiect am interfațat trei canale de ADC0808. Și pentru demonstrație am folosit trei rezistențe variabile. Când alimentăm circuitul, atunci microcontrolerul inițializează LCD-ul folosind comanda corespunzătoare, dă ceasul cipului ADC, selectează canalul ADC folosind linia de adresă și trimite semnalul de conversie de pornire la ADC. După aceasta, ADC citește mai întâi intrarea selectată a canalului ADC și dă ieșirea convertită la microcontroler. Apoi microcontrolerul își arată valoarea în poziția Ch1 în LCD. Și apoi microcontrolerul schimbă canalul ADC utilizând linia de adresă. Și apoi ADC citește canalul selectat și trimite ieșirea către microcontroler. Și afișați pe ecranul LCD sub numele Ch2. Și ca înțelept pentru alte canale.
Funcționarea ADC0808 este mult similară cu funcționarea ADC0804. În acest sens, primul microcontroler furnizează un semnal de ceas de 500 KHz către ADC0808, utilizând întreruperea Timer 0, deoarece ADC necesită un semnal de ceas pentru a funcționa. Acum, microcontrolerul trimite un semnal de nivel LOW la HIGH la pinul ALE (pinul său activ-înalt) al ADC0808 pentru a activa zăvorul în adresă. Apoi, aplicând semnalul HIGH la LOW Level la SC (Start Conversion), ADC începe conversia analogică la digitală. Și apoi așteptați ca pinul EOC (End of Conversion) să devină LOW. Când EOC scade, înseamnă că conversia analogică la digitală a fost finalizată, iar datele sunt gata de utilizare. După aceasta, microcontrolerul activează linia de ieșire prin aplicarea unui semnal HIGH la LOW la pinul OE al ADC0808.
ADC0808 oferă un raport de ieșire de conversie metrică la pinii de ieșire. Iar formula pentru conversia radiometrică este dată de:
V în / (V fs -V z) = D x / (D max -D min)
Unde
V in este tensiunea de intrare pentru conversie
V fs este la scară completă Tensiunea
V z este zero tensiune
D x este punctul de date fiind măsurat
D max este Limita maximă de date
D min este Limita minimă de date
Explicația programului:
În program, mai întâi de toate, includem fișierul antet nisip definește pinii variabili și de intrare și ieșire pentru ADC și LCD.
# include
A fost creată funcția pentru crearea întârzierii (întârziere nulă), împreună cu unele funcții LCD, cum ar fi inițializarea LCD, tipărirea șirului, pentru comenzi LCD etc. Le puteți găsi cu ușurință în Cod. Verificați acest articol pentru interfața LCD cu 8051 și funcțiile sale.
După aceasta, în programul principal, am inițializat ecranul LCD și setăm pinii EOC, ALE, EO, SC în consecință.
void main () {int i = 0; eoc = 1; ale = 0; oe = 0; sc = 0; TMOD = 0x02; TH0 = 0xFD; lcd_ini (); lcdprint ("ADC 0808/0809");
Și apoi programul citește ADC și stochează ieșirea ADC într-o variabilă și apoi o trimite la LCD după conversia zecimală în ASCII, folosind funcțiile void read_adc () și void adc (int i):
void read_adc () {număr = 0; ale = 1; sc = 1; întârziere (1); ale = 0; sc = 0; while (eoc == 1); while (eoc == 0); oe = 1; număr = input_port; întârziere (1); oe = 0; } void adc (int i) {switch (i) {case 0: ADDC = 0; ADDB = 0; ADDA = 0; lcdcmd (0xc0); read_adc ();