完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
你好,我配置了两个channel setup进行AD转换,用的默认的连续方式转换,power mode 为full mode,每隔1ms去读取状态寄存器和数据寄存器的数据,根据状态寄存器的低四位确定channel号,大部分时间转换数据都是对的,但是总会出现这样的现象:一个通道的值采集的是另外一个通道的数据,用的官方提供的驱动函数AD7124_ReadData(ad7124_device *device, int32_t* pData),请问是什么原因呢?我该如何处理?困扰好久了
|
|
相关推荐
9个回答
|
|
按数据手册对对时序吧,再优化下程序。
|
|
|
|
我是先写的0x40读取状态寄存器,再写0x42读取数据寄存器,上面两个图是正常的,一个读的是channel0,一个读的是channel1,蓝的DOUT,黄的DIN,绿的SCLK,cs没抓 但是出现下面两张图就会有问题,我写0x40读状态寄存器是对的,紧接着写0x42的时候,DOUT会出现高电平的情况,然后读到的值就不对了,是另外一个通道的数据,是不是新的数据还没转换好我就去取导致数据丢了呢?那我怎么知道数据准备好了呢?我读的状态寄存器最高位为0显示准备好了啊, |
|
|
|
yhxc 发表于 2018-8-19 08:27 这个ADC需要配置每次转换的时间,也就是配置滤波参数。如果在1mS内没有转换完成,或者转换时间刚好少于1mS但是差别又很小时,可能存在你说的问题。 建议把转换时间等参数配置为一次转换少于1mS再测量下看下情况。 |
|
|
|
dsdaiztt 发表于 2018-8-19 08:37 感谢回复,这个问题我考虑了,之前我调成每隔5ms去采集还是有问题,我按照您的建议设置下滤波参数试一下 |
|
|
|
这个ADC性能不错,我用过其上一代产品。你看下修改后是否还有问题? |
|
|
|
找到原因了,犯了低级错误,是我的读写时序没有写好,写的时候应该先放数据再打脉冲,读的时候下降沿后读取,分享下我的读写函数,希望大家少走弯路
int32_t SPI_WriteByte(unsigned char WritedData) { unsigned char i; for(i=0; i<8; i++) { if(WritedData & LocBitMap[7-i]) { IO0SET = AD7124_DIN; } else { IO0CLR = AD7124_DIN; } IO0CLR = AD7124_DCLK; __asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP}; __asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP}; IO0SET = AD7124_DCLK; __asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP}; __asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP}; } return SUCCESS; //IO0SET = AD7124_ADCS; } int32_t SPI_ReadByte(void) { unsigned char i; rdata=0; for(i=0; i<8; i++) { IO0CLR = AD7124_DCLK; __asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP}; __asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP}; rdata = rdata | (((IO0PIN & AD7124_DOUT) >> 5) << (7-i)); IO0SET = AD7124_DCLK; __asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP}; __asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP};__asm{NOP}; } return rdata; } |
|
|
|
yhxc 发表于 2018-8-19 09:15 为什么你的驱动没有操作CS脚呀 |
|
|
|
本来以为找到原因改好了,我之前power mode 用的low power,现在用full power 模式,同样的问题又出现了,我检查了好久,好像不是时序的问题,感觉是我读取数据的时候好像数据丢失了,不知道怎么处理啊,求解啊啊啊,下面的图前两个是正确的,第三章有问题啊,红色标记的一出现就有问题
|
|
|
|
只有小组成员才能发言,加入小组>>
2283个成员聚集在这个小组
加入小组1036 浏览 2 评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1421 浏览 2 评论
ADP5092 SYS端口为2.09V,但是REG_OUT为0是什么原因?
1960 浏览 1 评论
ad7193差分输入ain1与ain2差是正值时,读到电压与实际值误差小,但为负值值,误差就变的很大
4285 浏览 2 评论
9086 浏览 1 评论
ADC3442采集,分析数据出现有规则毛刺,请问是哪方面的问题啊?
1628浏览 3评论
AD7190状态寄存器一直是0x80,连续转换模式下RDY不拉低
1713浏览 2评论
1038浏览 2评论
1704浏览 2评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1425浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-8 06:14 , Processed in 1.172509 second(s), Total 105, Slave 85 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号