找回密码
 立即注册
查看: 2216|回复: 16

今天 关于ADC,遇到一个奇怪的问题【已解决】

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:411
  • 最近打卡:2025-07-01 07:43:33

37

主题

199

回帖

1181

积分

金牌会员

积分
1181
发表于 2023-11-6 11:28:26 | 显示全部楼层 |阅读模式
本帖最后由 32位8051-STCAI 于 2023-11-9 15:07 编辑

这个程序是别人以前写的,用ADC来区分1.54V以上和1.48V一下的直流电压信号,精度要求不高,只用了ADC结果寄存器的高八位。我现在做维护,做些修修改改的工作,在STC8H3K32S2上跑,程序如下:



无标题.png
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:115
  • 最近打卡:2025-07-02 07:44:10

741

主题

1万

回帖

1万

积分

管理员

积分
17324
发表于 2023-11-6 13:24:36 | 显示全部楼层
先单独用 STC 的测试程序测试,按如下线路图测试

截图202311061322422440.jpg

截图202311061323052893.jpg


截图202311061323356820.jpg

截图202311061324011370.jpg


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:217
  • 最近打卡:2024-11-15 09:12:27

29

主题

722

回帖

2800

积分

荣誉版主

积分
2800
发表于 2023-11-6 13:25:43 | 显示全部楼层

有的芯片没有那么多通道

截图202311061325251806.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:411
  • 最近打卡:2025-07-01 07:43:33

37

主题

199

回帖

1181

积分

金牌会员

积分
1181
发表于 2023-11-6 14:59:10 | 显示全部楼层
本帖最后由 newlined 于 2023-11-6 15:00 编辑
gentl*** 发表于 2023-11-6 13:25
有的芯片没有那么多通道

谢谢您的回复,在8H1K24上跑时,AD口已经改为P0.0,相应的语句已经改为
MOV                ADC_CONTR,#11001000B                        ;打开P0.0口A/D
这个程序识别1.54V没有问题,不知道为什么不能识别1.48V,我以为多半是我的程序有问题,
但我不知道为什么在8H3K32S2上跑正常,一个子程序,我复制过来的,只是AD口的地址改了下。


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:411
  • 最近打卡:2025-07-01 07:43:33

37

主题

199

回帖

1181

积分

金牌会员

积分
1181
发表于 2023-11-6 15:00:56 | 显示全部楼层
神*** 发表于 2023-11-6 13:24
先单独用 STC 的测试程序测试,按如下线路图测试

谢谢您的回复,我仔细看下。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:115
  • 最近打卡:2025-07-02 07:44:10

741

主题

1万

回帖

1万

积分

管理员

积分
17324
发表于 2023-11-6 15:14:00 | 显示全部楼层
你要贴出你的原理图,大家才好帮你分析到位
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:110
  • 最近打卡:2025-07-02 15:29:52

75

主题

6174

回帖

1万

积分

超级版主

积分
12998
发表于 2023-11-6 17:22:07 | 显示全部楼层
楼主程序判断2个点ADC值相差3,并且没有任何滤波措施,所以一点干扰或误差,就会导致错误。
并且ADC转换也不规范,应参考官方例程修改。
楼主应该使用10位或12位ADC,这样两个判断点的ADC能拉开比较大的距离,适当使用合理的数字滤波,避免干扰导致误判。
楼主可以下载官方例子测试,串口直接观察ADC值。

点评

应该使用10位或12位ADC,这样两个判断点的ADC能拉开比较大的距离。 使用适当、合理的数字滤波,是指软件滤波,比如平均值、一阶低通滤波等等。 楼主可以下载官方例子测试,串口直接观察ADC值。 也可以采样几百值,用  详情 回复 发表于 2023-11-7 16:27
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:411
  • 最近打卡:2025-07-01 07:43:33

37

主题

199

回帖

1181

积分

金牌会员

积分
1181
发表于 2023-11-7 14:43:53 | 显示全部楼层
梁*** 发表于 2023-11-6 17:22
楼主程序判断2个点ADC值相差3,并且没有任何滤波措施,所以一点干扰或误差,就会导致错误。
并且ADC转换也 ...

谢谢梁工的回复,您说的“适当使用合理的数字滤波,避免干扰导致误判”提醒了我,我看STC8H的手册,在STC8H8K64U 系列 B/C/D等 版本中,有一个ADCEXCFG寄存器,可以设定多次转换功能,然后取平均值,但我看STC8H1K24,好像没有这个功能?我不知道您说的是不是这个功能?如果不是请具体说下,我再尝试。原来的硬件和软件已经用了10多年了,我也不好过多修改,尤其是您说的AD转换,我现在用了多次AD取值的办法,可以区分出1.54V和1.48V了。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:115
  • 最近打卡:2025-07-02 07:44:10

741

主题

1万

回帖

1万

积分

管理员

积分
17324
发表于 2023-11-7 14:51:08 | 显示全部楼层
讨论ADC, 你应该贴出你的 原理图的 PDF, 或者清晰的原理图图片,如我发的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:411
  • 最近打卡:2025-07-01 07:43:33

37

主题

199

回帖

1181

积分

金牌会员

积分
1181
发表于 2023-11-7 14:55:30 | 显示全部楼层
神*** 发表于 2023-11-6 15:14
你要贴出你的原理图,大家才好帮你分析到位

原理图很简单,功能是检测充电电池的电压,充电时高于8V(经电阻分压变为1.54V)则停止充电,低于7.6V(经电阻分压变为1.48V)则停止充电。P0.0接电池的正极,AD的参考电压是跟VCC接一起,是5V,对时间要求不高,检测到高于8V,几秒,几分钟后再动作都可以。经过梁工的提示,我修改了程序,暂时可以了,我正在测试,如果能通过,就好了,如果不行,在上原理图,请您和大家帮忙,非常感谢。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-7-2 21:25 , Processed in 0.140637 second(s), 102 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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