ADC je analogově-digitální převodník, který převádí analogová data do digitálního formátu; obvykle se používá k převodu analogového napětí na digitální formát. Analogový signál nemá nekonečné množství hodnot, jako je sinusová vlna nebo naše řeč, ADC je převádí do konkrétních úrovní nebo stavů, které lze měřit v číslech jako fyzickou veličinu. Namísto nepřetržitého převodu převádí ADC data pravidelně, což se obvykle označuje jako vzorkovací frekvence. Telefonní modemje jedním z příkladů ADC, který se používá pro internet, převádí analogová data na digitální data, aby počítač mohl rozumět, protože počítač rozumí pouze digitálním datům. Hlavní výhodou použití ADC je to, že šum lze účinně eliminovat z původního signálu a digitální signál může cestovat efektivněji než analogový. To je důvod, proč je digitální zvuk při poslechu velmi čistý.
V současné době je na trhu spousta mikrokontrolérů, které mají zabudovaný ADC s jedním nebo více kanály. A pomocí jejich registru ADC se můžeme propojit. Když vybereme rodinu mikrokontrolérů 8051 pro výrobu jakéhokoli projektu, ve kterém potřebujeme převod ADC, použijeme externí ADC. Některé externí čipy ADC jsou 0803,0804,0808,0809 a je jich mnohem více. Dnes budeme propojovat 8kanálový ADC s mikrokontrolérem AT89s52, konkrétně ADC0808 / 0809.
Součásti:
- Mikrokontrolér 8051 (AT89S52)
- ADC0808 / 0809
- 16x2 LCD
- Rezistor (1k, 10k)
- POT (10k x4)
- Kondenzátor (10uf, 1000uf)
- Červená vedla
- Chlebová deska nebo PCB
- 7805
- 11,0592 MHz krystal
- Napájení
- Připojovací vodiče
ADC0808 / 0809:
ADC0808 / 0809 je monolitické CMOS zařízení a řídicí logika kompatibilní s mikroprocesorem a má 28 pinů, které poskytují 8bitovou hodnotu na výstupu a 8kanálové vstupní piny ADC (IN0-IN7). Jeho rozlišení je 8, takže může kódovat analogová data do jedné z 256 úrovní (2 8). Toto zařízení má tříkanálový adresní řádek, konkrétně: ADDA, ADDB a ADDC pro výběr kanálu. Níže je schéma kolíků pro ADC0808:
ADC0808 / 0809 vyžaduje pro převod hodinový puls. Můžeme jej poskytnout pomocí oscilátoru nebo pomocí mikrokontroléru. V tomto projektu jsme aplikovali frekvenci pomocí mikrokontroléru.
Můžeme vybrat libovolný vstupní kanál pomocí adresních řádků, podobně jako můžeme vybrat vstupní řádek IN0 udržováním všech tří adresních řádků (ADDA, ADDB a ADDC) na nízké úrovni. Pokud chceme vybrat vstupní kanál IN2, musíme udržovat ADDA, ADDB nízkou a ADDC vysokou. Chcete-li vybrat všechny ostatní vstupní kanály, podívejte se do dané tabulky:
Název kanálu ADC |
PIN ADDC |
PŘIDAT PIN |
PIN ADDA |
IN0 |
NÍZKÝ |
NÍZKÝ |
NÍZKÝ |
V 1 |
NÍZKÝ |
NÍZKÝ |
VYSOKÝ |
IN2 |
NÍZKÝ |
VYSOKÝ |
NÍZKÝ |
IN3 |
NÍZKÝ |
VYSOKÝ |
VYSOKÝ |
IN4 |
VYSOKÝ |
NÍZKÝ |
NÍZKÝ |
IN5 |
VYSOKÝ |
NÍZKÝ |
VYSOKÝ |
IN6 |
VYSOKÝ |
VYSOKÝ |
NÍZKÝ |
IN7 |
VYSOKÝ |
VYSOKÝ |
VYSOKÝ |
Popis obvodu:
Obvod „Propojování ADC0808 s 8051“ je málo složitý, který obsahuje více propojovacích vodičů pro vzájemné připojení zařízení. V tomto obvodu jsme použili hlavně AT89s52 jako mikrokontrolér 8051, ADC0808, potenciometr a LCD.
16x2 LCD je připojen k mikrokontroléru 89s52 ve 4bitovém režimu. Ovládací kolíky RS, RW a En jsou přímo připojeny k pinům P2.0, GND a P2.2. A datový pin D4-D7 je připojen k pinům P2.4, P2.5, P2.6 a P2.7 z 89s52. Výstupní kolík ADC0808 je přímo připojen k portu P1 na AT89s52. Kolíky adresového řádku ADDA, ADDB, AADC jsou připojeny na P3.0, P3.1 a P3.2.
ALE (Povolení západky adresy), SC (Zahájit převod), EOC (Konec převodu), OE (Výstup povolen) a hodinové piny jsou připojeny na P3.3, P3.4, P3.5, P3.6 a P3.7.
A tady jsme použili tři potenciometry připojené na piny 26, 27 a 28 ADC0808.
K napájení obvodu se používá 9voltová baterie a 5voltový regulátor napětí, konkrétně 7805.
Pracovní:
V tomto projektu jsme propojili tři kanály ADC0808. A pro demonstraci jsme použili tři proměnné odpory. Když napájíme obvod, mikrokontrolér inicializuje LCD pomocí příslušného příkazu, dá hodině čipu ADC, vybere kanál ADC pomocí adresního řádku a odešle počáteční konverzní signál do ADC. Poté ADC nejprve načte vybraný vstup kanálu ADC a dá převedený výstup do mikrokontroléru. Poté mikrokontrolér ukazuje svou hodnotu na pozici Ch1 na LCD. A pak mikrokontrolér změní kanál ADC pomocí adresního řádku. A pak ADC načte vybraný kanál a odešle výstup do mikrokontroléru. A ukázat na LCD jako název Ch2. A jako moudré pro ostatní kanály.
Práce s ADC0808 je velmi podobná práci s ADC0804. V tomto poskytuje první mikrokontrolér hodinový signál 500 KHz do ADC0808 pomocí přerušení časovače 0, protože ADC vyžaduje, aby hodinový signál fungoval. Nyní mikrokontrolér odesílá signál NÍZKÉ až VYSOKÉ na pin ALE (jeho aktivní vysoký pin) ADC0808, aby uvolnil západku v adrese. Poté aplikací signálu HIGH to LOW Level na SC (Start Conversion) zahájí ADC analogově-digitální převod. A pak počkejte, až pin EOC (End of Conversion) přejde na LOW. Když EOC klesne na LOW, znamená to, že analogově-digitální převod byl dokončen a data jsou připravena k použití. Poté mikrokontrolér povolí výstupní linku aplikací signálu HIGH to LOW na OE pin ADC0808.
ADC0808 poskytuje poměrný výstup metrické konverze na svých výstupních pinech. A vzorec pro radiometrickou konverzi je dán vztahem:
V in / (V fs -V z) = D x / (D max -D min)
Kde
V in je vstupní napětí pro převod
V fs je plný rozsah Napětí
V z je nulové napětí
D x je měřený datový bod
D max je Maximální datový limit
D min je Minimální datový limit
Vysvětlení programu:
V programu nejprve zahrneme písek záhlaví souboru definuje proměnné a vstupní a výstupní piny pro ADC a LCD.
# zahrnout
Byla vytvořena funkce pro vytvoření zpoždění (void delay) spolu s některými funkcemi LCD, jako je inicializace LCD, tisk řetězce, příkazy LCD atd. Můžete je snadno najít v kódu. V tomto článku najdete informace o propojení LCD s 8051 a jeho funkcemi.
Poté jsme v hlavním programu inicializovali LCD a odpovídajícím způsobem nastavili piny 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“);
A pak program načte ADC a uloží výstup ADC do proměnné a poté jej pošle na LCD po desítkové převodu na ASCII pomocí funkcí void read_adc () a void adc (int i):
void read_adc () {číslo = 0; ale = 1; sc = 1; zpoždění (1); ale = 0; sc = 0; while (eoc == 1); while (eoc == 0); oe = 1; number = input_port; zpoždění (1); oe = 0; } void adc (int i) {switch (i) {case 0: ADDC = 0; ADDB = 0; ADDA = 0; lcdcmd (0xc0); read_adc ();