“Let me tell you about my dream, of an LED that automatically adjusts its brightness to match the ambient light, without any supporting components…
It’s no secret that I’ve been working on a new and updated version of my Precision Clock (but don’t get too excited, it’s still months away from release). One of the improvements is to the display, which will read out to the nearest millisecond, and the entire display has been redesigned so that it won’t flicker when filmed with a high-speed camera.
As far as I know, there are no off-the-shelf LED display drivers that can meet my specification. Pretty much every driver these days is serially addressed, and even the fastest ones top out at around 50MHz, which isn’t fast enough for my needs. There just isn’t demand for LED drivers that update with sub-millisecond precision.
I’m not too upset to say goodbye to ready-made display drivers, and eliminating MHz signals can only help our electromagnetic compliance, but this does mean the automatic-brightness circuit of the current generation will no longer work.
Possibly the best bit about the Precision Clock is the automatic brightness circuit. It’s an entirely analog affair, with only a few components, and yet it works so perfectly I couldn’t possibly improve on it. It works on the full dynamic range from broad daylight to the darkest night, it responds instantly but with a hint of smoothing due to the LDR’s response curve, there is no PWM involved, and it’s adjustable if needed. It was only possible to create such a circuit because of how LED display drivers accept a reference current.
Most display drivers work this way. A pin (usually labelled Iset) accepts a reference current. This is fed, or mirrored, into the driver transistors for each segment, so the transistor gain multiplied by the reference current will set the segment current. The expected use case is to have a resistor set this reference current, and do the display dimming through PWM. Naturally, I was able to abuse this to produce my brightness circuit with only a handful of components.
With discrete components, resistors are cheap and transistors are expensive, but in integrated circuits the reverse is true. Transistors are incredibly cheap and resistors are very difficult to add, especially if you want tight tolerances. In the case of a circuit which needs many pull-up resistors, it’s universally implemented as a single resistor to set a reference current, and then transistors everywhere to mirror that current. And, when the resistor needs to be a specific value (with better than 50% tolerance) it’s easiest to just expose that on a pin, so an external component can be used, as with the display drivers.
To summarise: the old circuit was awesome, but it won’t work with the newer design. We need to come up with something at least as good, if not better.”