Ultra low power LED flasher

Hi everybody,

I did quite some research for a schematic that does flashing a LED in this way
3 seconds off, 0,05 seconds on - repeat.

Of course I did find some schematics using the NE555 or transistors but they consume too much current.

This circuit is for a battery-driven device and the current shall be as low as possible
I will use a green high-efficient superbright LED which starts lighting up at a current as small as 10 µA. I will use this LED with a current of 0,5 mA which gives already a good amount of brightness. In combination with a dutycycle of 2% the current-consumption will be ultra-low.

I guess a CMOS-chip will have a low supply-current.
Though I haven't found a circuit where on and off-time can be different.
As described above off-time 3 seconds ontime 0,05 seconds.

It could be done using an ESP32 with deepsleep-mode of a low-current-optimisid ESP32-board like this one

but this would be pure overkill

So what kind of CMOS-chip could be used for this ?

There WAS a special chip for that... A quick Internet search tells me it was an LM3909. It appears to be obsolete, but still available at "collector prices".

The search also turned-up Reverse-engineering the LM3909.

1 Like

There are CMOS versions of the 555 timer, like the ICM7555 or LMC555, with lower power consumption.

2 Likes

even a transistor could work. but as per your requirements os current consumption I think you cannot afford to charge capacitor like in 555 circuits.(didnt do the maths thou)... ....use some of the mini micros like ATTIny85 ....or try to find some chinese chip. do the maths of course. if you can afford charging a capacitor you could use some logic gates oscillator

There is an Attiny85 flasher I found with google

Here

You could check out the CD4528 dual retriggerable monostable multivibrator also.

Hi @DVDdoug
the LM3909 was a good tip. Not to buy one but to search for a replacement
I googled for it and found this circuit
http://pigeonsnest.co.uk/stuff/picprog/single-cell-led-flasher-two-year-battery-life.html
requires a somehow special transistor ZTX869 but seems to consume even lower current than a LM3909

@hammy: wow 25µA is really low !

I think the ATTiny is definitely the way to go on this (or some other equivalent controller). Most of the current will be used in flashing the LED, and you may find that a pulse considerably shorter than 50ms will work well enough, and the controller lets you pin that down very precisely in the code.

I have one quibble with the code used in the project @hammy found, and that's turning ADC back on after the wakeup. It doesn't seem necessary, and you might save a couple nA just turning ADC off in setup() and leaving it off.

CD 4093

image

Ref: https://www.newtoncbraga.com.br/eletronica-digital/16336-curso-de-eletronica-eletronica-digital-os-multivibradores-astaveis-e-monoestaveis-cur5008.html

2 Likes

A discrete LM3909 replacement can be built with jellybean 2N3904s and 2N3906s.

Discrete version of the LM3909 with 2N3904s and 2N3906s

I just wonder if these circuits draw less current than an ATTiny85 would. After all, charging and discharging capacitors uses current, as does switching bipolar transistors on and off.

I bought and built some LM3909 circuits, back in the day.
It sort-of sucked. It was an interesting idea AT THE TIME, but current consumption wasn't all that low, and the flashes produced were pretty brief and dim (discharging an approximately 300uF cap through a small resistor and LED.)

  • It's not clear that it would work with modern (ie white) LEDs (with Vf > 3V)
  • It's main claim to fame - operation off of 1.5V, is largely irrelevant due to advances in battery technology and boost converters in general.
  • The "typical current consumption" of 0.3 to 0.6mA isn't really that good by today's standards.
  • (although it's also interesting to contemplate it in conjunction with todays much brigher LEDs.)
  • I've seen (but can't find, at the moment. Sigh) circuits where a microconrtoller is used to boost its own power supply from a 1.5V battery (with a manually-operated pushbutton to get it started in the first place.)

I did find some schematics using the NE555 or transistors but they consume too much current.
... Though I haven't found a circuit where on and off-time can be different.

There are CMOS 555 implementations these days, and there are circuits to give you arbitrary duty cycles. A TLC555 is supposed to have a typical supply current of 180uA, and a TLC551 will operated down to 1V.

Wow. Many many suggestions, different chips and circuits.

Thank you very much to all who contributed to this thread.
I will have to look closer to your suggestions before making a decision.

best regards Stefan

I hadn't thought of trying a modern white LED, but before I returned the parts to their bins, I did just that.

Some worked at 3V. Some needed 3.3V. Similar results with blue LEDs. Though I did have some ancient blue ones that balked even when I ramped the voltage up to 4V.

I admit to a slight curiosity as to whether the discrete circuit would actually power an LED for over a year as claimed in the datasheet for the IC, but I don't have a C cell holder in the house, let alone a C cell, and if I'm honest, I wasn't that curious. Time marches on.

With the values noted in the schematic, I obtained values of tH 16 sec. and
tL of 120 seg(2min).

image

PS:
I used this code to measure the time of the pulses, as it was not possible to measure it with the oscilloscope.

#define pin 2           
unsigned long duracao; 
bool flag = true;
//-----------------------------------------------------------------------------
void setup()
{
  Serial.begin(115200);
  pinMode(pin, INPUT);
  attachInterrupt(digitalPinToInterrupt(pin), countT, RISING);
}
//-----------------------------------------------------------------------------
void loop() {
  if (flag == true) {
    attachInterrupt(digitalPinToInterrupt(pin), countT, RISING);
    if (digitalRead(pin) == HIGH) {
      duracao = millis();
    }
  }
  if (flag == false) {
    attachInterrupt(digitalPinToInterrupt(pin), countT, FALLING);
    if (digitalRead(pin) == LOW) {
      duracao = millis();
    }
  }
}
//-----------------------------------------------------------------------------
void countT(){
  flag = !flag;
  Serial.println(millis() - duracao);
  duracao = millis();
}

What about this approach: Ultra Low Power LED Flasher using the Padauk PFS154 – Tim's Blog

can it be used with the arduino-IDE?