巡航66 发表于 2017-12-8 09:53:24

关于ARDUINO电源电压检测的困惑

诸位高手:
       近日遇到新问题,我再论坛中看到关于系统通过休眠节电的文章“2月2号-外置采集温度_让arduino用2颗5号电池运行1年以上” ,并将其中提到的程序引用到我的程序中,测试正常运行。由于采用电池供电,为了检测电源电压、即时提供低电压报警,又从论坛中学习到了一个方法,引入了以下这段程序:
long readVcc()
{
long result;
// Read 1.1V reference against AVcc
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
delay(2); // Wait for Vref to settle
ADCSRA |= _BV(ADSC); // Convert
while (bit_is_set(ADCSRA,ADSC));
result = ADCL;
result |= ADCH<<8;
result = 1125300L / result; // Back-calculate AVcc in mV
return result;
}
这段小程序单独运行很正常,加入到其他程序中也可以。返回值正常,接入5V电源时,返回值为5228,用返回值与设定值(3700)作比较判断,用可调电源做测试,运行正常,低电压报警功能能够实现。我将这段小程序加入到了 “2月2号-外置采集温度_让arduino用2颗5号电池运行1年以上” 文章中提到的休眠程序中,希望每次程序唤醒时首先检测电源电压,可是发现电压返回值总是-1 。因此电压检测功能就无法实现了。
      本人刚入此道,学识有限,请高手们指点一二,导致这种情况出现的原因为何?怎样解决?多谢多谢!!

巡航66 发表于 2017-12-8 16:46:42

我找到原因了,设置语句中的   ADCSRA=0;//    关闭了ADC 数模转换器,无法读取模拟端口数据。
学习再学习!

Leo121 发表于 2017-12-8 18:06:01

:lol:lol:lol

suoma 发表于 2017-12-10 14:59:05

直接操作寄存器啊,完整的程序分享一下

最帅的老饼 发表于 2018-4-24 11:01:51

这是宝贵经验,我不问自盗了。
页: [1]
查看完整版本: 关于ARDUINO电源电压检测的困惑