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;
}
2020-5-14 08:26:24
问哈 两个CS1237可以用一个IO 控制SCLK吗?想节约一个IO
问哈 两个CS1237可以用一个IO 控制SCLK吗?想节约一个IO
举报
2020-6-22 10:12:05
1、640Hz接近1ms的数据刷新速度了,上面代码等待数据准备好的延时达到1ms同一个量级。很有可能采集到正在更新数据时的数据,出现读出来乱码的情况。
2、速度比较快的时候建议采用中断的方式采集数据。
1、640Hz接近1ms的数据刷新速度了,上面代码等待数据准备好的延时达到1ms同一个量级。很有可能采集到正在更新数据时的数据,出现读出来乱码的情况。
2、速度比较快的时候建议采用中断的方式采集数据。
1
举报
-
星月电子2021:
我640Hz时,程序啥都不干,就专门查询,这样应该和中断差不多了吧?结果还是乱跳,设置为40Hz就能稳定
2020-8-23 09:21:26
我也遇到相同的问题,按照手册上的操作,设置640HZ不成功。你的问题解决了吗?
我也遇到相同的问题,按照手册上的操作,设置640HZ不成功。你的问题解决了吗?
1
举报
2020-8-26 17:16:00
我使用查询的方法也遇到过,更糟糕,10Hz正常,40Hz异常,可能软件没有处理好
我使用查询的方法也遇到过,更糟糕,10Hz正常,40Hz异常,可能软件没有处理好
举报