Electronic – Driving a common cathode 8×8 RGB LED Matrix with PWM

ledmatrixpwm

I've got this nice RGB LED Matrix. My goal is to use several of them to create a 16×16 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?

Best Answer

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.