I've got this nice RGB LED Matrix. My goal is to use several of them to create a 16x16 color display. Unfortunately, the display is common cathode.

From experiments driving a single LED with 8-bit PWM, I've noticed that there's a visible difference between colors at the lower (dim) end of the scale. In other words, increasing the brightness gradually from 1 to 16 will not be smooth but perceived as choppy. Increasing the PWM resolution to 16 bit resulted in perfectly smooth transitions.

I've found several LED drivers with 16-bit PWM, like the TLC5943. Unfortunately, the ones I've found are all current sinking, meaning they will only work with common anode types of LED matrices.

Are there any current sourcing LED drivers with 16-bit PWM? If not, is there any way to use a current sinking LED driver to drive a common cathode LED matrix?

  • \$\begingroup\$ "Is there any way to use a current-sinking LED driver to drive a common-cathode LED matrix?" No. \$\endgroup\$
    – Telaclavo
    Jun 1, 2012 at 22:20
  • \$\begingroup\$ @Telaclavo 16 current mirrors! \$\endgroup\$
    – Kortuk
    Jun 1, 2012 at 22:43
  • \$\begingroup\$ @Kortuk He would need 8x8x3=192 of them :) \$\endgroup\$
    – Telaclavo
    Jun 1, 2012 at 22:45
  • \$\begingroup\$ @Telaclavo Even more fun! \$\endgroup\$
    – Kortuk
    Jun 1, 2012 at 22:49
  • \$\begingroup\$ @Telaclavo The display is multiplexed, so I guess I'd need 8x3=24? \$\endgroup\$
    – joh
    Jun 1, 2012 at 23:46

1 Answer 1


As long as you've got some transistors to drive the LEDs, then you can source your 16-bit PWM from a PSoC3. A single PSoC microcontroller should be able to give you 8x3 16-bit PWM channels. You'll then have to multiplex them.

The PSoC should even be able to handle the multiplexing in hardware, using DMA to stream the image data from memory, and deliver it to the PWM channels. This leaves the CPU to do other important tasks like generating the display data

The PSoC5 has an ARM Cortex M3 core. The good thing about the PSoC chips, though, is that they have re-configurable digital peripherals. This means you can choose to have loads of PWM, or loads of SPI, UARTS, or any combinations. You can wire up all of these peripherals internally, with gates, timers, flip flops, etc.

Wiring up a PSoC

This means that you can probably make the hardware in the PSoC manage the screen without any intervention by the CPU, giving a good solid image.

  • \$\begingroup\$ Interesting! I like the idea of having only one MCU driving the whole display. Is there anything special about the PSoC3 making it well suitable for this kind of task? The reason I ask is because I'd prefer an AVR or ARM based microcontroller. \$\endgroup\$
    – joh
    Jun 2, 2012 at 15:13
  • \$\begingroup\$ I've looked at the STM32 family of ARM Cortex-M class MCUs and some of them have quite a few 16-bit PWM channels. I haven't yet wrapped my head around the different package options, but as far as I can understand, the STM32F100RC supports up to 37 PWM channels. Perhaps a bit overkill, as I only need 24... \$\endgroup\$
    – joh
    Jun 2, 2012 at 15:14
  • \$\begingroup\$ @joh - I've added my replied to your comment in my answer. \$\endgroup\$ Jun 2, 2012 at 21:34
  • \$\begingroup\$ I would advise you to read the PWM part of the datasheet carefully, as marketers like to stretch the truth in that department, e.g. PIC microprocessors with four PWM outputs that are just four outputs from the same PWM channel. \$\endgroup\$
    – markrages
    Jun 2, 2012 at 21:51
  • \$\begingroup\$ @markrages - Haha, then you don't know the PSoC! Check this out. \$\endgroup\$ Jun 2, 2012 at 22:33

Your Answer

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

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