The TLC5947 is a 24 channel, constant current 12 bit PWM driver from Texas Instruments. It is only available in a surface mount package that TI calls "power pad". To make prototyping easier, I created a breakout board using Cadsoft Eagle, and had the PCB manufactured by BatchPCB. The TLC5947 is like the TLC5940, but it does not require a BLANK signal like how the 5940 does. One advantage of the TLC5940 is that it is available in a DIP package. The TLC series of chips enables a microcontroller to easily control numerous amounts of LEDs, and PWM them, using just a few I/O pins.

     The TLC5947 operates by having a host microcontroller shift bits into it. Since there are 24 channels with 12 bit resolution, 24 x 12 = 288. So every "update", the host microcontroller should shift 288 bits (or 36 bytes).

     Here is example code. Arduino 015 with a ATmega168 controller. Note that Arduino's digitalWrite commands are not used, as they were found to take too much time. "True c" style commands were used instead. With the true c commands, the port registers are directly changed. When you use the Arduino digitalWrite commands, it goes through other things in the background.

     What does constant current mean? It means that the TLC5947 can limit the current coming out of each output. The advantage of constant current is that I can connect LEDs directly to the output without any resistors. If you use a chip without constant current, you will have to put resistors of the appropriate value depending on your VCC voltage. To set the current of the TLC5947, put a resistor between IREF and ground. I found out that a 5k resistor worked well for single LEDs, however with 24 LEDs on at the same time, the TLC5947 tends to heat up and go in to thermal shutdown mode. Increasing the resistor value should lower the temperatures.

You can download the Eagle schematic and board files here.