非常二的一个bug,感觉脑子正常的人错不了这么离谱...捂着脸说吧:
基本逻辑是移位收一个UINT16的值tmpVal,返一个UINT8的有效值,有效值为P13-P5,MSB在前.
接收的时候就是循环拉clk,然后通过异或来取SDIO的值再移位.最后return (tmpVal>>5) & 0xFF;
傻缺就傻缺在tmpVal这个变量在声明时被我错给了个初值0xFF而不是0,这就导致了异或的结果是低3位全被取反了...
所以现象就是低3位000时读数111,低三位111时读数000.而恰好低3位读数在100时错误的读数结果与正确值只差一个LSB,因此现象就体现为ADC读数低3位为100时读数看上去是对的,然后在000和111的读数上偏离最大且周期波动...
然后我就走上了怀疑走线太渣有串扰->采样电压有波动->参考电压有波动->MD这鸟芯片有毛病的脑抽之旅,直到最终发现真相
【 在 ericking0 的大作中提到: 】
: 我之前也觉得这么大的非线性的误差不会是ADC本身的问题;
: 不过始终想不通什么样的操作错误能导致这种现象;
: 话说能透露一下吗?MCU采集后在软件侧出的问题?
: ...................
--
FROM 1.89.13.*