Interfacing 8051 with ADC 0808 and DAC 0808

Analog to Digital Converter (ADC):

            In most of our Microcontroller based projects, if we need to interface a sensor whose output is a voltage range corresponding to the input what it senses, (like Temperature, Humidity, Gas concentration, Pressure, Light Intensity etc.) which needs to be taken to the Microprocessor or Microcontroller to act upon or for further processing, then we need a Mediator between the analog voltages and the Digital Signals of Microcontroller. An ADC (Analog to Digital Converter) is just the device to do it.

It has the following characteristics:

  • The input to the A/D converter is a voltage. A/D converters may be designed for voltages from 0 to 10v, from -5 to +5v, etc., but they almost always take a voltage input. In any event, the input is an analog voltage signal for most cases.
  • The output of the A/D converter is a binary signal, and that binary signal encodes the analog input voltage.  So, the output is some sort of digital number, which can be read by a computer.

ADC0808, ADC0809 data acquisition component is a monolithic CMOS device with an 8-bit analog-to-digital converter, 8-channel multiplexer and microprocessor compatible control logic. Easy interfacing to microprocessors is provided by the latched and decoded multiplexer address inputs and latched TTL TRI-STATE® outputs.

Key Specifications Of ADC 0808:

  • Resolution: 8 Bits
  • Single Supply: 5 VDC
  • Low Power: 15 mW
  • Conversion Time: 100 μs

Absolute Maximum Ratings

  • Supply Voltage (VCC) (Note 3) 6.5V
  • Voltage at Any Pin Except Control Inputs −0.3V to (VCC+0.3V)
  • Voltage at Control Inputs  (START, OE, CLOCK, ALE, ADD A, ADD B, ADD C) −0.3V to +15V

Flow Chart of Reading Data from ADC:

 

Digital to Analog Converter (DAC):

            To interface the Microcontroller to the real world where just an ON/OFF control is not sufficient enough, for example a Proportional Valve which requires an Analog voltage ranging within certain voltage levels, or a voltage controlled fan/motor speed controller, or brightness of an LIGHT which depends proportionally to the input voltage, we need a device which can take the digital output data of the microcontroller and give a analog electrical quantity. A DAC is a device for just that purpose.

 DAC 0808:

A DAC is a device which gives a current output which is proportional to the input digital data. But in real world applications we mostly need a voltage output, hence a current to voltage converter is mostly connected to the output of a DAC as shown above.

The output Current of the DAC is given as,

 

Schematic of Interfacing ADC 0808 and DAC 0808 with AT89c51 Microcontroller:


 

 

 

The Code:

;ADC 0808 Interfacing with Atmel 89C51 uC

;Interrupt Driven Method

 

adc_a      bit   p2.0        ;define ADC pins connected

adc_b      bit   p2.1        ;to the pins of Microcontroller

adc_c      bit   p2.2

adc_sc      bit   p2.3

adc_ale     bit   p2.4

adc_oe      bit   p2.5

 

 

      .org  0000h       ;set start address to 0000h

      sjmp  main        ;jump to main program

 

      .org  0003h       ;address of the ISR

 

 

      setb  adc_oe            ;enable the Output port of ADC

      nop

      mov   A, p1       ;move converted data from ADC to Accumulator

      mov   p0, A       ;move the data to DAC's I/p port'

      clr   adc_oe

      reti              ;return from ISR to main Program

 

main:mov   IE, #81h    ;enable Int0

      setb  TCON.0            ;enable edge triggered

 

      mov   p1, #0ffh   ;set p1 as i/p port

 

 

      clr   adc_oe            ;disconnect adc's data bus from Microcontroller

      clr   adc_ale

      clr   adc_sc

 

      clr   adc_a       ;set the address of I/P channel of ADC

      clr   adc_b

      clr   adc_c

 

      setb  adc_ale           ;latch the address

      setb  adc_sc            ;give a pulse for Start Conversion

      clr   adc_ale

      clr   adc_sc

 

loop_here:  mov   r6, #2fh    ;this is what the Microcontroller

repeat:     djnz  r6,repeat  ;is busy doing;Note:THIS SHOULD BE GREATER

      ljmp  main        ;THAN THE TIME REQUIRED FOR CONVERSION i.e. approx 100uS

 

      END               ;end of main program

 

The Simulated CRO Waveform:

 

 The Proteus Simulation Video (Flash Recording):

 

 

The Proteus Design File and The code can be downloaded from this link (zip) or this link (rar).