Because You Can, Maybe You Shouldn’t

74595 Matrix Display

Adafruit added some neat little multi-digit 7-segment displays and I wanted to play. I picked up a yellow and red .39″ displays and a green .56″ display. I noticed the small ones even have the mitered ends on the segment, something that looked missing on the ebay displays getting down towards this size.

I’ve built a couple displays for clocks using individual 7-segment displays and for each digit I used a 74595 shift register. This is a lot of resistors and shift registers, but a simple design. I was wondering if I could use a series of shift registers to drive the multi-digit matrix. Since the 74595 has a high-Z output when not displaying (pull the OE high) I figured I’d give it a try.

Normally a micro controller is used to do the scanning on a timer interrupt or some similar mechanism. If you only used the micro controller and no shift register you would eat up 12 pins and not even control the colon or upper mark between digits 3 and 4 on his display. Commonly you see people using the 74595 to drive the segments and then the common cathode or anode through some transistors off the micro controller pins. I figured if I could provide my own timing the 74595s would make using this display just like my other displays.

Now I didn’t use transistors for my digit commons so I might have left some brightness on the table but that’s okay. I wasn’t going for bright. I wanted to make this display work like it wasn’t a matrix. I used 4 74575 shift registers in a chain with all the outputs paralleled and driving the segments through 1k resistors. The output enable (OE) line of each 74595 is tied to the common cathodes (CC) for each display and the CC and OE lines are connected through inverters provided by a 7414 (hex inverter) to a 4017 decade counter/divider which I’ve configured to sequence through 4 outputs only. As a clock source I’d use two of the schmidt-trigger inverters of the 7414 with either a crystal or RC, timing isn’t important, just fast so it doesn’t flicker.

I couldn’t locate a suitable resistor and capacitor on my desk and instead just grabbed a DS32KHZ 32.768k oscillator. This gives me an ~8khz update speed which is not at all noticeable. This entire circuit ends up quite large and uses 7 chips and still can’t control the extra LEDs. The upshot is the micro controller can talk with 4 signals (serial data, data clock, latch clock, and reset). I tie the reset low so the display comes up blank then let the micro controller pull it high when it starts displaying.

It was a fun exercise, but it’s hard to recommend unless you’re just experimenting. I could dedicate a micro controller just for the display with a lower component count and similar BOM cost. Even with surface mount components the components would take twice the space of the display.