I don't know if its been tried before (let me know), but here is a way to get extremely low 'OFF state' current (parasitic current, quiescent current, sleep current, etc.). I'm talking about the current used by the driver after it has shut itself down due to Low Voltage Monitor (LVM) kicking in. (Obviously to get zero current just click the switch OFF!) Lowering this current will help protect the cell or cells when the light has been left ON and forgotten.
The amount of current used by a typical 105C driver is very small compared to the capacity of a typical cell, but remember the LVM forced a shut down because the cell is nearly dead, so there isn't a lot of capacity left to run for long before the cell voltage drops to bad levels. With some mods we can drop this current under 0.002mA (2uA). But, we need to do some rewiring and recoding... are you up for it?
To do this we need to tweak the program code, steal the use of Star3 and move the lower ADC resistor, the one going to ground (usually 4.7k in a 105C driver). One end of the resistor goes back to pin7 and the other end now goes to pin3 or Star3. The code now needs to be changed to turn Star3 into an output, and set it Low. This reconnects the resistors just as normal but also allows the ATtiny to turn this pin Off by setting it to an input when the LVM kicks in. This opens the current path through the resistors saving over 100uA. If you were using Star3 to select memory, or the like, then you'll now have something else to do in code.
I've listed some typical currents used by different circuits. These depend on battery voltage and are roughly as follows:
- ADC resistors = 3V / (22k + 4.7k) = 112uA
This mod reduces the ADC resistor current draw to zero.
- OffTimeCap resistor = 3V / 470k = 6uA This current is already zero if a resistor is not used with the OTC
Change code to set this pin low before going to sleep, no need to keep the cap charged when "OFF".
- ATtiny13A = 2uA Assuming Power Down Sleep mode with ADC off
Can't get much below 2uA...
- Zener Mods = 6V(batt) - 5V(zener) / 200ohm = 5000uA Changes with different resistor
IMHO multi-cell lights should be done with low current LDO regulators (like TPS71550) rather than zeners. But I understand completely that these mods work perfectly well, they're just not as low current as a regulator. TPS71550 draws 3uA. My latest 2 cell driver now sleeps at less then 5uA.
Edit: This mod is not recommended for multi-cell setups as the voltage on the ADC pin will rise above the MCU supply voltage. This may/will draw current, and defeat the purpose of this mod. My 2 cell mod seems to work probably because the LVP point is very close to the MCU supply voltage.
I'm a hardware guy, so I don't feel comfortable telling you how to tweak the code in your particular driver to do these changes. (I had trouble trying to program a pin to be an input...) enough said. These are the changes I made to ToyKeeper's TK_OTC.c, it's nothing special even an old hardware guy can figure it out! Thanks TK! :)
#define STAR3_PIN PB4 // Low end of ADC voltage divider resistors
#define STAR3_DIDR ADC2D // Digital input disable bit corresponding with PB4
Added this to ADC_on()
DIDR0 |= (1 << STAR3_DIDR); // disable digital input on STAR3 pin to reduce power consumption
DDRB |= (1 << STAR3_PIN); // Set to Output
PORTB &= ~(1 << STAR3_PIN); // Pull low end of Voltage divider to ground
DDRB &= ~(1 << STAR3_PIN); // Set to Input (without pull-up) oops
Added this to ADC_off()
DDRB &= ~(1 << STAR3_PIN); // Set to Input (without pull-up)
Added this just before Set_Sleep_Mode
ADC_off(); //ADC off
PORTB &= ~(1 << CAP_PIN); // Drive Cap_pin Low