Hello,
I am working on a project using the Pro Mini 3.3V 8MHz variant with the ATmega328P chip. This is a work related project so I can’t discuss many details of the end goal, but I’ve gotten permission from our team to post here for help.
We have a requirement of at least a year’s worth of battery life, and because of the form factor we are restricted in what we can use. We haven’t settled on a battery yet but our ideal sleep current is <10uA, and preferably closer to 1uA, as per the datasheet of the ATmega328P. We’ve already seen multiple posts and tutorials about how to get the power lower, including:
http://hackaday.com/2012/08/18/making-t … ong-sleep/
https://www.sparkfun.com/tutorials/309
Our project was sleeping at ~450uA running the full version of the code (which mostly sleeps, wakes ups on a button press, gets some readings from an ADC, then times-out and sleeps again). I then removed the voltage regulator, power and status LEDs from the Pro Mini, and that managed to get it down to ~115uA. To double check that it wasn’t our other PCB or the code, I took a brand new Pro Mini out of the ESD packaging, removed the two LEDs, disconnected the voltage regulator, and programmed to go to sleep after a 5 second delay (I don’t care about wake-up at this point/I’ll “wake up” with the reset button if I need to). Here’s the code:
#include <avr/power.h>
#include <avr/sleep.h>
void setup()
{
}
void loop()
{
delay(5000);
sleep_enable();
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
power_adc_disable();
power_spi_disable();
power_usart0_disable();
power_timer0_disable();
power_timer1_disable();
power_timer2_disable();
sleep_cpu();
}
This is still only sleeping at ~115uA off our 3.6V supply(full battery), or ~100uA if I lower it to 3.3V exactly. I then tried the fuses trick to try and disable BOD that was in the second link above, and it STILL didn’t make a difference. Everywhere I look, people are talking about disabling BOD as that uses 15-20uA, but that still doesn’t explain the other 80uA we are reading on our Fluke DMMs. What are we missing here?! If someone could either explain verbosely what they did or what we are doing wrong, or link us to some better tutorials, I’d greatly appreciate it.