找回密码
 立即注册
查看: 625|回复: 14

用STC32G内置ADC测量5V电压,读数非常离谱 | 已解决通过仿真

[复制链接]
  • TA的每日心情
    郁闷
    2024-3-30 16:06
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    7

    主题

    17

    回帖

    215

    积分

    中级会员

    积分
    215
    发表于 2024-2-14 21:06:10 | 显示全部楼层 |阅读模式
    问题描述:

    把P0.6作为ADC输入引脚,测量电源电压并用数码管显示出来。已把Vref连接至VCC,现用P0.6测量VCC,竟然得到测量值为6000+。原本以为会在4000+,已经纠缠很久了 ....

    MCU:STC32G12K128-BETA
    用的板子是在电商上买的核心板,长这样:



    开发环境:Win10 + Keil  C251
    测试代码:
    1. $INCLUDE (STC32G.INC)
    2. $INCLUDE (TM1637.INC)
    3. $INCLUDE (DELAY.INC)
    4. ;20240214: enable WDT
    5. ; eval average ADC
    6. ADCADDTIMES                EQU                8D
    7. ; define BIT segment
    8.         
    9. ; define BYTE segment
    10. DSEG        AT                30H
    复制代码

    复制出来的代码全部左对齐了,tab键没用,每行都是手动对齐的,各位担待下 :-(

    用的开发板

    用的开发板
    知道你很急,但是你先别急
    你随时可以走,但是现在不能走
    回复 送花

    使用道具 举报

    该用户从未签到

    552

    主题

    9535

    回帖

    1万

    积分

    管理员

    积分
    14114
    发表于 2024-2-14 22:20:23 | 显示全部楼层
    看不懂,你讲啥,瞄了眼你的描述,你方向都搞错了,
    应该利用 ADC15测量内部的固定信号源1.19V,
    反推MCU-VCC

    截图202402142221089375.jpg

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    552

    主题

    9535

    回帖

    1万

    积分

    管理员

    积分
    14114
    发表于 2024-2-14 22:23:17 | 显示全部楼层
    ADC0 ~ ADC15
    ADC15 没引出来在内部固定接到内部的固定信号源 1.19V

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

    使用道具 举报

    该用户从未签到

    552

    主题

    9535

    回帖

    1万

    积分

    管理员

    积分
    14114
    发表于 2024-2-14 22:24:50 | 显示全部楼层
    截图202402142224478258.jpg
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 19:05
  • 签到天数: 123 天

    [LV.7]常住居民III

    33

    主题

    397

    回帖

    2048

    积分

    荣誉版主

    积分
    2048
    发表于 2024-2-14 23:10:53 | 显示全部楼层
    注意一下adc数据的对齐方式和拼接顺序,接到vcc如果中间没什么东西的话应该是固定4095(12位adc最大值)。
    有可能是选择了左对齐,最右边空出来了四个0。或者是数据高位和低位拼接错了
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    前天 10:54
  • 签到天数: 163 天

    [LV.7]常住居民III

    9

    主题

    310

    回帖

    3785

    积分

    荣誉版主

    积分
    3785
    发表于 2024-2-14 23:12:12 | 显示全部楼层
    STC32的12位ADC结果范围是0~4095,绝不会是6000+
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    郁闷
    2024-3-30 16:06
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    7

    主题

    17

    回帖

    215

    积分

    中级会员

    积分
    215
     楼主| 发表于 2024-2-15 00:29:14 | 显示全部楼层
    神农鼎 发表于 2024-2-14 22:20
    看不懂,你讲啥,瞄了眼你的描述,你方向都搞错了,
    应该利用 ADC15测量内部的固定信号源1.19V,
    反推MCU-V ...

    不好意思,没描述清楚

    原意是这样:
    把Vref连接到VCC,也就是手册中描述的一般精度ADC参考线路图
    现,用其中一个ADC通道,测量VCC,得到的ADC_RES  * 256+ ADC_RESL,超出了预期值
    知道你很急,但是你先别急
    你随时可以走,但是现在不能走
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    郁闷
    2024-3-30 16:06
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    7

    主题

    17

    回帖

    215

    积分

    中级会员

    积分
    215
     楼主| 发表于 2024-2-15 00:37:55 | 显示全部楼层
    王昱顺 发表于 2024-2-14 23:10
    注意一下adc数据的对齐方式和拼接顺序,接到vcc如果中间没什么东西的话应该是固定4095(12位adc最大值)。
    ...

    感谢评论

    确定使用右对齐(把RESFMT置位了);
    我是这样计算ADC结果:
    ADC_RES * 256 + ADC_RESL
    code:
    1. ADCISR:         
    2.     ANL                ADC_CONTR, #NOT 20H
    3.     MOV                WR16, ADC_RES
    4.     ; shift left 8 bits
    5.     MOV                WR18, #0100H
    6.     ; product saved in WR16, WR18
    7.     MUL                WR16, WR18
    8.     ;ANL                WR18, #0F00H
    9.     ADD                WR18, ADC_RESL
    10.     ADD                WR20, WR18
    11.         RETI
    复制代码


    点评

    虽然计算公式正确,但是不排除中间变量类型不同导致的奇怪问题 建议还是使用左移指令对高四位进行移动,然后使用按位与进行拼接 这里可以单独调出高位和低位查看原始数据是否正确  详情 回复 发表于 2024-2-15 01:05
    知道你很急,但是你先别急
    你随时可以走,但是现在不能走
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 19:05
  • 签到天数: 123 天

    [LV.7]常住居民III

    33

    主题

    397

    回帖

    2048

    积分

    荣誉版主

    积分
    2048
    发表于 2024-2-15 01:05:49 | 显示全部楼层
    BeHappy 发表于 2024-2-15 00:37
    感谢评论

    确定使用右对齐(把RESFMT置位了);

    虽然计算公式正确,但是不排除中间变量类型不同导致的奇怪问题
    建议还是使用左移指令对高四位进行移动,然后使用按位与进行拼接
    这里可以单独调出高位和低位查看原始数据是否正确
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    1 小时前
  • 签到天数: 112 天

    [LV.6]常住居民II

    10

    主题

    583

    回帖

    934

    积分

    高级会员

    积分
    934
    发表于 2024-2-15 08:42:02 | 显示全部楼层
    BeHappy 发表于 2024-2-15 00:37
    感谢评论

    确定使用右对齐(把RESFMT置位了);

    建议直接打印ADC_RES和ADC_RESL,首先看看ADC的结果对不对。
    32位了,还用汇编,真是
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-20 09:39 , Processed in 0.090378 second(s), 72 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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