极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13349|回复: 4

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

[复制链接]
发表于 2017-12-8 09:53:24 | 显示全部楼层 |阅读模式
诸位高手:
       近日遇到新问题,我再论坛中看到关于系统通过休眠节电的文章  “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 。因此电压检测功能就无法实现了。
      本人刚入此道,学识有限,请高手们指点一二,导致这种情况出现的原因为何?怎样解决?多谢多谢!!
回复

使用道具 举报

 楼主| 发表于 2017-12-8 16:46:42 | 显示全部楼层
我找到原因了,设置语句中的   ADCSRA=0;//    关闭了ADC 数模转换器,无法读取模拟端口数据。
学习再学习!
回复 支持 反对

使用道具 举报

发表于 2017-12-10 14:59:05 | 显示全部楼层
直接操作寄存器啊,完整的程序分享一下
回复 支持 反对

使用道具 举报

发表于 2018-4-24 11:01:51 | 显示全部楼层
这是宝贵经验,我不问自盗了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 09:10 , Processed in 0.056120 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表