The most important "trick" we can use to avoid wasting energy, is to use an extreme low-current IC that allows for deep sleep modes. In our case, we have used a PIC18LF14K50, which has the XLP (Extreme Low-Power) capabilities from Microchip: we can change dynamically from different sleep modes, going down to theoretically 20nA of typical current consumption. In addition, avoiding the use of LDOs is always a good choice to save even more extra energy: Choosing a microcontroller that could work directly with the 3.3V from the CR2032 without the need of elevating it to 5V is a must to save all the energy from the coin-cell.
When using LEDs (As it is in our case), the switching frequency and duty cycle play a big role. You should have the smaller conducting time possible, However, you should take good care of the flicker effect:
Some NO-GO devices are StandBy diodes or lights: You will see them in all your consumer electronics, but they are not only useless but a waste of energy in battery systems. As you can see in the above schematic, a LED attached to a microcontroller for specific alerts or user alarms is more than necessary.
Finally, it depends on the firmware... some keys are:
- Being slow is good: configure your microcontroller to be as slow as your project permits
- Sleep well: Going to sleep will save you energy
- Use interrupts instead of timer to wake up: You do not need to wake up periodically if you use the correct pins in your HW.
I recently got a Power Profile Kit II, which is a real good tool to measure low currents (Up to 1nA precision!), so let's check after some soldering:
First, the current consumption of the device when it is awake:
10.78mA! Not bad at all when you think I have 4 displays turned ON (At least that is what the human eye thinks ;) )
When you count (up or down), and you have the beep sound ON:
As you can see, the consumption elevates to 16.14mA on average for 60ms (that's the time a beep last). What if we do not have any beeps?
A little bit more than in standby... 11.13mA average for 155.7ms. It depends on how much time you press the button, but you get the idea. Last but not least: the deep sleep mode:
As you can see: 120nA is almost nothing! You should notice that we are using the internal RC oscillator from the PIC as our Clock, so that's why the current is superior to the typical 20nA that microchip claims in their datasheet. Even with that, I am pretty happy with the numbers we got here. If you have in mind that the self-discharge of a CR2032 usually is 0.2mA, the sleep current could be even neglected. Now it's time for some math:
A coin cell (cr2032) has an approximate amount of 230mAh, so, if we omit the self-discharge percentage:
- Our device will last 21h and 20 minutes if you have it on standby (Display ON).
- 20h and 40 minutes if you are constantly pressing the up/down button (Display ON).
- 14h constantly pressing the button and hearing the beep sound (Display ON)
- 218 years and 291 days if you have it in deep sleep (while Display OFF and it keeps the number in memory)
But we can even play a little bit more... How many numbers you can count before the battery dies? Having this datasheet, we can approximately (Don't kill me, please) calculate the charge in a coin cell:
C = i*t = 0.19mA * 1245h = 23.655C
So, we can theoretically count up to 13.673.410 things without a single beep, and 11.548.794 things if the sound is activated... Interesting
Hope you like it! See you during the next project ;)