Low power project and batteries

So I have a project that is attempting to make good use of the 328p's low power modes. I have it sleep most of the time and it wakes on an external interrupt from a sensor. I have the fuses burnt to use external crystal(4mhz) which should allow the whole thing to run as low as 1.8V, BOD is off.

I am hooking up a CR2032 coin cell to the controller directly. Decently low power @ 53uA.

My question is, according to the battery datasheet it is rated around 225mAh, but is that a representation of how long it can maintain 3V @ 225mAh. Or is it like a gas tank that just runs dry after 225mA is consumed. In other words if my device can run as low as 1.8V will this battery effectively last longer.

@53uA I calculate something like 166 days of sleeptime. I was hoping to get something to the tune of 1000 days. I suppose I could try to go down to 1mHz and see if that helps, but I am curious as to whether my battery will quit on me or not.

clock speed isnt very relevant. Current will of course depend on clock speed (nearly proportional), but so is execution time of the work you want done. (1 mA for 1 sec takes same amount of energy as 0.1mA for 10 secs.)

53uA is high for sleep mode - are you not fully sleeping the thing?

Right on. I am definitely working on execution. I looked into a few things like making sure all the pins don’t float, which I am presuming you do by setting them to INPUT and then writing them low. My main question was about the battery longevity.

If the device will run @ 1.8V will the battery perform past the rated 225mAh since my assumption is that the battery is rated to deliver 3V @ 225mAh if I only need 1.8V will it continue to function until the voltage drop takes it below say 2.7?

@MarkT well the sensor itself I believe consumes 23uA so that is likely part of it. but whatever I can do to get it lower I am willing to try. The device itself will be fully encapsulated so you can’t ever change the battery which is why I need it so low.

Further tests show that if you disable the brown-out detection (by changing a fuse byte) you can greatly save power, especially in sleep mode. With brown-out detection disabled power consumption goes down to around 6 uA. This is because the brown-out detection needs an internal voltage reference to be running.

http://www.gammon.com.au/forum/?id=11149 http://gammon.com.au/forum/?id=11497

@billho right, but seriously guys is my battery question so incredibly stupid that no one will answer it :P

Hi Timmy,

no your question is not dumb but also not so difficult to work out, of course theory and practice does not always meet in the middle. have a look at these websites they might help you with your project , I have been trying to do something similar but no one really seems interested. http://heliosoph.mit-links.info/arduino-powered-by-capacitor-first-tests/ is a guy that has done alot of testing on this , and my site http://powerduino.blogspot.com/

hope you come right.

U can surely save energy if u can build/buy a 3V->1.8V converter. That would be the optimal, lossless, step-down converter. ..They exist already.. They claim less than 10% loss. Trouble is : At theese very low currents, they will not give the savings you are hoping for. http://www.ebay.com/itm/Mini-3A-DC-DC-Adjustable-Step-down-Converter-Standard-Power-Supply-Module-LM2596-/171381727503?pt=LH_DefaultDomain_0&hash=item27e725a10f

I looked into a few things like making sure all the pins don't float, which I am presuming you do by setting them to INPUT and then writing them low

No, write them high to enable internal pullups so they cannot float and/or oscillate. Does your sensor need to be on all the time? Add a high side switch to power it down, take the control signals to it low first so it isn't powered thru control line leakage.

Does your sensor need to be on all the time?

Its an ADXL345 that I am using. I am using it for the tap detection on INT1

http://www.analog.com/static/imported-files/data_sheets/ADXL345.pdf

I was reading the data sheet and it is capable of deep sleep @0.1uA but it says measurement is turned off at that point so I was thinking the interrupts would not function. But sometimes these datasheets are a bit thick for me.

Your battery datasheet should have a graph of voltage relative to capacity at various discharge levels. At least, the good ones do. Take a look at the continuous discharge characteristics graph from this Energizer datasheet: http://data.energizer.com/PDFs/cr2032.pdf

I suppose I could try to go down to 1mHz and see if that helps, but I am curious as to whether my battery will quit on me or not.

If you're sleeping a lot, changing the clock to 1MHz won't change anything. You'll have 4x less power consumption while running, but things will take 4x longer, so it all balances out in the end.

