Electronic – Simple solution for driving a large-ish RGB LED array with PWM

avrledmicrocontrollermultiplexerpwm

I'm working on a small toy-like device that has a 10 x 8 "pixel" array of RGB LEDs at its core; thus there are 10 x 8 x 3 = 240 individual LEDs to be controlled. I'd like to control the intensity of each LED individually, basically creating a 10 x 8 pixel full-color display.

The display will be driven by an AVR-series microcontroller. I'm looking for a simple solution to drive 240 channels while being able to control brightness (power) on each channel individually. As far as my research goes, there's no other way to do this efficiently than with PWM.

However, no AVR has 240 outputs, so some kind of expansion/multiplexing/serial-to-parallel conversion is necessary. Shift registers would be a solution, but in combination with PWM I've been told this will be too slow.

I've looked at dedicated LED driver chips with PWM that are controlled via a serial interface. (Texas Instruments makes several such devices, for example). However, they have a maximum of 12/16/24 channels, so I'd still need quite a number of these devices. As long as the drivers can be daisy-chained, this might work, but the device is going to be smallish, so I don't have space for a large number of components.

I don't need lots of resolution when controlling brightness. 8-bits would mean 255 levels per LED, which is plenty. Drive current would not be an issue either as I will be using low-power LEDs which should be driven directly from the outputs of a controller or driver. Speed won't be an issue either; the object will display "images" for consumption by human eyes, so I'd need 20-30 "fps" maximum.

While I've been doing quite a bit of research, I'm not sure I'm looking in the right places, so I thought I'd ask a question here. I'm looking forward to any hints and insights and thank you in advance for any pointers and ideas!

Best Answer

There's a bunch of LED driver ICs, for instance TLC5951DAP. See it in use here: Mbled

Similar problems has been solved in a few open source projects, like Peggy2. The chip Peggy2 is using seems to be going out of production, MBI5026 might be a replacement.