You are on page 1of 4

In our daily life, anything we deal like sound, prassure, voltage or any measurable quantity, are usually in analog

form So what if we want to interface any analog sensor with our digital controllers? There must be something that translate the analog inputs to digital output, and so Analog to digital convertors come to play. Usually we call them ADC (Analog to digital convertor). Before going to learn how to interface an ADC with a controller we first take a look at basic methods of analog to digital conversion.

This is a sample of the large number of analog-to-digital conversion methods. The basic principle of operation is to use the comparator principle to determine whether or not to turn on a particular bit of the binary number output. It is typical for an ADC to use a digital-to-analog converter (DAC) to determine one of the inputs to the comparator.

ADC0804 Pinout and Typical Connections

As shown in the typica circuit, ADC0804 can be interfaced with any microcontroller. You need a minimum of 11 pins to interface ADC0804, eight for data pins and 3 for control pins. As shown in the typical circuit the chip select pin can be made low if you are not using the microcontroller port for any other peripheral (multiplexing). There is a universal rule to find out how to use an IC. All you need is the datasheet of the IC you are working with and take a look at the timing diagram of the IC which shows how to send the data, which signal to assert and at what time the signal should be made high or low etc. Note: Keep this in mind that whenever you are working with an IC and you want to know how to communicate with that IC, then simply look into the timing diagram of that IC from its datasheet. It gives you complete information that you need regarding the communication of IC.

The above timing diagrams are from ADC0804 datasheet. The first diagram (FIGURE 10A) shows how to start a conversion. Also you can see which signals are to be asserted and at what time to start a conversion. So looking into the timing diagram FIGURE 10A. We note down the steps or say the order in which signals are to be asserted to start a conversion of ADC. As we have decided to make Chip select pin as low so we need not to bother about the CS signal in the timing diagram. Below steps are for starting an ADC conversion. I am also including CS signal to give you a clear picture. While programming we will not use this signal. 1. 2. 3. 4. Make chip select (CS) signal low. Make write (WR) signal low. Make chip select (CS) high. Wait for INTR pin to go low (means conversion ends).

Once the conversion in ADC is done, the data is available in the output latch of the ADC. Looking at the FIGURE 10B which shows the timing diagram of how to read the converted value from the output latch of the ADC. Data of the new conversion is only avalable for reading after ADC0804 made INTR pin low or say when the conversion is over. Below are the stepts to read output from the ADC0804. 1. 2. 3. 4. 5. Make chip select (CS) pin low. Make read (RD) signal low. Read the data from port where ADC is connected. Make read (RD) signal high. Make chip select (CS) high.

rd equ P1.0 wr equ P1.1 cs equ P1.2 intr equ P1.3 adc_port equ P2 adc_val equ 30H org 0H start: acall conv acall read mov P3,adc_val sjmp start conv: clr cs clr wr nop setb wr setb cs wait: jb intr,wait ret read: clr cs clr rd mov a,adc_port mov adc_val,a setb rd setb cs ret

;Read signal P1.0 ;Write signal P1.1 ;Chip Select P1.2 ;INTR signal P1.3 ;ADC data pins P2 ;ADC read value stored here

;Start of Program ;Start ADC conversion ;Read converted value ;Move the value to Port 3 ;Do it again ;Start of Conversion ;Make CS low ;Make WR Low ;Make WR High ;Make CS high ;Wait for INTR signal ;Conversion done ;Read ADC value ;Make CS Low ;Make RD Low ;Read the converted value ;Store it in local variable ;Make RD High ;Make CS High ;Reading done

#include <REGX51.H>#define adc_port P2 //ADC Port #define rd P1_0 //Read signal P1.0 #define wr P1_1 //Write signal P1.1 #define cs P1_2 //Chip Select P1.2 #define intr P1_3 //INTR signal P1.3 void conv(); void read(); unsigned char adc_val; //Start of conversion function //Read ADC function

void main(){ while(1){ conv(); read(); P3 = adc_val; } } void conv(){ cs = 0; wr = 0; wr = 1; cs = 1; while(intr); } void read(){ cs = 0; rd = 0; adc_val = adc_port; rd = 1; cs = 1; }

//Forever loop //Start conversion //Read ADC //Send the read value to P3

//Make //Make //Make //Make //Wait

CS low WR low WR high CS high for INTR to go low

//Make //Make //Read //Make //Make

CS low RD low ADC port RD high CS high

You might also like