经过长达半年的摸索,还是问题多多,
1.设置完寄存器之后,不能去读,有时读一次读出来的是正确的,再读的话全部是0,但有时直接读出的全部是0,而且AD也不转换。但是写进去不读的话,AD还是能正常转换,DRDY引脚会根据我设定的数据数据速率产生低电平。
2.下面是时序图
如果我设定读7个字节的话, 每次都是第一次读的数据能跟CHK位匹配,后面读出来的所有值都是0,于是我换成只读4字节
只读四字节的话,如果是通过读命令去读,读到的四个字节最后两个字节始终是0,
但是如果直接去读,不发送读命令,读出来的值四个字节都有数据,但极度不稳地,我现在只取了24位,就有最后2位乱跳,我接的是
压力传感器,而且是压的越重,尾数跳动的越多,比如不放重物的时候最后2位跳,可能放上重物的话最后3位,4位也在跳了。
3.最后恳请大家帮忙看看,真不想在这个上面浪费太多时间和精力了,但老板天天追着问,我快被逼疯了。。。代理商那边也没技术支持
通过代理商联系了一个原厂的技术支持,但邮件发过去半个月,一点音讯也没有,我实在没辙了,一点方向都没有。。。
这是原理图
程序是有问题的,你应该DRDY信号接到外部中断,上升沿触发读AD。这样就OK啦~
本帖最后由 dontium 于 2015-1-23 11:21 编辑
我估计是在SPI的读写方法上。TI的很多SPI器件,相位设置不正确时常常出现这个问题。
Input data is latched on the falling edge and output data is updated on the rising edge。
严格按照这个做!
程序中,看到使用了个SPI_write_clock();及SPI_read_clock(),这种方法是不妥的。它不能保证数据的可靠性。
参考办法:
write_data()
{
CLK_PIN_HIGH();
DATA_BIT_OUT();
CLK_PIN_LOW();
}
read_data()
{
CLK_PIN_LOW();
DATA_BIT_OUT();
CLK_PIN_HIGH();
}
本帖最后由 dontium 于 2015-1-23 11:21 编辑