新闻中心

EEPW首页>嵌入式系统>设计应用> 基于单片机与AD1674的数据采集

基于单片机与AD1674的数据采集

作者: 时间:2012-03-28 来源:网络 收藏

的接口:可以进行12位转换,也可以进行8位转换,由于是8位的,需要进行两次转换,这里需要注意的是必须将BIT11-BIT4接到数据总线的 D7-D0,而将BIT3-BIT0采取向高位靠齐,接到接到D7-D4,分两次读取转换结果,切不可错接,如果错接的话,极易损坏芯片,

也不能正确读取转换结果。

的功能图如下:

51.jpg

2.与ATMEL89S8252的接口:

模拟量经由八选一多路转换器ADG408 输入到 AD1674.AD1674可以进行12位转换,也可以进行8位转换,由于是8位的,需要进行两次转换,这里需要注意的是必须将 BIT11-BIT4接到数据总线的D7-D0,而将BIT3-BIT0采取向高位靠齐,接到接到D7-D4,分两次读取转换结果。

AD1674有 5根控制线,其中CE,CS,R/C,为一般控制线,完成器件的定时、寻址、启动和读出操作,12/8和A0决定芯片的转换周期和数据输出格式。 CE,CS,R/C三者有效的次序可先可后,在本单片机系统中,12/8接地,CE与单片机的读写信号经过与或门连接。而CE,R/C由74LS373控制,CS由74LS138经过译码来控制。在下图中可以看出AD1674的地址为0x5fff,74LS373的地址为0x3fff 。在启动转换或读取A/D 之前,必须将A0和R/C置成如上图所示的相应电平,然后再在CS端施加一负脉冲。AD1674的总线读取周期为250ns,可直接挂接在数据总线上。由于AD1674的转换速度极快,采用查询的方式来设计的。其中STS是转换结束标志,它可提供CPU查询A/D转换是否结束。在本系统中,STS接单片机的P13端.

系统连线图如下:

3.本系统软件采用C语言开发设计而成,增强了程序的可读性和易懂性。程序清单如下:
sbit p14=P1^4;
sbit P13=P1^3;
char xdata *ad74_ls=(char xdata *)0x3fff;//373地址
char xdata *ad_1674=(char xdata *)0x5fff;
void select_channel (unsigned char ch)
{
p14=1;选中408
if(ch==0)
{
*ad74_ls=0x00; 373高3位控制ADG408的通道信号
*ad_1674=0x00;//启动12位
while(P13==1);等待P13变低,转换结束
*ad74_ls=0x02; //置r/c为1,A0=0
h=*ad_1674; 读取高8位
*ad74_ls=0x03; //置r/c为1,A0=1
l=*ad_1674; }读取低4位
else if(ch==1)
{ *ad74_ls=0x20;
*ad_1674=0x00;//启动12位
while(P13==1);
*ad74_ls=0x22; //置r/c为1,A0=0
h=*ad_1674;
*ad74_ls=0x23; //置r/c为1,A0=1
l=*ad_1674;
}
else if(ch==2)
{ *ad74_ls=0x40;
*ad_1674=0x00;//启动12位
while(P13==1);
*ad74_ls=0x42; //置r/c为1,A0=0
h=*ad_1674;
*ad74_ls=0x43; //置r/c为1,A0=1
l=*ad_1674;
}
else if(ch==3)
{ *ad74_ls=0x60;
*ad_1674=0x00;//启动12位
while(P13==1);
*ad74_ls=0x62; //置r/c为1,A0=0
h=*ad_1674;
*ad74_ls=0x63; //置r/c为1,A0=1
l=*ad_1674;
}
else if(ch==4)
{ *ad74_ls=0x80;
*ad_1674=0x00;//启动12位
while(P13==1);
*ad74_ls=0x82; //置r/c为1,A0=0
h=*ad_1674;
*ad74_ls=0x83; //置r/c为1,A0=1
l=*ad_1674;
}
else if(ch==5)
{ *ad74_ls=0x0A0;
*ad_1674=0x00;//启动12位
while(P13==1);
*ad74_ls=0x0A2; //置r/c为1,A0=0
h=*ad_1674;
*ad74_ls=0x0A3; //置r/c为1,A0=1
l=*ad_1674;
}
else if(ch==6)
{ *ad74_ls=0x0C0;
*ad_1674=0x00;//启动12位
while(P13==1);
*ad74_ls=0x0C2; //置r/c为1,A0=0
h=*ad_1674;
*ad74_ls=0x0C3; //置r/c为1,A0=1
l=*ad_1674;
}
else
{ *ad74_ls=0x0E0;
*ad_1674=0x00;//启动12位
while(P13==1);
*ad74_ls=0x0E2; //置r/c为1,A0=0
h=*ad_1674;
*ad74_1s=0xE3;
l=*ad_1674;
}
}



评论


相关推荐

技术专区

关闭