打印

请教:有哪位大虾用过TI公司的AD采集芯片ADS1211

[复制链接]
2172|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kernel99|  楼主 | 2008-1-23 14:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有哪位大虾用过TI公司的AD采集芯片ADS1211,能否提供开发资料或一些经验!

我MSN:kernel21cn@sohu.com .
现有的设计是参考网上一些资料:资料如下:

将电路设置为从动方式,增益GAIN选为1,加速因子TMR为16,fXIN选择10MHz,抽取率(DR)为312(即100111000 ,相当于0X38),fDATA为10MHz并选择单极性输入和半自动校准方式,同时选择通道输入1,具体的初始化,测量程序和读写延时子程序如下:


说明:ARM7的   P1.14    接    ADS1211的   DRDY  
     ARM7的   P1.27    接    ADS1211的   SDOUT
     ARM7的   P1.16    接    ADS1211的   SDIO 
     ARM7的   P1.17    接    ADS1211的   SCLK 

★★★★★★ADS1211芯片初始化 的代码:★★★★★★
//2008年1月14号,先等待DRDY变高,再等它变低
    while((IOPIN1&(1<<14))==0X00)
    {};  //说明,DRDY接的是我用的ARM7芯片的P1.14脚
    
    while((IOPIN1&(1<<14))!=0X00)
    {};//等待DRDY到由高电平跳变到低电平为止
    
         for (i=0; i<300; i++)
    {};//大概延时35us
    
    write_byte_ads2(0x64);
        //设置INSR 指令寄存器,设置ADS1211芯片等会写 CMR
          //从第0X03个字节开始
    
    
    for (i=0; i<300; i++)
    {};//大概延时35us
    
    
    write_byte_ads2(0x52);//设置写最高字节
    
    for (i=0; i<300; i++) {};//大概延时35us

    write_byte_ads2(0x20);//选择半自动校准模式,增益PGA为1,通道1
    
    for (i=0; i<300; i++)
    {};//大概延时35us
    
    write_byte_ads2(0x81);//根据抽取率=fxin*TMR/(Fdata*512);计算抽取率
    
    for (i=0; i<300; i++)
    {};//大概延时35us

    write_byte_ads2(0x38);    
                                                                         //TMR设置为为16;Fdata为1000;Fxin为10M,得到抽取率为312.5


★★★★★★读SDOUT输出数据的 代码:★★★★★★

/********************************************************************
** 函数名称   read_byte_ads2(void)
** 函数功能 :读出ADS1211寄存器中数据
** 入口参数 :输入数字量
** 出口参数 :无
**************************************************************/
INT8U    read_byte_ads2(void)
{
    INT8U    read_data;
    static    INT8U i;
    static    INT8U j;
    static    INT32U k;
    static    INT32U m=0;
    static    INT16U    n;
    m=0;
    read_data=0;
    for(i=8;i>0;i--)
    {
        j=i-1;
        IOSET1=1<<17;//sclk=1;ADS1211的SCLK置位
        
        for (n=0; n<30; n++)  //2008--1--22
        {};//大概延时60us
        k=IOPIN1;

        //说明,ARM7芯片的P1.27引脚接ADS1211的SDOUT        
        m=(INT8U)((k&0x08000000)>>27);//读取SDOUT/2;P1.27
    
             read_data|=(m<<j);
        IOCLR1=1<<17;//sclk2=0;ADS1211/2的SCLK清零
        for (n=0; n<30; n++)  //2008--1--22
                    {};//大概延时60us
                    
    }
    return(read_data);
}

★★★★★★通过SDIO引脚往ADS1211写 的代码:★★★★★★

void    write_byte_ads2(INT8U in_data)
{
    static    INT8U i;
    static    INT8U j;
    static    INT32U k;
    static    INT16U    m;
    
    IOCLR1=1<<17;  //说明我用的ARM7引脚P1.17接ADS1211芯片的SCLK
    for (m=0; m<300; m++)
    {};//大概延时35us
                    
    for(i=8;i>0;i--)
    {
       j=i-1;
       IOSET1=1<<17;//sclk2=1;ADS1211的SCLK置位
       for (m=0; m<30; m++)
       {};//大概延时3.5us
        
            k=IOPIN1;
       IOPIN1=((k&(~(1<<16)))|(((in_data>>j)&0X01)<<16));
            //说明:我用的ARM7引脚P1.16接ADS1211芯片的SDIO

            for (m=0; m<30; m++)
       {};//大概延时3.5us
        
            IOCLR1=1<<17;
       for (m=0; m<30; m++)
       {};//大概延时3.5us
        
    }
            
}



★★★★★★每次读取ADS1211进行AD转换后数据代码:★★★★★★
void    ads2_return_data(INT8U ad_num)
{
    INT16U    volatile    i;
    
         //2008年1月14号,改先等待DRDY变高,再等它变低
    while((IOPIN1&(1<<14))==0X00)
    {};
            
    while((IOPIN1&(1<<14))!=0X00)
    {};//DRDY/2等待到由高电平跳变到低电平为止
    
    for (i=0; i<300; i++)
    {};//大概延时30us
    
         write_byte_ads2(0xc0);//此条指令,意思是读DOR寄存器中值,读3个字节
    
    for (i=0; i<300; i++)
    {};//大概延时35us
    
    ad_data[ad_num][0]=read_byte_ads2();//最高字节部分
    

    for (i=0; i<300; i++)
    {};//大概延时35us
    
    ad_data[ad_num][1]=read_byte_ads2();//中间字节部分
    
    
    for (i=0; i<300; i++)
    {};//大概延时35us
    
    ad_data[ad_num][2]=read_byte_ads2();//最低字节部分
    
}


相关帖子

沙发
mohanwei| | 2008-1-23 20:38 | 只看该作者

布线、布局……

使用特权

评论回复
板凳
mohanwei| | 2008-1-23 20:39 | 只看该作者

布线、布局……

使用特权

评论回复
地板
kernel99|  楼主 | 2008-1-24 08:54 | 只看该作者

mohanwei,您用过ADS1211,交流一下吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

93

主题

177

帖子

1

粉丝