What are the different ways to implement an LED matrix driver circuit

led-matrix

I would like to build a driver circuit (controlled by a microprocessor — Arduino, Raspberry Pi, PIC, etc.) for an LED matrix to support a couple of features:

  1. Dimmable leds
  2. Simultaneously addressable (multiple LEDs can be turned on at once)

Application: Symbolic display (letters, numbers, special characters), charts (bar graph), art ("twinkling effect" via dimming)

What are some approaches others have taken? In particular, I'm interested in software solutions and minimizing resources (chips, component parts, etc…). Below are some approaches I think may work:

  • Shift Registers to light individual LEDs very quickly at different locations while relying on persistence of vision (to make LEDS appear to be lit simultaneously)
  • Decoders to manually address single anode/cathode pairs to light individual LEDS. Not sure how to make it dimmable.
  • Encoders to complete circuitry to light multiple LEDs.

Best Answer

The usual solution is a combination of 1 and 2. For example you can use shift registers on the anodes and decoders to drive the cathodes (or vice versa). This reduces the number of outputs needed significantly. To dim you control the amount of time each LED is on. You can also get ICs (I've used the TLC5945) to do the dimming for you.

It takes some code to get all the data lined up the right way and shifted out at the right time, but it's not too bad.

You can multiplex pretty heavily without needing a lot more current. On the LED sign I built I tuned the drive current to get the right brightness with each LED being on continuously. When I switched to multiplexing the 24 lines (8 each of red, gree, blue) it looked fine with no adjustment to the current.