发 帖  
原厂入驻New
[ADC/AFE] CS1237 设置640Hz采样,读出数据异常,设置40Hz,读出数据OK
2020-4-7 14:59:58  384 cs1237
分享
100ms采样一次,设置640Hz时读出数据乱跳,设置40Hz时读出数据正常。
读函数如下:
int32_t Read_CS1237(void)
{
    unsigned char i;
    uint32_t dat=0;//读取到的数据
    unsigned int count_i=0;//溢出计时
    int32_t temp;
   
//    OUT_OUT();
//    DOUT_1; //OUT引脚拉高
    SCLK_0;//时钟拉低
    OUT_IN();
    while( SDA ==1)//等待芯片准备好数据
    {
        delay_ms(1);
        count_i++;
        IF(count_i > 300)
        {
            OUT_OUT();
            SCLK_1;    // CLK=1;
            DOUT_1;    // OUT=1;
            return 1;//超时,则直接退出程序
        }
    }
   
    dat=0;
    for(i=0;i<24;i++)//获取24位有效转换
    {
        SCLK_1;            // CLK=1;
        Delay_Us(10);
        dat <<= 1;
        if( SDA ==1)
            dat ++;
        SCLK_0;    // CLK=0;
        Delay_Us(10);
    }
   
    for(i=0;i<3;i++)//接着前面的时钟 再来3个时钟
    {
        SCLK_1;    // CLK=1;
        Delay_Us(10);
        SCLK_0;    // CLK=0;
        Delay_Us(10);
    }
   
    OUT_OUT();
    DOUT_1;   //OUT = 1;
   
    //ADC_BIT  16,舍弃低8位
   
    i = 24-ADC_BIT;
    dat >>= i;
   
    if(dat&0x00008000)// 判断是负数 最高位24位是符号位
    {
        temp=-(((~dat)&0x00007FFF) + 1);// 补码变源码
    }
    else
        temp=dat; // 正数的补码就是源码
//    temp = dat;
    return temp;
}


0
2020-4-7 14:59:58   评论 分享淘帖
1 个讨论
问哈 两个CS1237可以用一个IO 控制SCLK吗?想节约一个IO
1、640Hz接近1ms的数据刷新速度了,上面代码等待数据准备好的延时达到1ms同一个量级。很有可能采集到正在更新数据时的数据,出现读出来乱码的情况。
2、速度比较快的时候建议采用中断的方式采集数据。
2020-6-22 10:12:05 评论

举报

只有小组成员才能发言,加入小组>>

64个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表