ADC je pretvornik Analog v Digital, ki pretvori analogne podatke v digitalno obliko; običajno se uporablja za pretvorbo analogne napetosti v digitalni format. Analogni signal nima neskončno nobenih vrednosti, kot je sinusni val ali naš govor, ADC jih pretvori v določene ravni ali stanja, ki jih lahko v številkah izmerimo kot fizično količino. Namesto neprekinjene pretvorbe ADC redno pretvarja podatke, kar je običajno znano kot hitrost vzorčenja. Telefonski modemje eden od primerov ADC, ki se uporablja za internet, pretvarja analogne podatke v digitalne, tako da lahko računalnik razume, ker računalnik lahko razume le digitalne podatke. Glavna prednost uporabe ADC je v tem, da se lahko zvok učinkovito odstrani iz prvotnega signala, digitalni signal pa lahko potuje bolj učinkovito kot analogni. To je razlog, da je digitalni zvok med poslušanjem zelo jasen.
Trenutno je na trgu veliko mikrokrmilnikov, ki imajo vgrajen ADC z enim ali več kanali. In z uporabo njihovega ADC registra lahko povežemo. Ko za izdelavo katerega koli projekta, pri katerem potrebujemo pretvorbo ADC, izberemo družino mikrokrmilnikov 8051, uporabimo zunanji ADC. Nekaterih zunanjih ADC čipov je 0803.0804.0808.0809 in jih je še veliko več. Danes bomo 8-kanalni ADC povezali z mikrokrmilnikom AT89s52, in sicer ADC0808 / 0809.
Sestavni deli:
- 8051 mikrokrmilnik (AT89S52)
- ADC0808 / 0809
- 16x2 LCD
- Upor (1k, 10k)
- LONČEK (10k x4)
- Kondenzator (10uf, 1000uf)
- Rdeča vodila
- Krušna plošča ali PCB
- 7805
- 11,0592 MHz kristal
- Moč
- Priključne žice
ADC0808 / 0809:
ADC0808 / 0809 je monolitna naprava CMOS in krmilna logika, združljiva z mikroprocesorjem, in ima 28 pin, ki daje 8-bitno vrednost v izhodu in 8-kanalni ADC vhodni zatiči (IN0-IN7). Njegova ločljivost je 8, zato lahko analogne podatke kodira v eno od 256 stopenj (2 8). Ta naprava ima naslovno vrstico s tremi kanali, in sicer: ADDA, ADDB in ADDC za izbiro kanala. Spodaj je Pin-diagram za ADC0808:
ADC0808 / 0809 za pretvorbo zahteva taktni impulz. Lahko ga zagotovimo z uporabo oscilatorja ali z uporabo mikrokrmilnika. V tem projektu smo uporabili frekvenco z uporabo mikrokrmilnika.
Kateri koli vhodni kanal lahko izberemo z naslovnimi vrsticami, tako kot lahko vhodno vrstico IN0 izberemo tako, da ohranimo nizke vse tri naslovne vrstice (ADDA, ADDB in ADDC). Če želimo izbrati vhodni kanal IN2, moramo ohraniti ADDA, ADDB nizko in ADDC visoko. Za izbiro vseh ostalih vhodnih kanalov si oglejte spodnjo tabelo:
Ime kanala ADC |
DODAJ PIN |
Koda ADDB |
ADDA PIN |
IN0 |
NIZKO |
NIZKO |
NIZKO |
IN1 |
NIZKO |
NIZKO |
VISOKO |
IN2 |
NIZKO |
VISOKO |
NIZKO |
IN3 |
NIZKO |
VISOKO |
VISOKO |
IN4 |
VISOKO |
NIZKO |
NIZKO |
IN5 |
VISOKO |
NIZKO |
VISOKO |
IN6 |
VISOKO |
VISOKO |
NIZKO |
IN7 |
VISOKO |
VISOKO |
VISOKO |
Opis vezja:
Vezje “Interfacing ADC0808 with 8051” je malo zapleteno in vsebuje več povezovalnih žic za medsebojno povezovanje naprav. V tem vezju smo v glavnem uporabljali AT89s52 kot mikrokrmilnik 8051, ADC0808, potenciometer in LCD.
LCD 16x2 je v 4-bitnem načinu povezan z mikrokrmilnikom 89s52. Krmilni zatiči RS, RW in En so neposredno povezani z zatiči P2.0, GND in P2.2. Podatkovni zatič D4-D7 je povezan z zatiči P2.4, P2.5, P2.6 in P2.7 z 89s52. Izhodni zatič ADC0808 je neposredno povezan z vrati P1 AT89s52. Zatiči naslovne vrstice ADDA, ADDB, AADC so povezani na P3.0, P3.1 in P3.2.
ALE (Omogoči zapah naslova), SC (Začetek pretvorbe), EOC (Konec pretvorbe), OE (Omogočanje izhoda) in zatiči ure so priključeni na P3.3, P3.4, P3.5, P3.6 in P3.7.
Tu smo uporabili tri potenciometre, priključene na nožice 26, 27 in 28 ADC0808.
Za napajanje vezja se uporablja 9-voltna baterija in 5-voltni regulator napetosti, in sicer 7805.
Delo:
V tem projektu smo povezali tri kanale ADC0808. Za predstavitev smo uporabili tri spremenljive upore. Ko napajamo vezje, mikrokrmilnik z ustreznim ukazom inicializira LCD, daje uro čipu ADC, z naslovno vrstico izbere ADC kanal in pošlje signal za pretvorbo zagona v ADC. Po tem ADC najprej prebere vhod izbranega kanala ADC in pretvori izhod v mikrokrmilnik. Nato mikrokrmilnik prikaže svojo vrednost na položaju Ch1 na LCD-prikazovalniku. Nato mikrokrmilnik spremeni ADC kanal z uporabo naslovne vrstice. Nato ADC prebere izbrani kanal in pošlje izhod mikrokrmilniku. In prikažite na LCD-ju kot ime Ch2. In tako pametno za druge kanale.
Delovanje ADC0808 je zelo podobno delovanju ADC0804. Pri tem prvi mikrokrmilnik odda 500 KHz taktni signal na ADC0808 z uporabo prekinitve Timer 0, saj ADC za delovanje potrebuje urni signal. Zdaj mikrokrmilnik pošlje signal LOW to HIGH level na zatič ALE (njegov aktivno-visoko zatič) ADC0808, da omogoči zapah na naslovu. Nato z uporabo signala HIGH to LOW Level na SC (Start Conversion) začne ADC pretvoriti analogno v digitalno pretvorbo. Nato počakajte, da se zatič EOC (Konec pretvorbe) spusti NIZKO. Ko EOC preide v LOW, to pomeni, da je bila analogna v digitalno pretvorba zaključena in so podatki pripravljeni za uporabo. Po tem mikrokrmilnik omogoči izhodno linijo z uporabo signala HIGH to LOW na OE zatič ADC0808.
ADC0808 daje izhodno pretvorbeno razmerje na izhodnih zatičih. In formula za radiometrično pretvorbo je podana z:
V in / (V fs -V z) = D x / (D max -D min)
Kje
V leta je vhodna napetost za pretvorbo
V fs je merilno napetost
V z nič napetost
D x so podatki kažejo da je ukrep
D max je Zgornja meja podatki
D min je meja Minimalni podatki
Pojasnilo programa:
V program najprej vključimo glavo datoteke peska definira spremenljive in vhodno-izhodne nožice za ADC in LCD.
# vključi
Ustvarjena je bila funkcija za ustvarjanje zakasnitve (void delay), skupaj z nekaterimi funkcijami LCD, na primer za inicializacijo LCD-ja, tiskanje niza, za LCD-ukaze itd. Z lahkoto jih najdete v Code. Oglejte si ta članek za povezave LCD z 8051 in njegovimi funkcijami.
Po tem smo v glavnem programu inicializirali LCD in ustrezno nastavili nožice EOC, ALE, EO, SC.
void main () {int i = 0; eoc = 1; ale = 0; oe = 0; sc = 0; TMOD = 0x02; TH0 = 0xFD; lcd_ini (); lcdprint ("ADC 0808/0809");
Nato program prebere ADC in shrani izhod ADC v spremenljivko, nato pa ga po decimalni pretvorbi v ASCII pošlje na LCD z uporabo void read_adc () in void adc (int i) funkcij:
neveljavno read_adc () {število = 0; ale = 1; sc = 1; zamuda (1); ale = 0; sc = 0; medtem ko (eoc == 1); medtem ko (eoc == 0); oe = 1; število = vhodni_port; zamuda (1); oe = 0; } void adc (int i) {switch (i) {case 0: ADDC = 0; ADDB = 0; ADDA = 0; lcdcmd (0xc0); read_adc ();