关于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 。因此电压检测功能就无法实现了。
本人刚入此道,学识有限,请高手们指点一二,导致这种情况出现的原因为何?怎样解决?多谢多谢!! 我找到原因了,设置语句中的 ADCSRA=0;// 关闭了ADC 数模转换器,无法读取模拟端口数据。
学习再学习! :lol:lol:lol 直接操作寄存器啊,完整的程序分享一下 这是宝贵经验,我不问自盗了。
页:
[1]