Project: 16x24 RGB LED Array
This project is an array of LEDs, sized to fit an alcove in my apartment living room, about 35 inches wide by 58 inches tall. The LEDs will be RGB, with fullcolor pixels arranged 16 wide by 24 tall. Each pixel will be 2 1/8 inches square. There are a total of 384 pixels, and 1152 individually controlled LEDs. The array will be used to display informational graphics, audio visualizations, and tunable ambient lighting.
The most significant part used in this project is Texas Instruments' TLC5940 LED PWM driver. It uses a clocked serial data input, and provides 12 bits of PWM resolution on each of 16 outputs.
Normally, the TLC5940 would require one output for each LED element. Since there are three elements per RGB LED, this would add up very quickly; the planned array would require 3 * 24 or 72 TLC5940 chips. At $3 to $4 per chip, this would go over the budget I'm comfortable putting into this project.
Instead, I will strobe the TLC5940 through several rows of LEDs. The shift data input can be operated quickly enough to run a few PWM cycles before having to switch to a new row. This allows one TLC5940 to control six LEDs per channel, for a total of 96 LEDs with full PWM control per chip. That cuts the number of required TLC5940 to 12, one for every two rows of 16 fullcolor pixels.
Since the TLC5940 is a sink-type driver, I am using common-cathode LEDs. The TLC5940 controls the cathode, and power is strobed into the red, green, and blue anodes. At 600Hz or above, this provides a flicker-free appearance due to the eye's persistence of vision, since each LED is being activated 100 times per second.
The rest of the electronic design involves storing pixel data, generating a grayscale clock, and shifting data out fast enough to achieve flicker-free operation. These functions will be controlled by an Atmel ATmega micrcontroller.
The TLC5940 grayscale clock is an important consideration. It can run up to 30MHz; in practice, 10MHz or more is required to provide fast enough update at 12-bit PWM resolution. Also, the microcontroller must generate a blanking signal every 4096 counts of the grayscale clock. Experiments have shown that an acceptable approach involves tapping into the microcontroller external oscillator and using one of the microcontroller's timers to detect when 4096 counts have occurred.
Design of the enclosure for this project is important, because the final appearance and operation of the device will depend on the materials chosen. Each pixel must be separated by a light-proof barrier, and the front of the array must be covered with a material that won't block much light, but still diffuses the LEDs well.
The Sketchup render above shows the concept for final construction of the array. The LEDs will be mounted on long PCB strips, and will extend through holes drilled in the back panel of the array. The separators between pixels will be thin wood partitions, slotted to fit together eggcrate-style. The front surface of the array will be thin white polystyrene diffuser panels; this material is available in the Home Depot lighting section and works well.
Experiments / Prototypes
The images below show a 16-element array that was used for testing electronic concepts for the final design. It proved that strobing each color was a valid method of extending the control abilities of the TLC5940 driver. The test array was controlled with an ATTiny84 microcontroller.
The images below show another 16-element array constructed to test the dimensions and the choice of diffuser material. The breadboarded circuit above was transferred to a proto board.
Submitted by Garrett on Sun, 03/09/2008 - 18:49.