Arduino_Vcc icon indicating copy to clipboard operation
Arduino_Vcc copied to clipboard

Read Vcc pulls 200uA with LowPower sleep

Open skjolddesign opened this issue 5 years ago • 3 comments

Your example VccSleep.ino, makes arduino pull 200 micro Amps in LowPower. Commenting out Vcc.h code, gives correct LowPower of 4.5 micro Amps. Tested on Pro mini 8Mhz. It's not only your Vcc code that does this, but all readVcc code I found online does this. I would be glad to see any solution to this.

4.5uA code:

#include <Vcc.h>
#include <LowPower.h>

const float VccMin        = 2.0*0.6;  // Minimum expected Vcc level, in Volts. Example for 2xAA Alkaline.
const float VccMax        = 2.0*1.5;  // Maximum expected Vcc level, in Volts. Example for 2xAA Alkaline.
const float VccCorrection = 1.0/1.0;  // Measured Vcc by multimeter divided by reported Vcc

Vcc vcc(VccCorrection);

void setup()
{
  Serial.begin(9600);
}

void loop()
{  
//  float v = vcc.Read_Volts();
//  Serial.print("VCC = ");
//  Serial.print(v);
//  Serial.println(" Volts");
//
//  float p = vcc.Read_Perc(VccMin, VccMax);
//  Serial.print("VCC = ");
//  Serial.print(p);
//  Serial.println(" %");
//
//  delay(200); //delay to allow serial to fully print before sleep

  LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
}

skjolddesign avatar Feb 15 '20 15:02 skjolddesign

I managed to fix the issue adding ADMUX = _BV(REFS1) new readVcc code:

long readVccFixedLowPower() {
  long result;
  // Read 1.1V reference against AVcc
  ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  delay(1); // Wait for Vref to settle
  ADCSRA |= _BV(ADSC); // Convert
  while (bit_is_set(ADCSRA,ADSC));
  result = ADCL;
  result |= ADCH<<8;
  result = ( 1023L * 1100L) / result; // Back-calculate AVcc in mV. 1100 is volt on vRef.
  //to fix lowpower drain, ADMUX is changed again.
  ADMUX = _BV(REFS1); //fixes readVcc current drain in lowPower
  Serial.print("Vcc = " );
  Serial.println(result); 
  return result;
}

skjolddesign avatar Feb 16 '20 09:02 skjolddesign

Can you prepare a PR?

Yveaux avatar Feb 16 '20 12:02 Yveaux

Can you prepare a PR?

See #8 :)

danielrheinbay avatar Jun 02 '20 21:06 danielrheinbay