2
\$\begingroup\$

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!

\$\endgroup\$
1
  • 1
    \$\begingroup\$ There are several other questions where you can find hints, but consider this: with a matrix addressing, with rows and columns, you can drive the 240 LEDs with - say - 15+16 lines, that is a far simpler thing. \$\endgroup\$
    – clabacchio
    Commented Feb 25, 2012 at 20:33

2 Answers 2

2
\$\begingroup\$

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.

\$\endgroup\$
2
  • 1
    \$\begingroup\$ The issue isn't how to drive that many, though, but how to control their brightness individually. Charlieplexing actually makes that harder, since the common reference per row has to be controllable. \$\endgroup\$ Commented Feb 26, 2012 at 8:21
  • 1
    \$\begingroup\$ Since charlieplexing is time division multiplex anyway, you can control the pulse duration for each LED. But you are right, it is badly suited for so many individually controlled LEDs. \$\endgroup\$
    – posipiet
    Commented Feb 26, 2012 at 8:37
1
\$\begingroup\$

Have you considered a grayscale enabled driver chip as the column driver, while still scanning the rows? You'll have to up the current driven proportionally to how many rows you're scanning through, which also means you'll want a cutoff so you don't fry a row should the MCU stop.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.