DS3231 uA draw at 89 uA when powered off.

This is a low power experiment. So I am looking for the lowest power I can get. Much of what I have done has come from Nick Gammons work. Since I have functionality I am just looking for lower current draw.

Summary: This experiment has a basic Atmel328 chip in deep sleep with a powered off DS3231 providing an interrupt... all working.

My Arduino is the breadboard Atmel328 chip with xtal, pull up on reset, LED on pin 13, etc. I am running it on a battery at about 3.4 volts. Also, I am using FTDI converter for programming. This all works great.

Case #1 I load my Arduino with with a <lowPower.h> and execute a SLEEP_FOREVER and trigger an interrupt by shorting pin D2 to ground. Works great and the Arduino wakes up and flashes a LED. When powered down it draws less than my microAmp meter can read (<1uA). Great! this makes sense.

Case #2 I connect a DS3231 RTC (Modified with the classic low power mods of: no LED, no on board battery recharge, CR battery replacement and resistor trace cut for SQ wave.) The power for the DS2331 is supplied by a p-channel Mosfet driven from the Arduino. In the void setup() the DS2331 is programmed to interrupt and then the power to the DS3231 is cut. This works great the Arduino wakes up each minute and at 20 seconds and flashes the LED.

So at this point the DS3231 has No power on VCC, and 10K pullups on SDA, SCL and SQwv. And it interrupts the Arduino just fine.

My issue is that that this setup now draws 89uA when asleep. A huge jump from the <1uA for the Arduino by itself.

Things I have tried:

  • removing the VCC lead directly to the DS3231 - no change. So the Mosfet is working okay.
  • pull the DS3231 out of the breadboard - the power drops to <1uA and goes back to 89uA when the DS3231 is reinserted. (system keeps working after the DS3231 is reinserted)
  • Removing the 2 10K pullups from the SDA and SCL - caused the current to go up to 132uA and system to stop working
  • removed the pullup from SQwv - went from 89 to 88 uA
  • increased the 10K pullups to 30K - system stopped working.
  • Tried the power_twi_disable at the end of setup() but this caused the interrupts to stop.

So, while 89uA is not much I would like to get it a lot lower. Any Ideas or suggestions are most welcome.

Maybe the 89uA is average consumption with blinking of LED included?
Do you have pullups to Arduino's Vcc, right?

The current is much, much higher when the LED is blinking. This happens only twice a minute for <1 second. I am interested in the current during the sleep mode.
Yes, the battery (3.4V) is VCC and the pullup resistors connect to that. I have disconnected the pullup resistors with the current increasing. !!

The two thoughts I have are...
Either the WIRE turned on is causing an increase in power consumption. (an oscillator is running somewhere)
or...
The voltage going back through the SDA and SCL are causing a load.
Maybe this is the best that this can get.
But, have you out there that have your Arduino woken up by a DS3231 been able to get down to under 89uA???

Check if all ATMega pins are either Vcc or GND while in sleep (most importantly the one used as wake up and I2C pins).

What is power consumption of the RTC when not connected to anything?

Is it possible there are pull ups on the RTC board causing the current leakage?

Do you need the clock & calender functionality of the RTC, or are you just using it to time the sleep interval? To get really low power, you can use a 32 kHz watch crystal to clock Timer2 in Power Save mode. This has a nominal current consumption of about 1 uA. You can use the Timer2 interrupt to wake up from sleep instead of needing an external chip.