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

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

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:173
  • 最近打卡:2025-05-02 14:16:32

44

主题

124

回帖

1441

积分

金牌会员

积分
1441
发表于 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键没用,每行都是手动对齐的,各位担待下 :-(

用的开发板

用的开发板
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

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

截图202402142221089375.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

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

截图202402142222147227.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:459
  • 最近打卡:2025-05-02 21:17:31
已绑定手机
已实名认证

110

主题

2223

回帖

5464

积分

版主

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:328
  • 最近打卡:2025-03-09 19:40:01

9

主题

328

回帖

4501

积分

荣誉版主

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

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:173
  • 最近打卡:2025-05-02 14:16:32

44

主题

124

回帖

1441

积分

金牌会员

积分
1441
发表于 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,超出了预期值
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:173
  • 最近打卡:2025-05-02 14:16:32

44

主题

124

回帖

1441

积分

金牌会员

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:459
  • 最近打卡:2025-05-02 21:17:31
已绑定手机
已实名认证

110

主题

2223

回帖

5464

积分

版主

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

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:453
  • 最近打卡:2025-05-02 08:15:40
已绑定手机

13

主题

1257

回帖

2975

积分

金牌会员

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

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

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 22:11 , Processed in 0.340844 second(s), 110 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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