To save me having to worry about multiplexing, if I have a few LED displays I want to control from an Arduino, I string enough 74x595s together to give each LED its own output:
Dimming is easy - I've added a transistor between the LEDs and ground, so I can dim them all in one go with PWM. If I'm using 7 segment displays I usually stick one transistor on each display so I can fade them all individually for added sexiness (YMMV).
My problem is that I've found some sexy little 7-segment filament displays:
They are designed to work from TTL-level voltage (5v) and take less than 10mA each. If I try and connect them the same way as LEDs though:
Then dimming doesn't work. If the transistor is off, current flows from whichever segment is lit back through any unlit segments and back into any of the 595's LOW outputs.
What's the best way to solve this? A) I could stick a Schottky diode in series with each segment (much like the series resistors on the LED schematic above) but that costs me a bit of brightness. B) I've heard of tri-state outputs on logic chips, but is it possible to get a 595 shift register that will let you set an individual output to high impedance instead of just plain LOW? How would you send it data? Each output would need two bits of data sending. C) Any better ideas?
Wish I'd thought this through before making my clock; apart from this dimming problem, everything else worked perfectly first time, and I'm not looking forward to laying out the board again, milling and stuffing it again, it took me ages, dagnammit ...
(PS I wish I'd discovered those little 0-ohm jumpers a long time ago - they save an awful lot of hassle if you're trying to do everything on a single-sided PCB. With the tolerances on my mill, I can just squeeze 3 tracks under each jumper. The days of trying to strip 1mm of insulation off each end of a 5mm bit of kynar wire are over, yay!)