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).