[ZLG-ARM] 有哪位大虾用过TI公司的AD采集芯片ADS1211

[复制链接]
2141|1
 楼主| kernel99 发表于 2008-1-23 15:09 | 显示全部楼层 |阅读模式
有哪位大虾用过TI公司的AD采集芯片ADS1211,能否提供开发资料或一些经验!<br /><br />我MSN:kernel21cn@sohu.com&nbsp;.<br />现有的设计是参考网上一些资料:资料如下:<br /><br />将电路设置为从动方式,增益GAIN选为1,加速因子TMR为16,fXIN选择10MHz,抽取率(DR)为312(即100111000&nbsp;,相当于0X38),fDATA为10MHz并选择单极性输入和半自动校准方式,同时选择通道输入1,具体的初始化,测量程序和读写延时子程序如下:<br /><br />★★★★★★★★现在遇到情况是:SDOUT没有输出!!!!!★★★★★★★★<br /><br />说明:ARM7的&nbsp;&nbsp;&nbsp;P1.14&nbsp;&nbsp;&nbsp;&nbsp;接&nbsp;&nbsp;&nbsp;&nbsp;ADS1211的&nbsp;&nbsp;&nbsp;DRDY&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ARM7的&nbsp;&nbsp;&nbsp;P1.27&nbsp;&nbsp;&nbsp;&nbsp;接&nbsp;&nbsp;&nbsp;&nbsp;ADS1211的&nbsp;&nbsp;&nbsp;SDOUT<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ARM7的&nbsp;&nbsp;&nbsp;P1.16&nbsp;&nbsp;&nbsp;&nbsp;接&nbsp;&nbsp;&nbsp;&nbsp;ADS1211的&nbsp;&nbsp;&nbsp;SDIO&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ARM7的&nbsp;&nbsp;&nbsp;P1.17&nbsp;&nbsp;&nbsp;&nbsp;接&nbsp;&nbsp;&nbsp;&nbsp;ADS1211的&nbsp;&nbsp;&nbsp;SCLK&nbsp;<br /><br /><br /><br /><br /><br /><br />★★★★★★★★★★ADS1211芯片初始化&nbsp;的代码:★★★★★★★★★★<br />//2008年1月14号,先等待DRDY变高,再等它变低<br />&nbsp;&nbsp;&nbsp;&nbsp;while((IOPIN1&(1&lt&lt14))==0X00)<br />&nbsp;&nbsp;&nbsp;&nbsp;{};&nbsp;&nbsp;//说明,DRDY接的是我用的ARM7芯片的P1.14脚<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((IOPIN1&(1&lt&lt14))!=0X00)<br />&nbsp;&nbsp;&nbsp;&nbsp;{};//等待DRDY到由高电平跳变到低电平为止<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i=0;&nbsp;i&lt300;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{};//大概延时35us<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;write_byte_ads2(0x64);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置INSR&nbsp;指令寄存器,设置ADS1211芯片等会写&nbsp;CMR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//从第0X03个字节开始<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i=0;&nbsp;i&lt300;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{};//大概延时35us<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;write_byte_ads2(0x52);//设置写最高字节<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i=0;&nbsp;i&lt300;&nbsp;i++)&nbsp;{};//大概延时35us<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;write_byte_ads2(0x20);//选择半自动校准模式,增益PGA为1,通道1<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i=0;&nbsp;i&lt300;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{};//大概延时35us<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;write_byte_ads2(0x81);//根据抽取率=fxin*TMR/(Fdata*512);计算抽取率<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i=0;&nbsp;i&lt300;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{};//大概延时35us<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;write_byte_ads2(0x38);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//TMR设置为为16;Fdata为1000;Fxin为10M,得到抽取率为312.5<br /><br /><br />★★★★★★★★★★★读SDOUT输出数据的&nbsp;代码:★★★★★★★★★★★★<br /><br />/********************************************************************<br />**&nbsp;函数名称&nbsp;&nbsp;&nbsp;read_byte_ads2(void)<br />**&nbsp;函数功能&nbsp;:读出ADS1211寄存器中数据<br />**&nbsp;入口参数&nbsp;:输入数字量<br />**&nbsp;出口参数&nbsp;:无<br />**************************************************************/<br />INT8U&nbsp;&nbsp;&nbsp;&nbsp;read_byte_ads2(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;&nbsp;&nbsp;&nbsp;read_data;<br />&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;j;<br />&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;&nbsp;&nbsp;&nbsp;INT32U&nbsp;k;<br />&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;&nbsp;&nbsp;&nbsp;INT32U&nbsp;m=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;&nbsp;&nbsp;&nbsp;n;<br />&nbsp;&nbsp;&nbsp;&nbsp;m=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;read_data=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=8;i&gt0;i--)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j=i-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IOSET1=1&lt&lt17;//sclk=1;ADS1211的SCLK置位<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(n=0;&nbsp;n&lt30;&nbsp;n++)&nbsp;&nbsp;//2008--1--22<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{};//大概延时60us<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k=IOPIN1;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//说明,ARM7芯片的P1.27引脚接ADS1211的SDOUT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m=(INT8U)((k&0x08000000)&gt&gt27);//读取SDOUT/2;P1.27<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;read_data|=(m&lt&ltj);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IOCLR1=1&lt&lt17;//sclk2=0;ADS1211/2的SCLK清零<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(n=0;&nbsp;n&lt30;&nbsp;n++)&nbsp;&nbsp;//2008--1--22<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{};//大概延时60us<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;return(read_data);<br />}<br /><br />★★★★★★★★★★★通过SDIO引脚往ADS1211写&nbsp;的代码:★★★★★★★★<br /><br />void&nbsp;&nbsp;&nbsp;&nbsp;write_byte_ads2(INT8U&nbsp;in_data)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;j;<br />&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;&nbsp;&nbsp;&nbsp;INT32U&nbsp;k;<br />&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;&nbsp;&nbsp;&nbsp;m;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IOCLR1=1&lt&lt17;&nbsp;&nbsp;//说明我用的ARM7引脚P1.17接ADS1211芯片的SCLK<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(m=0;&nbsp;m&lt300;&nbsp;m++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{};//大概延时35us<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=8;i&gt0;i--)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j=i-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IOSET1=1&lt&lt17;//sclk2=1;ADS1211的SCLK置位<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(m=0;&nbsp;m&lt30;&nbsp;m++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{};//大概延时3.5us<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k=IOPIN1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IOPIN1=((k&(~(1&lt&lt16)))|(((in_data&gt&gtj)&0X01)&lt&lt16));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//说明:我用的ARM7引脚P1.16接ADS1211芯片的SDIO<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(m=0;&nbsp;m&lt30;&nbsp;m++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{};//大概延时3.5us<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IOCLR1=1&lt&lt17;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(m=0;&nbsp;m&lt30;&nbsp;m++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{};//大概延时3.5us<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br /><br /><br />★★★★★★★★★每次读取ADS1211进行AD转换后数据代码:★★★★★★★<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;&nbsp;&nbsp;&nbsp;volatile&nbsp;&nbsp;&nbsp;&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//2008年1月14号,改先等待DRDY变高,再等它变低<br />&nbsp;&nbsp;&nbsp;&nbsp;while((IOPIN1&(1&lt&lt14))==0X00)<br />&nbsp;&nbsp;&nbsp;&nbsp;{};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((IOPIN1&(1&lt&lt14))!=0X00)<br />&nbsp;&nbsp;&nbsp;&nbsp;{};//DRDY/2等待到由高电平跳变到低电平为止<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i=0;&nbsp;i&lt300;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{};//大概延时30us<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_byte_ads2(0xc0);//此条指令,意思是读DOR寄存器中值,读3个字节<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i=0;&nbsp;i&lt300;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{};//大概延时35us<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ad_data[ad_num][0]=read_byte_ads2();//最高字节部分<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i=0;&nbsp;i&lt300;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{};//大概延时35us<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ad_data[ad_num][1]=read_byte_ads2();//中间字节部分<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i=0;&nbsp;i&lt300;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{};//大概延时35us<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ad_data[ad_num][2]=read_byte_ads2();//最低字节部分<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

93

主题

177

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部