ADC er Analog til Digital-omformeren, som konverterer analoge data til digitalt format; vanligvis brukes den til å konvertere analog spenning til digitalt format. Analogt signal har uendelig antall verdier som en sinusbølge eller vår tale, ADC konverterer dem til bestemte nivåer eller tilstander, som kan måles i tall som en fysisk størrelse. I stedet for kontinuerlig konvertering konverterer ADC data med jevne mellomrom, som vanligvis kalles samplingsfrekvens. Telefonmodemer et av eksemplene på ADC, som brukes til internett, den konverterer analoge data til digitale data, slik at datamaskinen kan forstå, fordi datamaskinen bare kan forstå digitale data. Den største fordelen med å bruke ADC er at vi kan eliminere støy effektivt fra det originale signalet, og det digitale signalet kan reise mer effektivt enn det analoge. Det er grunnen til at digital lyd er veldig tydelig mens du lytter.
I dag er det mange mikrokontrollere i markedet som har innebygd ADC med en eller flere kanaler. Og ved å bruke deres ADC-register kan vi grensesnitt. Når vi velger 8051 mikrokontrollerfamilie for å lage ethvert prosjekt der vi trenger en ADC-konvertering, bruker vi ekstern ADC. Noen eksterne ADC-brikker er 0803808080808080, og det er mange flere. I dag skal vi grensesnitt 8-kanals ADC med AT89s52 Microcontroller nemlig ADC0808 / 0809.
Komponenter:
- 8051 mikrokontroller (AT89S52)
- ADC0808 / 0809
- 16x2 LCD
- Motstand (1k, 10k)
- POTTE (10k x4)
- Kondensator (10uf, 1000uf)
- Rød ledet
- Brødbrett eller PCB
- 7805
- 11.0592 MHz krystall
- Makt
- Koble ledninger
ADC0808 / 0809:
ADC0808 / 0809 er en monolitisk CMOS-enhet og mikroprosessor-kompatibel kontrollogikk og har 28 pinner som gir 8-bits verdi i utgang og 8-kanals ADC-inngangspinner (IN0-IN7). Oppløsningen er 8 slik at den kan kode de analoge dataene til et av de 256 nivåene (2 8). Denne enheten har tre-kanals adresselinje, nemlig: ADDA, ADDB og ADDC for valg av kanal. Nedenfor er pin-diagrammet for ADC0808:
ADC0808 / 0809 krever en klokkepuls for konvertering. Vi kan tilby det ved å bruke oscillator eller ved å bruke mikrokontroller. I dette prosjektet har vi brukt frekvens ved å bruke mikrokontroller.
Vi kan velge hvilken som helst inngangskanal ved å bruke adresselinjene, som vi kan velge inngangslinjen IN0 ved å holde alle de tre adresselinjene (ADDA, ADDB og ADDC) lave. Hvis vi vil velge inngangskanal IN2, må vi holde ADDA, ADDB lav og ADDC høy. For å velge alle de andre inngangskanalene, se på den gitte tabellen:
ADC-kanalnavn |
LEGG TIL PIN |
LEGG TIL PIN |
ADDA PIN |
IN0 |
LAV |
LAV |
LAV |
IN1 |
LAV |
LAV |
HØY |
IN2 |
LAV |
HØY |
LAV |
IN3 |
LAV |
HØY |
HØY |
IN4 |
HØY |
LAV |
LAV |
IN5 |
HØY |
LAV |
HØY |
IN6 |
HØY |
HØY |
LAV |
IN7 |
HØY |
HØY |
HØY |
Kretsbeskrivelse:
Kretsen til "Grensesnitt ADC0808 med 8051" er lite kompleks som inneholder mer tilkoblingskabler for å koble enheten til hverandre. I denne kretsen har vi hovedsakelig brukt AT89s52 som 8051 mikrokontroller, ADC0808, potensiometer og LCD.
En 16x2 LCD er koblet til 89s52 mikrokontroller i 4-biters modus. Kontrollpinne RS, RW og En er direkte koblet til pinne P2.0, GND og P2.2. Og datapinnen D4-D7 er koblet til pinnene P2.4, P2.5, P2.6 og P2.7 av 89s52. ADC0808 utgangsstift er direkte koblet til port P1 på AT89s52. Adresselinjepinnene ADDA, ADDB, AADC er koblet til P3.0, P3.1 og P3.2.
ALE (aktivering av adresselås), SC (Start konvertering), EOC (slutt på konvertering), OE (utgangsaktivering) og klokkepinner er koblet til P3.3, P3.4, P3.5, P3.6 og P3.7.
Og her har vi brukt tre potensiometere koblet til pin 26, 27 og 28 i ADC0808.
Et 9 volt batteri og en 5 volt spenningsregulator, nemlig 7805, brukes til å drive kretsen.
Jobber:
I dette prosjektet har vi koblet sammen tre kanaler av ADC0808. Og for demonstrasjon har vi brukt tre variable motstander. Når vi driver kretsen, initialiserer mikrokontrolleren LCD-skjermen ved å bruke passende kommando, gir klokken til ADC-brikken, velger ADC-kanal ved å bruke adresselinjen og sender startkonverteringssignal til ADC. Etter dette leser ADC først valgt ADC-kanalinngang og gir sin konverterte utgang til mikrokontroller. Deretter viser mikrokontrolleren verdien på Ch1-posisjon i LCD. Og så bytter mikrokontroller ADC-kanal ved å bruke adresselinjen. Og så leser ADC valgt kanal og sender utdata til mikrokontroller. Og vis på LCD som navn Ch2. Og som lurt for andre kanaler.
Arbeid med ADC0808 ligner mye på arbeid med ADC0804. I dette gir den første mikrokontrolleren et 500 KHz klokkesignal til ADC0808, ved hjelp av Timer 0-avbruddet, ettersom ADC krever klokkesignal for å fungere. Nå sender mikrokontroller et signal fra LAVT til HØYT nivå til ALE-pinnen (den aktive-høye pinnen) på ADC0808 for å aktivere låsen i adressen. Deretter starter ADC analog til digital konvertering ved å bruke HIGH to LOW Level signal til SC (Start Conversion). Og vent deretter til EOC (End of Conversion) -pinnen går LAV. Når EOC går lavt, betyr det at analog til digital konvertering er fullført og data er klare til bruk. Etter dette aktiverer mikrokontrolleren utgangslinjen ved å bruke et HIGH til LOW-signal på OE-pinnen til ADC0808.
ADC0808 gir metrisk konverteringsutgang ved utgangspinnene. Og formelen for radiometrisk konvertering er gitt av:
V in / (V fs -V z) = D x / (D max- D min)
Hvor
V in er inngangsspenning for konvertering
V fs er full skala Spenning
V z er null spenning
D x er datapunkt som måling
D max er Maksimal datagrense
D min er Minimum datagrense
Programforklaring:
I programmet, først og fremst inkluderer vi header file sand definerer variable og input & output pins for ADC og LCD.
# inkluderer
Funksjon for å lage forsinkelsen er opprettet (ugyldig forsinkelse), sammen med noen LCD-funksjoner som for LCD initialisering, utskrift av strengen, for LCD kommandoer osv. Du kan enkelt finne dem i Code. Sjekk denne artikkelen for LCD-grensesnitt med 8051 og dens funksjoner.
Etter dette i hovedprogrammet har vi initialisert LCD og satt EOC-, ALE-, EO-, SC-pinnene tilsvarende.
ugyldig hoved () {int i = 0; eoc = 1; ale = 0; oe = 0; sc = 0; TMOD = 0x02; TH0 = 0xFD; lcd_ini (); lcdprint ("ADC 0808/0809");
Og deretter leser programmet ADC og lagrer ADC-utdata i en variabel og sender den deretter til LCD etter desimal til ASCII-konvertering, ved å bruke void read_adc () og void adc (int i) -funksjonene:
ugyldig 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 ();