Last year I bought an Arduino Pro Mini clone, 3.3V 8MHz, and removed the voltage regulator and power LED resistor. In PWR_DOWN sleep mode it draws less than 1uA, which is what I need for battery power, and that's what the datasheet suggests it should be.
Last week I received two new Minis from a different source, and performed the same modifications to them. But both of them draw 150uA in sleep when powered at 3.3V, or 330uA at 5V. So far as I can tell, everything is the same between old and new. That includes the boards, the modifications, the test sketch, the bootloaders, and the fuse settings. So it's hard to see what could cause this difference unless the MCUs are different in some way.
The new ones have these markings:
Atmel
MEGA328P
U-TW
35473D
1947X5N
and
1936S2P
The old one is:
Atmel
MEGA328P
U-KR
35473D
1829R5G
Notice that the 330uA current at 5V is greater than you would expect if the problem is some kind of resistive leak. And since there's almost nothing left on the Mini board but the processor, it seems that almost has to be the cause of the problem. But I've looked through the datasheet, and don't see any version information that would account for this. In case it matters, the new ones both had daubs of white paint covering the markings. I don't know if that means anything.
If anyone has an idea about what's going on here, I'd like to hear it. Or even an idea about how to find out where the problem lies. I want to be able to use Pro Minis in direct battery powered situations where the processor sleeps a lot. But it needs to sleep at 1uA, not 150. So I need to find a resolution to this.
Here's my test sketch. Thanks very much for any help.
#include <avr/sleep.h> #include <avr/wdt.h> int i; void setup(){ for (i = 0; i < 20; i++) { // all pins to one rail or the other pinMode(i,OUTPUT); digitalWrite(i,LOW); } ADCSRA = 0; // disable ADC for power saving wdt_disable(); // disable WDT for power saving set_sleep_mode (SLEEP_MODE_PWR_DOWN); // Deep sleep sleep_enable(); sleep_bod_disable(); // disable brownout detector during sleep sleep_cpu(); // now go to sleep } void loop(){ }