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