ADC0809是一款8位采样器件,根据逐次逼近原理执行模数转换。里面有一个8路复用开关,可以根据地址码锁存解码信号,只选通8路模拟输入信号中的一路进行A/D转换。
1.主要特点1)8通道8位a/d转换器,即分辨率为8位。
2)带开关启停控制端子。
3)转换时间为100s。
4)单+5V电源
5)模拟输入电压范围为0 ~+5v,不需要零点和满量程校准。
6)工作温度范围为-40 ~+85摄氏度。
7)功耗低,约15mW。
一、ADC0809使用详情-引脚图和功能1、ADC0809引脚图
2、ADC0809引脚功能
In0 ~ in7: 8模拟输入端子。
D0 ~ D7: 8位数字输出端子。
ADDA、ADDB、addc: 3位地址输入线,用于选择8个模拟通道之一。请参阅表进行选择。
ALE:数据锁存使能信号,输入,高电平有效。
Start: A/D转换开始信号,输入,高电平有效。
Eoc: a/d转换结束信号,输出。当转换开始时,此引脚为低电平,当A/D转换完成时,此引脚输出高电平。
OE:数据输出使能信号,输入,高电平有效。转换后,如果从此引脚输入高电平,输出三态门打开,输出锁存器的数据从D0发送到D7。
CLK:时钟脉冲输入。要求时钟频率不高于640KHZ。REF,REF-:参考电压输入端。
Vcc:电源,接5V电源。
GND:地面。
二、ADC0809使用详情-工作原理ADC0809是一款采用CMOS技术制造的双列直插式单芯片8位模数转换器。(分辨率)分辨率为8位,精度为7位。它有8个模拟输入通道、通道地址解码锁存器,输出有三态数据锁存器。启动信号为脉冲启动模式,最大可调误差为1 LSB。(转换精度)
ADC0809中没有时钟电路,因此CLK时钟需要从外部输入。fclk的允许范围为500kHz~1MHz,典型值为640kHz。每个通道需要66~73个时钟脉冲,约100 ~ 110 s(切换时间)工作温度范围为-40~ 85。功耗15mW,输入电压0 ~ 5V,采用5V单电源供电。(范围)
1、ADC0809时序图
2、ADC0809的工作流程如下所示:
1)输入3位地址,使ALE=1,将地址存储在地址锁存器中,从8个模拟通道中选择一个模拟信号由地址解码器解码后送至比较器。
2)发送START高电平脉冲,START上升沿复位逐次逼近寄存器,下降沿启动A/D转换,使EOC信号为低电平。
3)转换完成后,转换结果送到输出三态锁存器,EOC信号回到高电平,通知CPU转换完成。
4)当CPU执行数据读取指令,使得OE处于高电平时,从输出端d0到D1读取数据。
3、转换数据的传输
A/D转换后得到的数据要及时传送到单片机进行处理。数据传输的关键问题是如何确认A/D转换完成,因为只有确认后才能进行传输。为此,可以采取以下三种方式。
(1)定时传输模式
对于A/D转换器,转换时间是已知的,并固定为一个技术指标。比如ADC0809的转换时间为128s,相当于6MHz MCS-51单片机的64个机器周期。据此可以设计一个延时子程序,一启动A/D转换就调用。当延迟时间到达时,转换必须已经完成,然后才能进行数据传输。
(2)查询方法
A/D转换芯片有指示转换完成的状态信号,如ADC0809的EOC端。因此,可以通过查询测试EOC的状态,即确认转换是否完成,然后进行数据传输。
(3)中断模式
将指示转换完成的状态信号(EOC)作为中断请求信号,以中断模式传输数据。无论哪种方式,只要转换完成,就可以通过指令传输数据。先发出口地址,信号有效时,OE信号有效,转换后的数据送到数据总线,由单片机接受。
用法详情-内部结构1。ADC0809内部结构ADC 0809内部逻辑结构图如图所示。
图中多路开关可以通过8个模拟通道,允许8个模拟通道分时输入,共用一个A/D转换器进行转换。这是一种经济的多通道数据采集方法。数据锁存和解码电路锁存并解码ABC3的三个地址位,解码输出用于通道选择。转换结果存储在三态输出锁存器中,因此可以直接连接到系统数据总线。表1显示了通道选择表。
表1频道选择表
2、 ADC0809信号引脚到ADC 0809主信号引脚的功能如下:
复位ADC0809当开始转换开始信号开始上升沿时;在START的下降沿启动芯片,开始A/D转换;在模数转换期间,START应保持低电平。这个信号有时缩写为ST .
ABC地址线通道端口选择线,A为低位地址,C为高位地址,管脚图中显示了ADDA、ADDB和ADDC。地址状态和通道的对应关系见表1。
CLK时钟信号ADC0809内部没有时钟电路,所需的时钟信号由外界提供,所以时钟信号引脚通常使用频率为500KHz的时钟信号。
EOC转换结束信号EOC=0,转换正在进行;EOC=1,当转换完成时,状态信号可以用作询问的状态标志和中断请求信号。
OE输出许可信号用于控制三态输出锁存器将转换后的数据OE=0输出到单片机,输出数据线为高阻态;OE=1,输出转换后的数据。
Vcc 5V电源
Vref参考电源的参考电压用于与输入的模拟信号进行比较,其典型值为5V(Vref( )=5V,Vref(-)=-5V)作为逐次逼近的参考。
四、ADC0809使用详情-应用电路1、ADC0809与单片机连接电路分析ADC0809与MCS-51单片机连接如图所示:
电路连接主要涉及两个问题:一是8路模拟信号通道的选择,二是A/D转换完成后转换数据的传输。
8通道模拟通道选择
图ADC0809与MCS-51之间的连接
如图9.11所示,模拟通道选择信号ABC分别连接到最低三位地址A0A1A2 (P0.0P0.1P0.2),数据锁存使能信号ALE由P2.0控制,因此8个模拟通道的地址为0 fef8h ~ 0 feffh。此外,选择通道地址作为写选通信号,这部分电路的连接如图9.12所示。
图ADC0809的部分信号连接
图形信号的时间协调
从图中可以看出,ALE信号和START信号连接在一起,使得通道地址在信号的前沿被写入(锁存),在其后沿之后立即开始切换图,这是相关信号的时间协调示意图。
启动模数转换只需要一条MOVX指令。在此之前,需要清除P2.0,并将所选通道对应的最低三位端口地址发送到数据指针DPTR中。例如,当选择IN0通道时,以下两条指令可用于启动模数转换:
MOVDPTR,# FE00H端口地址0809。
MOVX@DPTR,A;开始模数转换(IN0)
注意:这里的A与A/D转换无关,可以是任意值。
2、应用电路二1、原理图从ADC0809的通道IN3输入一个0 ~ 5v之间的模拟量,通过ADC0809转换成数字量,以十进制形式显示在数码管上。ADC0809的VREF连接到+5v。
电路原理图
2、系统板上的硬件连接
(1)用8芯电缆将“单片机系统板”区域的P1端口P1.0-P1.7连接到“动态数字显示”区域的ABCDEFGH端口,作为数码管的笔段驱动器。
(2)在“单片机系统板”区域连接P2端口的P2.0-P2.7
(3)用8芯电缆将“单片机系统板”区域的P0口P0.0-P0.7连接到“模数转换模块”区域的D 0 D1 D2 D3 D5 d6d 7口,将A/D转换后的数据输入到单片机的P0口。
(4)用导线将“模数转换模块”区域的VREF端子连接到“电源模块”区域的VCC端子上;
(5)用导线将“模数转换模块”区域的端子A2A1A0连接到“单片机系统”区域的端子P3.4P3.5P3.6
(6)用导线将“模数转换模块”区域的ST端子连接到“单片机系统”区域的P3.0端子上;
(7)用导线将“模数转换模块”区域的OE端子连接到“单片机系统”区域的P3.1端子上;
(8)用导线将“模数转换模块”区域的EOC端子连接到“单片机系统”区域的P3.2端子上;
(9)用导线将“模数转换模块”区的CLK端子连接到“分频模块”区的/4端子上;
(10)用导线将“分频模块”区域的CKIN端子连接到“单片机系统”区域的ALE端子上;
(11)用导线将“模数转换模块”区域的IN3端子连接到“三路可调电压模块”区域的VR1端子;
3、编程
(1)在A/D转换过程中,用EOC的标志信号检查A/D转换是否完成,如果完成,通过P0口读取数据,经过数据处理后显示在数码管上。
(2).在A/D转换之前,开始转换的方法:
ABC=110选择第三个频道。
ST=0,ST=1,ST=0产生一个正脉冲信号来启动转换。
程序:
#包括《AT89X52.H》
unsignedcharcodedispbitcode[]={0x Fe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f };
unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d、0x7d、0x07、0x7f、0x6f、0x 00 };
unsignedchardispbuf[8]={10,10,10,10,0,0,0 };
unsignedchardispcount
sbitst=p3^0;
sbitoe=p3^1;
sbiteoc=p3^2;
unsignedcharchannel=0xbc//IN3
unsignedchargetdata
voidmain(无效)
{
TMOD=0x 01;
TH0=(65536-4000)/256;
TL0=(65536-4000)% 6;
TR0=1;
ET0=1;
EA=1;
P3=频道;
while(1)
{
ST=0;
ST=1;
ST=0;
while(EOC==0);
OE=1;
getdata=P0
OE=0;
disp buf[2]=get data/100;
getdata=getdata;
disp buf[1]=get data/10;
dispbuf[0]=getdata;
}
}
void 0(void)中断1使用0
{
TH0=(65536-4000)/256;
TL0=(65536-4000)% 6;
P1=disp code[disp buf[disp count]];
P2=dispbitcode[disp count];
dispcount
if(dispcount==8)
{
dispcount=0;
}
}
标签:信号通道A