关于ADC反推工作电压的事宜 | 已解决
我目前使用的是STC32g的实验箱9.6,我在使用ADC测量内部基准电源,然后调取CHIPID7和CHIPID8的值,最后在中断里运算以下是我的函数
void ADC_Routine(void) interrupt 5
{
ADC_FLAG = 0;
adc_1s = 0;
adc_r = (ADC_RES * 256) + ADC_RESL;
vcc = (int)(4096 * VREFH / adc_r);
}在这,没法正确读出数据,当我把vcc = (int)(4096 * VREFH / adc_r);改成vcc = (int)(41 * VREFH / adc_r);之后,就能正确读出数据,不过就是相当于要读出的是2526的,经过这样后,只能读出25.26,int后变成25,虽然不影响使用,但还是有点遗憾
我的判断是,数据溢出了,4096 * VREFH(CHIPID7和CHIPID8的值)的值是1185,4096*1185=4853760,换成二进制就是010010100001000000000000,我估计是到这一步,但我又对程序进行了改动,改成vcc = (int)(4096 * (VREFH / adc_r));,让他先计算VREFH / adc_r这个,这个的结果是0.616866。。。,然后再进行乘4096,依旧是没法正确读出数据
希望来个大神指导指导,还是说,这个得用查询法
对了,加.\STC32_MDU32_V1.1.LIB模块,和不加.\STC32_MDU32_V1.1.LIB的情况我都试过,还是一样
运算的时候要注意数据类型 简单粗暴一点就是 (int)4096L*VREFH /adc_r;应该能得到你想要的结果 我试试 可以参考视频https://www.stcaimcu.com/plugin.php?id=x7ree_v:x7ree_v&code_7ree=1&id_7ree=361 soma 发表于 2024-8-1 21:41
可以参考视频https://www.stcaimcu.com/plugin.php?id=x7ree_v:x7ree_v&code_7ree=1&id_7ree=361
已经解决了,没把4096声明成long型
页:
[1]