It seems like overkill to use an MCU just to light an LED, so I've wanted to get a version going just using discretes. I'm still using a couple of logic ICs in this one, but it's closer. I don't think it's any better, but maybe simpler and cheaper.
The circuit is a revised version of an earlier attempt I made using a Schmitt-trigger relaxation oscillator. The problem with the original version was an enormous power consumption caused by the ST inverter spending so much time in the linear region. In the new version, I used a MOSFET astable design published by David A. Johnson to drive a one-shot pulse generator I had tried before. The result looks like this:
Q1 and Q2 form an astable multivibrator oscillating at about 35 Hz. Q3 is used to square up the output and get a rail-to-rail swing to drive IC1, which in turn creates pulses with very fast edges to drive the IC2 one-shot. The output of IC2 is a pulse of around 12us duration. This ramps up the current in the inductor to a maximum of around 24 mA, which is an efficient drive level for the LED.
The whole circuit draws 11.5 uA, which will run for over 2 years on a CR2032 cell. Without the LED, the circuit consumes around 1.8 uA, so it's at maximum 84% efficient, not counting any losses in the output MOSFET or inductor. At 35 Hz, it's a little flickery, but increasing the frequency seems to increase the overhead current linearly. I think most of the the consumption is actually in IC1 whose input isn't driven very quickly by Q3. For example, I can decrease the current consumption slightly by decreasing the 10M resistor at Q3's drain. This is counter-intuitive, since a lower valued resistor will draw more current, but what's happening is the faster switching speed with the smaller resistor dissipates less power in IC1.
I have yet to try other logic families for the inverters. AUP logic is supposed to be the lowest current, but others might be better with the slow input swings here. I have some 74LVC gates to try next. They're also available in 2-gate packages, which would save a little cost.
There are likely to be issues with this circuit, though. First, the high value resistors and low currents in the astable will be susceptible to leakage on the PCB. To keep things stable, a good wash or two followed by a conformal coat is probably in order.
Another issue is that although the RC time constant for the one-shot can be obtained with 1%-tolerance parts, the pulse length is also a function of the hysteresis in IC2. Unfortunately, this value isn't specified very precisely in the datasheet, so the pulse width could vary considerably from unit-to-unit. I'll have to experiment a bit to see what the variation between parts is, although batch-to-batch variation will probably be larger than that between units from the same wafer.
Overall, I think this is probably a way to create a poorly specified cheap version. It's perfect for the new global economy.