BeHappy 发表于 2024-2-14 21:06:10

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

神农鼎 发表于 2024-2-14 22:20:23

看不懂,你讲啥,瞄了眼你的描述,你方向都搞错了,
应该利用 ADC15测量内部的固定信号源1.19V,
反推MCU-VCC



神农鼎 发表于 2024-2-14 22:23:17

ADC0 ~ ADC15
ADC15 没引出来,在内部固定接到内部的固定信号源 1.19V


神农鼎 发表于 2024-2-14 22:24:50


王昱顺 发表于 2024-2-14 23:10:53

注意一下adc数据的对齐方式和拼接顺序,接到vcc如果中间没什么东西的话应该是固定4095(12位adc最大值)。
有可能是选择了左对齐,最右边空出来了四个0。或者是数据高位和低位拼接错了

kksk 发表于 2024-2-14 23:12:12

STC32的12位ADC结果范围是0~4095,绝不会是6000+

BeHappy 发表于 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,超出了预期值

BeHappy 发表于 2024-2-15 00:37:55

王昱顺 发表于 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

王昱顺 发表于 2024-2-15 01:05:49

BeHappy 发表于 2024-2-15 00:37
感谢评论

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


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

21cnsound 发表于 2024-2-15 08:42:02

BeHappy 发表于 2024-2-15 00:37
感谢评论

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


建议直接打印ADC_RES和ADC_RESL,首先看看ADC的结果对不对。
32位了,还用汇编,真是{:5_332:}
页: [1] 2
查看完整版本: 用STC32G内置ADC测量5V电压,读数非常离谱 | 已解决通过仿真