ADS1258编程中出现的bug
TI技术工程师:
您好!
我在使用ADS1258的时候调试了它的两种工作方式,一是auto channel,一种是fix channel;使用第一种方式都是正常的,但是用第二种方式是,总是会出现bug,在程序运行一段时间后,大概是一两个小时,里面寄存器的值会发生错乱。导致输出有误。原本我对00~08寄存器设置的值为38,21,65,00,FF,FF,00,00,FF.
一开始从串口读回寄存器的值是正确的,但是一段时间后,用串口都回的数据变为:00,21,65,00,FF,FF,00,00,FF. 此时输出的结果是错误的。我想请问一下这会是什么原因造成的?
TI的工程师们呢?在线等啊等啊~~
能否描述一下,你的MCU与ADC连接方式,是在一块板子上嘛?你说的串口是哪个串口?
通信方式是SPI,muc和ADS1258在同一块板子上,我说的串口是说我通过SPI与ADS1258通信,读取寄存器的值,再通过muc的串口发送给电脑,这样我就可以看到寄存器里面的值了。
muc打错了 是mcu
能帮忙用示波器抓一下SPI总线上的图形嘛,看一下,上面没有有明显的毛刺。另外检查一下数字电源的电压是否稳定,干净。
数字电源稳定
我不是很明白您说的SPI总线上的毛刺,经过观察,我的数字电源是3.3V,SPI总线上偶尔会出现毛刺,毛刺的的电压最高为4V 最低会出现-0.8V
问题是我寄存器里面的值只在最开始初始化的时候设置后,理论上说不会再改变。
是的,ADS1258已经有很多的客户在应用,没有出现你描述的问题。因此推测你的问题,可能出现在SPI通信错误,电源电压稳定性,地连接,或者强干扰方面。
你的模拟电源电压是多少。会不会出现低于3.2V一个glitch。ADS1258当模拟电源AVDD-AVSS的值小于3.2V时,内部会产生一个reset信号。模拟电源的低电源也可能引起ADC输出数据的错误。
The output data of the ADC may not be valid under low power-supply conditions.
此时你读到的STATUS寄存器,有没有哪一位指示异常?
模拟电压时5V,status寄存器的指示正常。
我可以使用代码,将寄存器里面的值更新,使得输出结果正确,我上面说的寄存器的设置只是涉及到了一路差分,实际应用中不会这样用,在auto模式是非常正常的。
从你描述来看,auto模式下正常,因此应该不是器件问题自动把寄存器00清0。
建议正常运行后,用示波器一直在线抓SPI线上的波形。当第一次发现读取的值不正常时,就停止串口发送任何命令,查看示波器上的波形是否有异常写入命令。