ADC er den analoge til digitale konverter, der konverterer analoge data til digitalt format; normalt bruges det til at konvertere analog spænding til digitalt format. Analogt signal har uendelig antal værdier som en sinusbølge eller vores tale, ADC konverterer dem til bestemte niveauer eller tilstande, som kan måles i tal som en fysisk størrelse. I stedet for kontinuerlig konvertering konverterer ADC data med jævne mellemrum, hvilket normalt kaldes samplingsfrekvens. Telefonmodemer et af eksemplerne på ADC, som bruges til internet, konverterer den analoge data til digitale data, så computeren kan forstå, fordi computeren kun kan forstå digitale data. Den største fordel ved at bruge ADC er, at vi støj effektivt kan elimineres fra det originale signal, og digitalt signal kan rejse mere effektivt end analogt. Det er grunden til, at digital lyd er meget klar, mens du lytter.
I øjeblikket er der mange mikrokontrollere på markedet, der har indbygget ADC med en eller flere kanaler. Og ved at bruge deres ADC-register kan vi grænseflade. Når vi vælger 8051 mikrokontrollerfamilie til at lave ethvert projekt, hvor vi har brug for en ADC-konvertering, bruger vi ekstern ADC. Nogle eksterne ADC-chips er 0803,0804,0808,0809, og der er mange flere. I dag skal vi interface 8-kanals ADC med AT89s52 Microcontroller, nemlig ADC0808 / 0809.
Komponenter:
- 8051 Microcontroller (AT89S52)
- ADC0808 / 0809
- 16x2 LCD
- Modstand (1k, 10k)
- POT (10k x4)
- Kondensator (10uf, 1000uf)
- Rød ledet
- Brødbræt eller PCB
- 7805
- 11.0592 MHz krystal
- Strøm
- Tilslutning af ledninger
ADC0808 / 0809:
ADC0808 / 0809 er en monolitisk CMOS-enhed og mikroprocessorkompatibel kontrollogik og har 28 ben, som giver 8-bit værdi i output og 8-kanals ADC input pins (IN0-IN7). Dens opløsning er 8, så den kan kode de analoge data til et af de 256 niveauer (2 8). Denne enhed har tre kanal adresselinjer, nemlig: ADDA, ADDB og ADDC til valg af kanal. Nedenfor er pin-diagrammet til ADC0808:
ADC0808 / 0809 kræver en impuls til konvertering. Vi kan levere det ved hjælp af oscillator eller ved hjælp af mikrocontroller. I dette projekt har vi anvendt frekvens ved hjælp af mikrocontroller.
Vi kan vælge en hvilken som helst inputkanal ved hjælp af adresselinjerne, ligesom vi kan vælge inputlinjen IN0 ved at holde alle tre adresselinjer (ADDA, ADDB og ADDC) lave. Hvis vi vil vælge inputkanal IN2, skal vi holde ADDA, ADDB lav og ADDC høj. For at vælge alle de andre inputkanaler, se på den givne tabel:
ADC-kanalnavn |
TILFØJ PIN |
TILFØJ PIN |
ADDA PIN-kode |
IN0 |
LAV |
LAV |
LAV |
IN1 |
LAV |
LAV |
HØJ |
IN2 |
LAV |
HØJ |
LAV |
IN3 |
LAV |
HØJ |
HØJ |
IN4 |
HØJ |
LAV |
LAV |
IN5 |
HØJ |
LAV |
HØJ |
IN6 |
HØJ |
HØJ |
LAV |
IN7 |
HØJ |
HØJ |
HØJ |
Beskrivelse af kredsløb:
Kredsløbet til "Interfacing ADC0808 med 8051" er lidt komplekst, som indeholder mere forbindelsesledning til at forbinde enheden til hinanden. I dette kredsløb har vi hovedsageligt brugt AT89s52 som 8051 mikrokontroller, ADC0808, potentiometer og LCD.
En 16x2 LCD er forbundet med 89s52 mikrokontroller i 4-bit tilstand. Kontrolstift RS, RW og En er direkte forbundet til pin P2.0, GND og P2.2. Og datapind D4-D7 er forbundet til ben P2.4, P2.5, P2.6 og P2.7 af 89s52. ADC0808 udgangsstift er direkte forbundet til port P1 på AT89s52. Adresselinjestifter ADDA, ADDB, AADC er forbundet med P3.0, P3.1 og P3.2.
ALE (aktivering af adresselås), SC (startkonvertering), EOC (slutning af konvertering), OE (udgangsaktivering) og urstifter er forbundet ved P3.3, P3.4, P3.5, P3.6 og P3.7.
Og her har vi brugt tre potentiometre forbundet ved pin 26, 27 og 28 i ADC0808.
Et 9 volt batteri og en 5 volt spændingsregulator, nemlig 7805, bruges til at tænde for kredsløbet.
Arbejder:
I dette projekt har vi grænsefladen tre kanaler i ADC0808. Og til demonstration har vi brugt tre variable modstande. Når vi tænder for kredsløbet, initialiserer mikrokontrolleren LCD'et ved hjælp af passende kommando, giver ur til ADC-chip, vælger ADC-kanal ved hjælp af adresselinje og sender startkonverteringssignal til ADC. Efter denne ADC læser først den valgte ADC-kanalindgang og giver sin konverterede output til mikrocontroller. Derefter viser mikrocontroller sin værdi på Ch1-position i LCD. Og derefter skifter mikrokontroller ADC-kanal ved hjælp af adresselinjen. Og så læser ADC den valgte kanal og sender output til mikrocontroller. Og vis på LCD som navn Ch2. Og som klogt for andre kanaler.
Arbejde med ADC0808 svarer meget til arbejde med ADC0804. I dette leverer den første mikrocontroller et 500 KHz ursignal til ADC0808 ved hjælp af Timer 0-afbrydelsen, da ADC kræver ursignal for at fungere. Nu sender mikrocontroller et signal LAVT til HØJt niveau til ALE-pin (dets aktive-høje pin) på ADC0808 for at aktivere låsen i adressen. Derefter starter ADC analog til digital konvertering ved at anvende HIGH til LOW niveau signal til SC (Start Conversion). Og vent derefter på, at EOC-stiften (End of Conversion) går LAVT. Når EOC går lavt, betyder det, at analog til digital konvertering er afsluttet, og data er klar til brug. Herefter aktiverer mikrocontroller outputlinjen ved at anvende et HIGH til LOW-signal på OE-stiften i ADC0808.
ADC0808 giver output metrisk konverteringsoutput ved sine outputstifter. Og formlen for radiometrisk konvertering er givet ved:
V in / (V fs -V z) = D x / (D max- D min)
Hvor
V in er indgangsspænding til konvertering
V fs er fuld skala Spænding
V z er nul spænding
D x er datapunkt, der er mål
D max er Maksimal datagrænse
D min er Minimum datagrænse
Programforklaring:
I programmet, først og fremmest inkluderer vi header file sand definerer variable og input & output pins til ADC og LCD.
# inkluderer
Funktion til oprettelse af forsinkelse er oprettet (ugyldig forsinkelse) sammen med nogle LCD-funktioner som til LCD initialisering, udskrivning af strengen, til LCD kommandoer osv. Du kan nemt finde dem i kode. Se denne artikel for LCD-interface med 8051 og dens funktioner.
Efter dette i hovedprogrammet har vi initialiseret LCD og indstillet EOC-, ALE-, EO-, SC-stifterne i overensstemmelse hermed.
ugyldig hoved () {int i = 0; eoc = 1; ale = 0; oe = 0; sc = 0; TMOD = 0x02; TH0 = 0xFD; lcd_ini (); lcdprint ("ADC 0808/0809");
Og derefter læser programmet ADC og gemmer ADC-output i en variabel og sender det derefter til LCD efter decimal til ASCII-konvertering ved hjælp af ugyldige read_adc () og ugyldige adc (int i) -funktioner:
ugyldigt read_adc () {nummer = 0; ale = 1; sc = 1; forsinkelse (1); ale = 0; sc = 0; mens (eoc == 1); mens (eoc == 0); oe = 1; nummer = input_port; forsinkelse (1); oe = 0; } ugyldig adc (int i) {switch (i) {case 0: ADDC = 0; ADDB = 0; ADDA = 0; lcdcmd (0xc0); read_adc ();