找回密码
 立即注册
查看: 206|回复: 26

使用ai801u通过硬件i2c沟通外部adc采集电压信号,最终将数据通过usb传入pc端 后续

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-08-18 12:23:08
已绑定手机

5

主题

32

回帖

127

积分

注册会员

积分
127
发表于 6 天前 | 显示全部楼层 |阅读模式
大佬们好,上个帖子听劝,我回去将时序拉长到了三百多毫秒,然而仍旧出现了单片机读取电平不稳定的情况,而ADC响应和采集的电平都是正常的。希望各位大佬能够再次给予帮助,非常感谢。
以下是采集和通信均正常的数据,附上一些解算

0.200V波形采集正常.png
0.200V波形
采集正常

对应时序解读出电压信号对应值为0001010010100100,转换为电压值为:0.2015V
相应的,pc对应二进制应当为10000101 0010 1001 0000 0000,
对应十六进制数为85 29 00

0.200V采集正常.png
0.200V电脑接收到单片机的数据
正常,与解算数据相符



0.206V波形采集正常.png
0.206V
采集正常


对应时序解读出电压信号对应值为0001010101001011,转换为电压值为:0.2079V
相应的,pc对应二进制应当为10000101 0101 0010 1100 0000,
对应十六进制数为85 52 C0

0.206V采集正常.png
0.206V电脑接收到单片机的信号
正常(可能是我延迟截图了)



下面附上不正常的数据:

1V对应时序(局部).png
1V
对应时序(局部)

1V对应时序(整体).png
1V
对应时序(整体)

1V对应时序(局部)PC端采集异常.png 1V对应时序(局部)PC端采集异常


2V 对应PC端采集异常.png
2V
对应
PC
端采集异常


2V对应时序波形正常.png
2V
对应时序波形正常


对应时序解读出电压信号对应值为1100111000100111,转换为电压值为:2.013V
相应的,pc端对应二进制应当为10110011 1000 1001 1100 0000



解算时序各电平代表的信息如下:
解算电平.jpg
以0.5V为例:0(起始) 01001000(地址+写) 0(应答位) 10110000(通道选择:10+使能+单通道+0端采集) 0(应答) 10(重复起始) 01001001(地址+读) 0(应答)10001100 0(应答)11100011 0(应答)01000000  1(结束)