Furthermore, you don't need a 4 MHz oscillator to run at 4 MHz. If you don't need accurate Serial communication, you can run off the internal 8 MHz oscillator, burn the DIV8 fuse, and use the first line of your program to set the clock prescaler to x2. (http://www.nongnu.org/avr-libc/user-manual/group__avr__power.html, towards the bottom)

I was reading the data sheet and it is capable of deep sleep @0.1uA but it says measurement is turned off at that point so I was thinking the interrupts would not function. But sometimes these datasheets are a bit thick for me.

Indeed, they can be dense, but it looks like you're interpreting it correctly. No measurements means nothing for the interrupts to trigger off of.

regarding the 3V battery: Capacties are very often for voltage drop to 2V.
Best solution is most probably to add another cell.

So after so research and testing I found some odd stuffs.

For what ever reason the break out board for my ADXL345 seems to be pulling 50uA just because. When I set this bad boy into what it refers to as sleep mode(with no measurement) it is supposed to be pulling 0.1uA, but it pulls 52uA. When I have it in low power mode and bandwidth is set at 25Hz it is supposed to pull 34uA it pulls between 90 and 85uA. and when i give it all the cowbell it is supposed to pull 90uA it pulls 136-142uA. Now mind you this is @ 3.15V and the datasheet says typical voltage 2.5(not positive that matters but I wanted to give as much info as possible).

This seems to be outside the advertised ranges by 50ish uA every setting. When I pull the break out board off, my programs sleep modes are @5uA which I am more than happy with. It appears I can trigger the tap interrupt with a bandwidth as low as 3Hz, which I find impressive! if it were in advertised ranges that would put me @29ish uA which is enough to meet my requirement of below 50uA.

Any ideas why this would be off by that amount. Anyone know of a lower powered sensor that can easily do tap detection? This is the part I am using https://www.sparkfun.com/products/9836

Also it appears that if the device sits for a while the readings go down by about 10uA? so right now it is drawing 74.7uA but earlier it was drawing 83.2uA? There is so much about electricity I don't understand :-S

Could it be the support circuitry on the breakout board?

Those are power supply “decoupling caps”. They won’t be dissipating current; once charged up, they look like open circuits to current flow.

Are you setting the registers per the data sheet for the various power savings modes (page 14)?

POWER SAVINGS Power Modes The ADXL345 automatically modulates its power consumption in proportion to its output data rate, as outlined in Table 7. If additional power savings is desired, a lower power mode is available. In this mode, the internal sampling rate is reduced, allowing for power savings in the 12.5 Hz to 400 Hz data rate range at the expense of slightly greater noise. To enter low power mode, set the LOW_POWER bit (Bit 4) in the BW_RATE register (Address 0x2C). The current consumption in low power mode is shown in Table 8 for cases where there is an advantage to using low power mode. Use of low power mode for a data rate not shown in Table 8 does not provide any advantage over the same data rate in normal power mode. Therefore, it is recommended that only data rates shown in Table 8 are used in low power mode. The current consumption values shown in Table 7 and Table 8 are for a VS of 2.5 V.

Auto Sleep Mode Additional power can be saved if the ADXL345 automatically switches to sleep mode during periods of inactivity. To enable this feature, set the THRESH_INACT register (Address 0x25) and the TIME_INACT register (Address 0x26) each to a value that signifies inactivity (the appropriate value depends on the application), and then set the AUTO_SLEEP bit (Bit D4) and the link bit (Bit D5) in the POWER_CTL register (Address 0x2D). Current consumption at the sub-12.5 Hz data rates that are used in this mode is typically 23 ?A for a VS of 2.5 V.

Standby Mode For even lower power operation, standby mode can be used. In standby mode, current consumption is reduced to 0.1 ?A (typical). In this mode, no measurements are made. Standby mode is entered by clearing the measure bit (Bit D3) in the POWER_CTL register (Address 0x2D). Placing the device into standby mode preserves the contents of FIFO.

CrossRoads: Those are power supply "decoupling caps". They won't be dissipating current; once charged up, they look like open circuits to current flow.

One of those is a polarized capacitor, probably a tantalum or electrolytic (can someone else help identify the type of that cap?). Those can have very high leakage currents, according to this electronics tutorials page (emphasis mine): http://www.electronics-tutorials.ws/capacitor/cap_3.html

Electrolytic-type capacitors (tantalum and aluminum) on the other hand may have very high capacitances, but they also have very high leakage currents (typically of the order of about 5-20 ?A per µF) due to their poor isolation resistance, and are therefore not suited for storage or coupling applications.

A 10 uF cap with 50 uA leakage fits right in the middle of their range.

If you can, I'd try removing that big cap and see if the current consumption goes down.