找回密码
 立即注册
楼主: main

8G1K08A/DFN8,A/D经常返回0结果 | 电源输入加去藕电容,信号输入并103小电容到地

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2025-4-1 12:46:00 | 显示全部楼层
ma*** 发表于 2025-4-1 12:10
这是去年初发现的问题。后来病了,直到现在。我现在也没有能力复现了,所以也不能肯定就是真的问题,只能 ...

每次触发ADC转换,完成后停止转换,完成标志置1,如果允许ADC中断,则会进入中断。
所以,ADC是转换一次,值会触发一次中断,不会少也不会多。
用户群那么庞大,目前只有您遇到这个问题。用户遇到的问题,应该是程序处理的问题,可以参考官方例子去测试。也可以添加这样测试:定时器触发ADC间隔1ms(频率1000Hz),每次触发TrigCnt+1,ADC中断里AdcCnt+1,然后计数到1000次就串口发送一次TrigCnt和AdcCnt的值,可以测试至少1000万次(大约3小时),看看是否触发和中断次数一样。

我大量使用ADC做各种各种各样的应用,从未发现有不触发ADC还能进中断的,也从未发现会少进或多进中断的。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-14 09:15:06
已绑定手机

4

主题

23

回帖

272

积分

中级会员

积分
272
发表于 2025-4-1 15:44:55 | 显示全部楼层
梁*** 发表于 2025-4-1 12:46
每次触发ADC转换,完成后停止转换,完成标志置1,如果允许ADC中断,则会进入中断。
所以,ADC是转换一次, ...

如果目前的芯片没做改进的话,按我的方法(看我的贴图表述)试试就能发现。

您说的方法,我目前也没法试了(病没好利索).按您的方法也应该能复现问题。您可以试试。但中断函数里要用当前官方文档的ADC_CONTR &=  ~0x20;来清中断标志(而不是~0x60)。应该会发现问题,进一步再试试ADC的供电开关是不是像我在楼上贴图里说的那样。用户群庞大也不一定会很快有人反映,微软的windows不前年才发现了DOS年代遗留至今的问题。
我重新说一下您提出的测试过程(我完成不了了):
让一次“完整ADC周期”在0.1毫秒以内(或合理的尽量快)。定时器触发ADC间隔10ms(频率100Hz),每次触发TrigCnt+1,ADC中断里AdcCnt+1,然后计数到1000次就串口发送一次TrigCnt和AdcCnt的值,不用测试1000万次;10秒后看效果,看看是否触发和中断次数一样。
要用“当前官方文档”的ADC_CONTR &=  ~0x20;来清中断标志
而不是 ADC_CONTR &=  ~0x60;来清中断标志
还可以试试在跳出中断前 ADC_CONTR &=  ~0x80;关ADC,看看什么结果。
----------------------
稍后我请ECBM的作者也过来说一下,一是 他确实花费精力也验证过的;二是 如果是我说的不对,也别给他造成误解和库的错误。

点评

“ADC的供电开关”,做ADC转换一定要先打开ADC电源并延时至少1ms才启动ADC转换。 不打开ADC电源就启动ADC导致的任何问题都不值得讨论,因为这是错误操作。  详情 回复 发表于 2025-4-1 16:18
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2025-4-1 16:18:03 | 显示全部楼层
ma*** 发表于 2025-4-1 15:44
如果目前的芯片没做改进的话,按我的方法(看我的贴图表述)试试就能发现。

您说的方法,我目前也没法试了( ...

“ADC的供电开关”,做ADC转换一定要先打开ADC电源并延时至少1ms才启动ADC转换。
不打开ADC电源就启动ADC导致的任何问题都不值得讨论,因为这是错误操作。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-14 09:15:06
已绑定手机

4

主题

23

回帖

272

积分

中级会员

积分
272
发表于 2025-4-1 17:07:50 | 显示全部楼层
梁*** 发表于 2025-4-1 16:18
“ADC的供电开关”,做ADC转换一定要先打开ADC电源并延时至少1ms才启动ADC转换。
不打开ADC电源就启动ADC ...

确实看以前程序确实都没注意到这一点。也许满足这个条件后能解决问题吧,等恢复后试试。
--------------------------------
但手册样例,也没这样等1ms啊

点评

等1ms是为了等待模拟电路正常后,第一个采样值就是正常的。 如果不等待,开启ADC电源后马上启动ADC,也不会有问题,只是这次的ADC读数不准确,因为模拟电路未稳定,但是不会出现你说的中断多少的问题。  详情 回复 发表于 2025-4-1 18:59
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2025-4-1 18:59:02 | 显示全部楼层
ma*** 发表于 2025-4-1 17:07
确实看以前程序确实都没注意到这一点。也许满足这个条件后能解决问题吧,等恢复后试试。
---------------- ...

等1ms是为了等待模拟电路正常后,第一个采样值就是正常的。
如果不等待,开启ADC电源后马上启动ADC,也不会有问题,
只是这次的ADC读数不准确,因为模拟电路未稳定,
但是不会出现你说的中断多少的问题。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 03:28 , Processed in 0.118591 second(s), 77 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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