时序解读结果完全符号编程内容,ADC传输出来的数据亦符合设定结果,下面根据数据手册对采集的ADC数据进行换算。思路为扣除前面两位符号位,舍弃最后六位固定为0的数据,中间应答位也需扣除,得到ADC所采集电压信息对应的二进制数。之后依照手册中电压对应范围,将二进制数转换为十进制数X,依据钻换关系得到电压大小:X*2.5/2^16
我个人困惑的地方:
1、adc响应根据示波器来看是没有问题的,但是问题是出在传给单片机时候出问题,还是单片机在处理数据时候出现了问题呢?
(代码在上上篇帖子:使用ai801u通过硬件i2c沟通外部adc采集电压信号,最终将数据通过usb传入pc端
https://www.stcaimcu.com/thread-19594-1-1.html
(出处: 国芯人工智能技术交流网站)

2、如果是单片机处理数据时候出现了问题,我个人有个猜测是不是数据位中间穿插的ack应答位导致的?adc发出来的数据是24bit,但是中间他们会每8位插入一个应答,似乎是硬件要求。但这个在我的代码上,我只调用了寄存器去收发24bit数据,我并没有手动加入ack的代码。会不会是单片机没有处理好ack(并且ack附近经常出现尖峰)。另外我之前还使用过软件ic协议,当时编写代码也没有加入ack,而且能pc端和单片机能正常采到数据,只是后来因为位数不够所以更换了单片机,并且改成了硬件i2c。



回复

使用道具 举报 送花

3

主题

2031

回帖

910

积分

等待验证会员

积分
910
发表于 6 天前 | 显示全部楼层
尊敬的各位大佬,您好:

感谢大家的关注与支持。我目前使用AI801U芯片通过硬件I²C与外部ADC进行通信,采集电压信号,并将数据通过USB传输至PC端。此前已根据建议将时序调整为300多毫秒,但单片机读取电平仍存在不稳定现象,而ADC本身的响应和采集电平均正常。现将部分采集与通信数据附上,供参考。

从附件中可见,当输入电压为0.200V时,ADC采集结果正常,解算出的二进制数据为“0001010010100100”,对应电压值为0.2015V。PC端接收到的数据应为二进制“10000101 0010 1001 0000 0000”,即十六进制“85 29 00”,与预期一致,说明通信过程无误。

同样,当输入电压为0.206V时,ADC采集数据稳定,解算后的二进制为“0001010101001011”,对应电压值为0.2079V,PC端接收到的二进制数据为“10000101 0101 0010 1100 0000”,即十六进制“85 52 C0”,也与预期相符。

以上数据表明,在ADC采集与通信环节均未出现异常,但单片机在读取过程中仍存在电平不稳定的状况。这可能涉及以下几方面原因:

1. I²C总线干扰:由于I²C为半双工通信方式,若外部噪声较大或线路布局不合理,可能导致信号干扰,影响读取稳定性。建议检查I²C引脚的连接质量,确保电源与地线稳定,必要时增加去耦电容。

2. 时序配置问题:虽然已延长时序至300ms以上,但仍需确认是否满足ADC的最短响应时间要求。可尝试进一步延长时序,观察是否能改善读取稳定性。

3. ADC输出状态不确定:某些ADC在未完成转换前可能输出无效数据,需确保在读取前ADC已完成转换并进入就绪状态。可通过查询ADC的忙信号(如RDY)来判断是否可以安全读取。

4. 软件逻辑问题:检查单片机在读取ADC数据时的流程,确保在每次读取前完成必要的等待和同步操作,避免因程序逻辑错误导致读取失败。

综上所述,当前问题可能源于硬件信号稳定性或软件时序控制不够精准。建议结合示波器对I²C时序进行观测,同时优化软件逻辑,以提高系统整体的可靠性。

再次感谢大家的帮助与支持,期待各位前辈的进一步指导!

[本文内容由国芯人工智能辅助生成,仅供参考]
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-08-18 12:23:08
已绑定手机

5

主题

32

回帖

127

积分

注册会员

积分
127
发表于 6 天前 | 显示全部楼层
国芯人*** 发表于 2025-8-18 12:33
尊敬的各位大佬,您好:

感谢大家的关注与支持。我目前使用AI801U芯片通过硬件I²C与外部ADC进行通信,采 ...

烦请转一下人工和技术大佬来帮忙解答,感谢
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:27
  • 最近打卡:2025-08-18 13:26:49
已绑定手机

10

主题

53

回帖

620

积分

版主

积分
620
发表于 6 天前 | 显示全部楼层
已经发给技术稍后就会解答
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:276
  • 最近打卡:2025-08-23 14:05:57
已绑定手机

80

主题

2983

回帖

6363

积分

荣誉版主

无情的代码机器

积分
6363
发表于 6 天前 | 显示全部楼层
这个问题貌似没找到完整代码工程及电路图,方便的话上传下看看

另外有没有别的I2C从机或主机可以交叉验证
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-08-18 12:23:08
已绑定手机

5

主题

32

回帖

127

积分

注册会员

积分
127
发表于 6 天前 | 显示全部楼层
erci*** 发表于 2025-8-18 15:50
这个问题貌似没找到完整代码工程及电路图,方便的话上传下看看

另外有没有别的I2C从机或主机可以交叉验证

大佬你好,非常感谢回复,不过我不知道完整的代码工程文件怎么上传,在那个帖子里是直接复制粘贴上去的。另外电路图是需要pcb文件还是说需要实物拍照呢

点评

在这里可打包上传工程压缩包,硬件一般 传个原理图PDF文件就行 [attachimg]112283[/attachimg]  详情 回复 发表于 6 天前
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-08-18 12:23:08
已绑定手机

5

主题

32

回帖

127

积分

注册会员

积分
127
发表于 6 天前 | 显示全部楼层
erci*** 发表于 2025-8-18 15:50
这个问题貌似没找到完整代码工程及电路图,方便的话上传下看看

另外有没有别的I2C从机或主机可以交叉验证

嗯,前几天下单买了一个类似功能的ADC模块,只能等明天到货以后接入电路尝试一下了,我现在想法是实现ai8051u自收自发,来看看它是如何处理adc所传输数据的,但想了一下可能无法实现,应该需要另一个单片机,也是只能等明天后天了
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:276
  • 最近打卡:2025-08-23 14:05:57
已绑定手机

80

主题

2983

回帖

6363

积分

荣誉版主

无情的代码机器

积分
6363
发表于 6 天前 | 显示全部楼层
youzai*** 发表于 2025-8-18 15:54
大佬你好,非常感谢回复,不过我不知道完整的代码工程文件怎么上传,在那个帖子里是直接复制粘贴上去的。 ...

在这里可打包上传工程压缩包,硬件一般 传个原理图PDF文件就行

截图202508181600332762.jpg
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-08-18 12:23:08
已绑定手机

5

主题

32

回帖

127

积分

注册会员

积分
127
发表于 6 天前 | 显示全部楼层
erci*** 发表于 2025-8-18 16:00
在这里可打包上传工程压缩包,硬件一般 传个原理图PDF文件就行

大佬好,我上传了一个压缩包,里面是代码,原理图我稍后再上传

验证ai8051u通信结果.zip

131.18 KB, 下载次数: 2

点评

读取AT24C02,仅修改引脚切换和I2C地址: 看着没问题,有个小差异,第一个字节应为00,为什么1L日志里显示0xFF,代码是否最新代码呢? [attachimg]112289[/attachimg] [attachimg]112290[/attachimg]  详情 回复 发表于 6 天前
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-08-18 12:23:08
已绑定手机

5

主题

32

回帖

127

积分

注册会员

积分
127
发表于 6 天前 | 显示全部楼层
erci*** 发表于 2025-8-18 16:00
在这里可打包上传工程压缩包,硬件一般 传个原理图PDF文件就行

截图202508181616094611.jpg
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-8-24 06:00 , Processed in 0.134166 second(s), 108 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表