ADC är Analog till Digital-omvandlaren, som konverterar analoga data till digitalt format; vanligtvis används den för att konvertera analog spänning till digitalt format. Analog signal har oändligt antal värden som en sinusvåg eller vårt tal, ADC omvandlar dem till vissa nivåer eller tillstånd, som kan mätas i tal som en fysisk storlek. I stället för kontinuerlig konvertering konverterar ADC data regelbundet, vilket vanligtvis kallas samplingsfrekvens. Telefonmodemär ett av exemplen på ADC, som används för internet, det konverterar analoga data till digitala data, så att datorn kan förstå, eftersom datorn bara kan förstå digitala data. Den största fördelen med att använda ADC är att vi brus kan elimineras effektivt från originalsignalen och digital signal kan resa mer effektivt än analog. Det är anledningen till att digitalt ljud är väldigt tydligt när du lyssnar.
För närvarande finns det många mikrokontroller på marknaden som har inbyggd ADC med en eller flera kanaler. Och genom att använda deras ADC-register kan vi gränssnitt. När vi väljer 8051-mikrokontrollfamilj för att göra något projekt, där vi behöver en ADC-konvertering, använder vi extern ADC. Vissa externa ADC-chips är 0803,0804,0808,0809 och det finns många fler. Idag ska vi gränssnitt 8-kanals ADC med AT89s52 Microcontroller nämligen ADC0808 / 0809.
Komponenter:
- 8051 Microcontroller (AT89S52)
- ADC0808 / 0809
- 16x2 LCD
- Motstånd (1k, 10k)
- POT (10k x4)
- Kondensator (10uf, 1000uf)
- Röd led
- Brödbräda eller PCB
- 7805
- 11.0592 MHz Crystal
- Kraft
- Anslutande ledningar
ADC0808 / 0809:
ADC0808 / 0809 är en monolitisk CMOS-enhet och mikroprocessorkompatibel styrlogik och har 28 stift som ger 8-bitars värde i utgång och 8-kanals ADC-ingångar (IN0-IN7). Dess upplösning är 8 så att den kan koda analoga data till en av de 256 nivåerna (2 8). Enheten har tre kanaler adressrad, nämligen: ADDA, ADDB och ADDC för att välja kanal. Nedan är stiftdiagrammet för ADC0808:
ADC0808 / 0809 kräver en klockpuls för konvertering. Vi kan tillhandahålla det med hjälp av oscillator eller med hjälp av mikrokontroller. I detta projekt har vi använt frekvens med hjälp av mikrokontroller.
Vi kan välja vilken ingångskanal som helst med hjälp av adressraderna, som vi kan välja inmatningsraden IN0 genom att hålla alla tre adressraderna (ADDA, ADDB och ADDC) låga. Om vi vill välja ingångskanal IN2 måste vi hålla ADDA, ADDB låg och ADDC hög. För att välja alla andra ingångskanaler, ta en titt på den angivna tabellen:
ADC-kanalnamn |
LÄGG TILL PIN |
LÄGG TILL PIN |
ADDA PIN |
IN0 |
LÅG |
LÅG |
LÅG |
I 1 |
LÅG |
LÅG |
HÖG |
IN2 |
LÅG |
HÖG |
LÅG |
IN3 |
LÅG |
HÖG |
HÖG |
IN4 |
HÖG |
LÅG |
LÅG |
IN5 |
HÖG |
LÅG |
HÖG |
IN6 |
HÖG |
HÖG |
LÅG |
IN7 |
HÖG |
HÖG |
HÖG |
Kretsbeskrivning:
Kretsen för "Gränssnitt ADC0808 med 8051" är lite komplex som innehåller mer anslutningskablar för att ansluta enheten till varandra. I denna krets har vi huvudsakligen använt AT89s52 som 8051 mikrokontroller, ADC0808, potentiometer och LCD.
En 16x2 LCD är ansluten till 89s52 mikrokontroller i 4-bitars läge. Styrstift RS, RW och En är direkt anslutna till stift P2.0, GND och P2.2. Och datapinnen D4-D7 är ansluten till stiften P2.4, P2.5, P2.6 och P2.7 av 89s52. ADC0808 utgångsstift är direkt anslutna till port P1 på AT89s52. Adressledningsstift ADDA, ADDB, AADC är anslutna till P3.0, P3.1 och P3.2.
ALE (adresslåsaktivering), SC (startkonvertering), EOC (slut på omvandling), OE (utgångsaktivering) och klockstift är anslutna vid P3.3, P3.4, P3.5, P3.6 och P3.7.
Och här har vi använt tre potentiometrar anslutna vid stift 26, 27 och 28 i ADC0808.
Ett 9 volts batteri och en 5 volt spänningsregulator, nämligen 7805, används för att driva kretsen.
Arbetssätt:
I det här projektet har vi kopplat samman tre kanaler i ADC0808. Och för demonstration har vi använt tre variabla motstånd. När vi driver kretsen initierar mikrokontrollern LCD med hjälp av lämpligt kommando, ger klocka till ADC-chip, väljer ADC-kanal med hjälp av adresslinjen och skickar startomvandlingssignal till ADC. Efter denna ADC läser först vald ADC-kanalingång och ger sin konverterade utgång till mikrokontroller. Då visar mikrokontroller sitt värde vid Ch1-position i LCD. Och sedan byter mikrokontroller ADC-kanal med hjälp av adressraden. Och sedan läser ADC vald kanal och skickar utdata till mikrokontroller. Och visa på LCD som namn Ch2. Och som klokt för andra kanaler.
Att arbeta med ADC0808 liknar mycket att arbeta med ADC0804. I detta tillhandahåller den första mikrokontrollern en 500 KHz klocksignal till ADC0808, med hjälp av Timer 0-avbrottet, eftersom ADC kräver klocksignal för att fungera. Nu skickar mikrokontrollern en LÅG till HÖG nivå signal till ALE-stiftet (dess aktiva höga stift) på ADC0808 för att aktivera spärren i adressen. Då startar ADC analog till digital konvertering genom att tillämpa HIGH to LOW Level signal till SC (Start Conversion). Och vänta sedan på att EOC-stiftet (End of Conversion) går LÅG. När EOC går LOW betyder det att analog till digital konvertering har slutförts och data är redo att användas. Efter detta möjliggör mikrokontroller utgångsledningen genom att tillföra en HÖG till LÅG signal till OE-stiftet på ADC0808.
ADC0808 ger proportionell metrisk omvandlingsutgång vid dess utgångsstift. Och formeln för radiometrisk konvertering ges av:
V i / (V fs -V z) = D x / (D max -D min)
Var
V in är ingångsspänning för omvandling
V fs är full skala Spänning
V z är noll spänning
D x är datapunkt som mått
D max är Maximal datagräns
D min är Minsta datagräns
Programförklaring:
I programmet, först och främst inkluderar vi header file sand definierar variabla och input & output pins för ADC och LCD.
# inkluderar
Funktion för att skapa fördröjningen har skapats (tomrumsfördröjning), tillsammans med vissa LCD-funktioner som för LCD-initialisering, utskrift av sträng, för LCD-kommandon etc. Du hittar dem enkelt i kod. Se den här artikeln för LCD-gränssnitt med 8051 och dess funktioner.
Efter detta i huvudprogrammet har vi initialiserat LCD och ställt in EOC-, ALE-, EO-, SC-stiften därefter.
ogiltigt huvud () {int i = 0; eoc = 1; ale = 0; oe = 0; sc = 0; TMOD = 0x02; TH0 = 0xFD; lcd_ini (); lcdprint ("ADC 0808/0809");
Och sedan läser programmet ADC och lagrar ADC-utdata i en variabel och skickar den sedan till LCD efter decimal till ASCII-konvertering, med hjälp av void read_adc () och void adc (int i) -funktioner:
ogiltigt read_adc () {nummer = 0; ale = 1; sc = 1; fördröjning (1); ale = 0; sc = 0; medan (eoc == 1); medan (eoc == 0); oe = 1; antal = input_port; fördröjning (1); oe = 0; } ogiltig adc (int i) {switch (i) {case 0: ADDC = 0; ADDB = 0; ADDA = 0; lcdcmd (0xc0); read_adc ();