用STC32G内置ADC测量5V电压,读数非常离谱 | 已解决通过仿真
问题描述:把P0.6作为ADC输入引脚,测量电源电压并用数码管显示出来。已把Vref连接至VCC,现用P0.6测量VCC,竟然得到测量值为6000+。原本以为会在4000+,已经纠缠很久了 ....
MCU:STC32G12K128-BETA
用的板子是在电商上买的核心板,长这样:
开发环境:Win10 + KeilC251
测试代码:
$INCLUDE (STC32G.INC)
$INCLUDE (TM1637.INC)
$INCLUDE (DELAY.INC)
;20240214: enable WDT
; eval average ADC
ADCADDTIMES EQU 8D
; define BIT segment
; define BYTE segment
DSEG AT 30H
复制出来的代码全部左对齐了,tab键没用,每行都是手动对齐的,各位担待下 :-(
看不懂,你讲啥,瞄了眼你的描述,你方向都搞错了,
应该利用 ADC15测量内部的固定信号源1.19V,
反推MCU-VCC
ADC0 ~ ADC15
ADC15 没引出来,在内部固定接到内部的固定信号源 1.19V
注意一下adc数据的对齐方式和拼接顺序,接到vcc如果中间没什么东西的话应该是固定4095(12位adc最大值)。
有可能是选择了左对齐,最右边空出来了四个0。或者是数据高位和低位拼接错了 STC32的12位ADC结果范围是0~4095,绝不会是6000+ 神农鼎 发表于 2024-2-14 22:20
看不懂,你讲啥,瞄了眼你的描述,你方向都搞错了,
应该利用 ADC15测量内部的固定信号源1.19V,
反推MCU-V ...
不好意思,没描述清楚
原意是这样:
把Vref连接到VCC,也就是手册中描述的一般精度ADC参考线路图
现,用其中一个ADC通道,测量VCC,得到的ADC_RES* 256+ ADC_RESL,超出了预期值 王昱顺 发表于 2024-2-14 23:10
注意一下adc数据的对齐方式和拼接顺序,接到vcc如果中间没什么东西的话应该是固定4095(12位adc最大值)。
...
感谢评论 {:4_189:}{:4_172:}{:4_180:}
确定使用右对齐(把RESFMT置位了);
我是这样计算ADC结果:
ADC_RES * 256 + ADC_RESL
code:
ADCISR:
ANL ADC_CONTR, #NOT 20H
MOV WR16, ADC_RES
; shift left 8 bits
MOV WR18, #0100H
; product saved in WR16, WR18
MUL WR16, WR18
;ANL WR18, #0F00H
ADD WR18, ADC_RESL
ADD WR20, WR18
RETI
BeHappy 发表于 2024-2-15 00:37
感谢评论
确定使用右对齐(把RESFMT置位了);
虽然计算公式正确,但是不排除中间变量类型不同导致的奇怪问题
建议还是使用左移指令对高四位进行移动,然后使用按位与进行拼接
这里可以单独调出高位和低位查看原始数据是否正确 BeHappy 发表于 2024-2-15 00:37
感谢评论
确定使用右对齐(把RESFMT置位了);
建议直接打印ADC_RES和ADC_RESL,首先看看ADC的结果对不对。
32位了,还用汇编,真是{:5_332:}
页:
[1]
2