Anda di halaman 1dari 8

Analog to Digital Conversion

►Introduction

In our daily life, anything we deal like sound, pressure, 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 translates 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.

Following are the most used conversion methods:

 Digital-Ramp ADC
 Successive Approximation ADC
 Flash ADC
►Digital-Ramp ADC

Conversion from analog to digital form inherently involves comparator action


where the value of the analog voltage at some point in time is compared with some
standard. A common way to do that is to apply the analog voltage to one terminal
of a comparator and trigger a binary counter which drives a DAC. The output of
the DAC is applied to the other terminal of the comparator. Since the output of the
DAC is increasing with the counter, it will trigger the comparator at some point
when its voltage exceeds the analog input. The transition of the comparator stops
the binary counter, which at that point holds the digital value corresponding to the
analog voltage.
►Successive Approximation ADC

Illustration of 4-bit SAC with 1 volt step size

The successive approximation ADC is much faster than the digital ramp ADC
because it uses digital logic to converge on the value closest to the input voltage. A
comparator and a DAC are used in the process. A flowchart explaining the
working is shown in the figure below.
►Flash ADC

Illustrated is a 3-bit flash ADC with resolution 1 volt


(after Tocci). The resistor net and comparators provide an input to the
combinational logic circuit, so the conversion time is just the propagation delay
through the network - it is not limited by the clock rate or some convergence
sequence. It is the fastest type of ADC available, but requires a comparator for
each value of output (63 for 6-bit, 255 for 8-bit, etc.) Such ADCs are available in
IC form up to 8-bit and 10-bit flash ADCs (1023 comparators) are planned. The
encoder logic executes a truth table to convert the ladder of inputs to the binary
number output.

Now we lets take a look at the various Analog to Digital convertors that are most
commonly used with our controllers

Name Description
ADC0800 8-bit ADC
ADC0801 8-bit ADC 100us 0.25 LSB
ADC0802 8-bit ADC 100us 0.5 LSB
ADC0804 8-bit ADC 100us 1.0 LSB
ADC0808 8-bit 8 channel 100us ADC
ADC0809 8-Bit 8 channel ADC (=~ADC0808)
AD571 10-Bit, A/D Converter, Complete with Reference and Clock
MAX1204 5V, 8-Channel, Serial, 10-Bit ADC with 3V Digital Interface
MAX1202 5V, 8-Channel, Serial, 12-Bit ADCs with 3V Digital Interface
MAX195 16-Bit, Self-Calibrating, 10us Sampling ADC

►ADC0804 Pin-out and Typical Connections

As shown in the typical 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.
.

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. Make chip select (CS) signal low.


2. Make write (WR) signal low.
3. Make chip select (CS) high.
4. 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 available for reading after ADC0804 made INTR pin low or say
when the conversion is over. Below are the steps to read output from the
ADC0804.

1. Make chip select (CS) pin low.


2. Make read (RD) signal low.
3. Read the data from port where ADC is connected.
4. Make read (RD) signal high.
5. Make chip select (CS) high.

►Programming 8051 Microcontroller

#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();  //Start of conversion function


void read();  //Read ADC function

unsigned char adc_val;

void main()
{
while(1)
{                    
        conv();           //Start conversion
        read();           //Read ADC
        P3 = adc_val;     //Send the read value to P3
     }
}
void conv()
{
cs = 0;                      //Make CS low
    wr = 0;                      //Make WR low
    wr = 1;                      //Make WR high
    cs = 1;                      //Make CS high
    while(intr);             //Wait for INTR to go low
}

void read()
{
    cs = 0;                      //Make CS low
    rd = 0;                      //Make RD low
    adc_val = adc_port;          //Read ADC port
    rd = 1;                      //Make RD high
    cs = 1;                      //Make CS high
}
 

Anda mungkin juga menyukai