8位A/D转换器ADC0809

时间:2015-11-02 07:28  来源:自动控制网

ADC0809是单片双列直插式集成电路芯片,是8通路8位A/D转换器,其主要特点是:分辨率8位;总的不可调误差±1LSB;当模拟输入电压范围为0~5V时,可使用单一的+5V电源;转换时间100μs;温度范围-40~+

;不需另加接口逻辑可直接与CPU连接;可以输入8路模拟信号;输出带锁存器;逻辑电平与TTL兼容。

1、电路组成及转换原理

ADC0809是一种带有8位转换器、8位多路切换开关以及与微处理机兼容的控制逻辑的CMOS组件。8位A/D转换器的转换方法为逐次逼近法。在A/D转换器的内部含有一个高阻抗斩波稳定比较器,一个带有模拟开关树组的256R分压器,以及一个逐次逼近的寄存器。八路的模拟开关由地址锁存器和译码器控制,可以在八个通道中任意访问一个单边的模拟信号,其原理框图如图1所示。

图1 ADC0808/0809原理框图

ADC0809无需调零和满量程调整,又由于多路开关的地址输入能够进行锁存和译码,而且它的三态TTL输出也可以锁存,所以易于与微处理机进行接口。

从图中可以看出,ADC0809由两大部分所组成,第一部分为八通道多路模拟开关,它的基本原理与CD4051类似。它用于控制C、B、A端子和地址锁存允许端子,可使其中一个通道被选中。第二部分为一个逐次逼近型A/D转换器,它由比较器、控制逻辑、输出缓冲锁存器、逐次逼近寄存器以及开关树组和256R电阻分压器组成。后两种电路(即开关树组和256R电阻分压器)组成D/A转换器。控制逻辑用来控制逐次逼近寄存器从高位到低位逐次取“1”,然后将此数字量送到开关树组(8位开关),用来控制开关

与参考电平相连接。参考电平经256R电阻分压器,则输出一个模拟电压

在比较器中进行比较。当

>

时,本位D=0;当

时,则本位D=1。因此,从

比较8次即可逐次逼近寄存器中的数字量,即与模拟量

所相当的数字量相等。此数字量送入输出锁存器,并同时发转换结束脉冲。

2、ADC0808/0809的外引脚功能

图2 ADC0808/0809管脚排列图

ADC0808/0809的管脚排列如图2所示,其主要管脚的功能如下:

IN0~IN7——8个模拟量输入端。

START——启动A/D转换器,当START为高电平时,开始A/D转换。

EOC——转换结束信号。当A/D转换完毕之后,发出一个正脉冲,表示A/D转换结束。此信号可用作为A/D转换是否结束的检测信号或中断申请信号。

OE——输出允许信号。如此信号被选中时,允许从A/D转换器锁存器中读取数字量。

CLOCK——时钟信号。

ALE——地址锁存允许,高电平有效。当ALE为高电平时,允许C、B、A所示的通道被选中,并将该通道的模拟量接入A/D转换器。

ADDA、ADDB、ADDC——通道号地址选择端,C为最高位,A为最低位。当C、B、A全零(000)时,选中IN0通道接入;为001时,选中INl通道接入;为111时,选中IN7通道接入。

——数字量输出端。

(+)、

(-)——参考电压输入端,分别接+、-极性的参考电压,用来提供D/A转换器权电阻的标准电平。在模拟量为单极性输入时;

(+)=5V,

(-)=0V,当模拟量为双极性输入时,

(+)、

(-)。

ALE为地址锁存允许输入线,高电平有效。当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。通道选择表如下表所示。

C

B

A

选择的通道

0

0

0

IN0

0

0

1

IN1

0

1

0

IN2

0

1

1

IN3

1

0

0

IN4

1

0

1

IN5

1

1

0

IN6

1

1

1

IN7

数字量输出及控制线:11条

ST为转换启动信号。当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。EOC为转换结束信号。当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。D7-D0为数字量输出线。

CLK为时钟输入信号线。因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ,

VREF(+),VREF(-)为参考电压输入。

2. ADC0809应用说明

(1). ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连。

(2). 初始化时,使ST和OE信号全为低电平。

(3). 送要转换的哪一通道的地址到A,B,C端口上。

(4). 在ST端给出一个至少有100ns宽的正脉冲信号。

(5). 是否转换完毕,我们根据EOC信号来判断。

(6). 当EOC变为高电平时,这时给OE为高电平,转换的数据就输出给单片机了。

3. 实验任务

如下图所示,从ADC0809的通道IN3输入0-5V之间的模拟量,通过ADC0809转换成数字量在数码管上以十进制形成显示出来。ADC0809的VREF接+5V电压。

4. 电路原理图

C语言源程序

#include

unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,

 0xef,0xdf,0xbf,0x7f};

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f,0x00};

unsigned char dispbuf[8]={10,10,10,10,10,0,0,0};

unsigned char dispcount;

sbit ST="P3"^0;

sbit OE="P3"^1;

sbit EOC="P3"^2;

unsigned char channel="0xbc";//IN3

unsigned char getdata;

void main(void)

{

TMOD=0x01;

TH0=(65536-4000)/256;

TL0=(65536-4000)%256;

TR0=1;

ET0=1;

EA=1;

P3=channel;

while(1)

{

ST=0;

ST=1;

ST=0;

while(EOC==0);

OE=1;

getdata=P0;

OE=0;

dispbuf[2]=getdata/100;

getdata=getdata%10;

dispbuf[1]=getdata/10;

dispbuf[0]=getdata%10;

}

}

void t0(void) interrupt 1 using 0

{

TH0=(65536-4000)/256;

TL0=(65536-4000)%256;

P1=dispcode[dispbuf[dispcount]];

P2=dispbitcode[dispcount];

dispcount++;

if(dispcount==8)

{

dispcount=0;

}

}

(0)

相关推荐