ADC is de analoog-naar-digitaal-omzetter, die analoge gegevens omzet in een digitaal formaat; meestal wordt het gebruikt om analoge spanning om te zetten in digitaal formaat. Analoog signaal heeft een oneindig aantal waarden zoals een sinusgolf of onze spraak, ADC converteert ze naar bepaalde niveaus of toestanden, die in getallen kunnen worden gemeten als een fysieke grootheid. In plaats van continue conversie, converteert ADC gegevens periodiek, wat gewoonlijk bekend staat als bemonsteringssnelheid. Telefoonmodemis een van de voorbeelden van ADC, dat wordt gebruikt voor internet, het converteert analoge gegevens naar digitale gegevens, zodat de computer het kan begrijpen, omdat de computer alleen digitale gegevens kan begrijpen. Het grote voordeel van het gebruik van ADC is dat we ruis efficiënt kunnen elimineren uit het originele signaal en dat het digitale signaal efficiënter kan reizen dan het analoge signaal. Dat is de reden dat digitale audio heel duidelijk is tijdens het luisteren.
In de huidige tijd zijn er veel microcontrollers op de markt met ingebouwde ADC met een of meer kanalen. En door hun ADC-register te gebruiken, kunnen we communiceren. Wanneer we de 8051 microcontroller- familie selecteren voor het maken van een project, waarin we een ADC-conversie nodig hebben, gebruiken we externe ADC. Sommige externe ADC-chips zijn 0803,0804,0808,0809 en er zijn er nog veel meer. Vandaag gaan we 8-kanaals ADC koppelen aan AT89s52 Microcontroller, namelijk ADC0808 / 0809.
Componenten:
- 8051 Microcontroller (AT89S52)
- ADC0808 / 0809
- 16x2 LCD
- Weerstand (1k, 10k)
- POT (10k x4)
- Condensator (10uf, 1000uf)
- Rode led
- Broodplank of printplaat
- 7805
- 11,0592 MHz Crystal
- Kracht
- Draden aansluiten
ADC0808 / 0809:
ADC0808 / 0809 is een monolithisch CMOS-apparaat en microprocessor-compatibele besturingslogica en heeft 28-pins die een 8-bits waarde in de uitvoer geeft en 8-kanaals ADC-invoerpennen (IN0-IN7). De resolutie is 8, dus het kan de analoge gegevens coderen in een van de 256 niveaus (2 8). Dit apparaat heeft een adreslijn met drie kanalen, namelijk: ADDA, ADDB en ADDC voor het selecteren van een kanaal. Hieronder ziet u het pin-diagram voor ADC0808:
ADC0808 / 0809 vereist een klokpuls voor conversie. We kunnen het leveren door een oscillator te gebruiken of door een microcontroller te gebruiken. In dit project hebben we frequentie toegepast met behulp van een microcontroller.
We kunnen elk willekeurig ingangskanaal selecteren met behulp van de adresregels, zoals we de ingangsregel IN0 kunnen selecteren door alle drie de adresregels (ADDA, ADDB en ADDC) laag te houden. Als we ingangskanaal IN2 willen selecteren, moeten we ADDA, ADDB laag en ADDC hoog houden. Kijk in de gegeven tabel om alle andere ingangskanalen te selecteren:
ADC-kanaalnaam |
ADDC PIN |
ADDB-pincode |
ADDA PIN |
IN0 |
LAAG |
LAAG |
LAAG |
IN 1 |
LAAG |
LAAG |
HOOG |
IN 2 |
LAAG |
HOOG |
LAAG |
IN3 |
LAAG |
HOOG |
HOOG |
IN4 |
HOOG |
LAAG |
LAAG |
IN5 |
HOOG |
LAAG |
HOOG |
IN6 |
HOOG |
HOOG |
LAAG |
IN7 |
HOOG |
HOOG |
HOOG |
Circuit Beschrijving:
Circuit van "Interfacing ADC0808 met 8051" is weinig complex en bevat meer verbindingsdraad voor het verbinden van apparaten met elkaar. In dit circuit hebben we voornamelijk AT89s52 gebruikt als 8051 microcontroller, ADC0808, Potentiometer en LCD.
Een 16x2 LCD is verbonden met 89s52 microcontroller in 4-bit modus. De controlepen RS, RW en En zijn direct verbonden met pin P2.0, GND en P2.2. En datapin D4-D7 is verbonden met pinnen P2.4, P2.5, P2.6 en P2.7 van 89s52. De uitgangspen van de ADC0808 is rechtstreeks verbonden met poort P1 van AT89s52. Adreslijnpinnen ADDA, ADDB, AADC zijn verbonden op P3.0, P3.1 en P3.2.
ALE (Address latch enable), SC (Start conversion), EOC (End of conversion), OE (Output enable) en klokpinnen zijn verbonden op P3.3, P3.4, P3.5, P3.6 en P3.7.
En hier hebben we drie potentiometers gebruikt die zijn aangesloten op pin 26, 27 en 28 van ADC0808.
Voor het voeden van het circuit wordt een 9 volt batterij en een 5 volt spanningsregelaar namelijk 7805 gebruikt.
Werken:
In dit project hebben we drie kanalen van ADC0808 met elkaar verbonden. En ter demonstratie hebben we drie variabele weerstanden gebruikt. Wanneer we het circuit voeden, initialiseert de microcontroller het LCD-scherm met behulp van de juiste opdracht, geeft klok aan ADC-chip, selecteert ADC-kanaal met behulp van adresregel en stuurt startconversiesignaal naar ADC. Hierna leest ADC eerst de geselecteerde ADC-kanaalinvoer en geeft de geconverteerde uitvoer aan de microcontroller. Vervolgens toont de microcontroller zijn waarde op de positie Ch1 op het LCD-scherm. En dan verandert de microcontroller het ADC-kanaal door de adresregel te gebruiken. En dan leest ADC het geselecteerde kanaal en stuurt de uitvoer naar de microcontroller. En toon op LCD als naam Ch2. En net als verstandig voor andere kanalen.
De werking van ADC0808 lijkt veel op de werking van ADC0804. Hierin levert de eerste microcontroller een kloksignaal van 500 kHz aan ADC0808, met behulp van de timer 0-interrupt, omdat ADC een kloksignaal nodig heeft om te werken. Nu stuurt de microcontroller een signaal van LOW naar HIGH naar de ALE-pin (de active-high-pin) van ADC0808 om de vergrendeling in het adres mogelijk te maken. Door vervolgens een HIGH to LOW Level-signaal toe te passen op SC (Start Conversion), start ADC de analoog naar digitaal conversie. En wacht vervolgens tot de EOC-pin (End of Conversion) LAAG wordt. Wanneer EOC LAAG wordt, betekent dit dat de conversie van analoog naar digitaal is voltooid en dat de gegevens klaar zijn voor gebruik. Hierna schakelt de microcontroller de outputlijn in door een HIGH to LOW-signaal toe te passen op de OE-pin van ADC0808.
ADC0808 geeft metrische conversie-uitvoer aan de uitgangspennen. En de formule voor radiometrische conversie wordt gegeven door:
V in / (V fs -V z) = D x / (D max -D min)
Waar
V in is ingangsspanning voor conversie
V fs is volledige schaal Spanning
V z is nulspanning
D x is datapunt wordt gemeten
D max is maximale datalimiet
D min is minimale datalimiet
Programma uitleg:
In het programma nemen we allereerst het header-bestand op dat sand definieert variabele en invoer- en uitvoerpinnen voor ADC en LCD.
# omvatten
De functie voor het creëren van de vertraging is gemaakt (ongeldige vertraging), samen met enkele LCD-functies zoals LCD-initialisatie, afdrukken van de string, voor LCD-opdrachten enz. U kunt ze gemakkelijk vinden in Code. Bekijk dit artikel voor LCD-interfacing met 8051 en zijn functies.
Hierna hebben we in het hoofdprogramma de LCD geïnitialiseerd en de EOC-, ALE-, EO-, SC-pinnen dienovereenkomstig ingesteld.
void main () {int i = 0; eoc = 1; ale = 0; oe = 0; sc = 0; TMOD = 0x02; TH0 = 0xFD; lcd_ini (); lcdprint ("ADC 0808/0809");
En dan leest het programma de ADC en slaat het ADC-uitvoer op in een variabele en stuurt het vervolgens naar LCD na decimaal naar ASCII-conversie, met behulp van void read_adc () en void adc (int i) functies:
void read_adc () {nummer = 0; ale = 1; sc = 1; vertraging (1); ale = 0; sc = 0; while (eoc == 1); while (eoc == 0); oe = 1; number = input_port; vertraging (1); oe = 0; } void adc (int i) {switch (i) {case 0: ADDC = 0; ADDB = 0; ADDA = 0; lcdcmd (0xc0); read_adc ();