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

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

[复制链接]
  • TA的每日心情
    开心
    昨天 07:51
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    20

    主题

    104

    回帖

    248

    积分

    中级会员

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

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



    无标题.png
    回复 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9567

    回帖

    1万

    积分

    管理员

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

    截图202311061322422440.jpg

    截图202311061323052893.jpg


    截图202311061323356820.jpg

    截图202311061324011370.jpg


    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-5-5 08:35
  • 签到天数: 143 天

    [LV.7]常住居民III

    29

    主题

    558

    回帖

    2144

    积分

    荣誉版主

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

    有的芯片没有那么多通道

    截图202311061325251806.jpg
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 07:51
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    20

    主题

    104

    回帖

    248

    积分

    中级会员

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

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


    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 07:51
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    20

    主题

    104

    回帖

    248

    积分

    中级会员

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

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

    使用道具 举报

    该用户从未签到

    551

    主题

    9567

    回帖

    1万

    积分

    管理员

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

    使用道具 举报

    该用户从未签到

    46

    主题

    3058

    回帖

    6895

    积分

    超级版主

    积分
    6895
    发表于 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
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 07:51
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    20

    主题

    104

    回帖

    248

    积分

    中级会员

    积分
    248
     楼主| 发表于 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了。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9567

    回帖

    1万

    积分

    管理员

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

    使用道具 举报

  • TA的每日心情
    开心
    昨天 07:51
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    20

    主题

    104

    回帖

    248

    积分

    中级会员

    积分
    248
     楼主| 发表于 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, 2024-5-22 01:55 , Processed in 0.070244 second(s), 68 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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