bm2006: 16 RGB LEDs, 9V powered wearable unit that can run standalone or with DMX

This web page documents a board with 16 RGB LEDs
Board size: 3.00 x 3.00 two-layer, with slick black soldermask

Project timeframe: August 2006
Client: Leo Villareal
Webpage created: May 20 2007

Top view:

Bottom view:

bm2006 (i.e. the blinky for Burningman 2006) is the latest and possibly final in the series of wearable LED blinkies for Leo Villareal / disorient.  (previous years: bm2005, bm2004).  bm2006 is a grid of 16 10mm RGB LEDs, and is actually two design variations on one board: standalone pattern synthesis, and RS-485 controllable with either a custom protocol or DMX.

I did the "architectural" design of both the hardware and software - describing the hardware design and writing the core software that runs everything.  Todd Polenberg did the hardware layout, handled the manufacturing, and wrote the pattern synthesis part of the software with my occasional consultation.  The hardware layout is a bit of a trick, while the board isn't particularly dense, the LEDs are 4-pin through-hole and on a perfectly regular grid, and the electronics are as SMT as possible and are all on the backside, placed between and around the LED pin pads.  Glad I made Todd do it.  :)

The design has three major parts: a TI TLC5940 16 channel PWM LED driver, four PFETs for a 4-way mux, and a PIC18F252 to run the show.  The PIC software is in C using the CCS C compiler.  The board can be built with a 9V holder (shown above) for wearing, or with a 4-pin header for power/gnd/RS-485 and a standard 75176 8-pin SOIC RS-485 transceiver.

The TLC5940 is a very handly little chip.  While PWM can be done in software (32 channels of 8-bit here), this design needed 48 channels and to be able to drive the LEDs at about 60mA - so the PIC can't sink the current thru a pin (current limit for PIC i/o is a quite reasonable 25mA).  By doing a 4-way mux of the 16 LED driver chip we could achieve these goals with minimal parts and hassle.  Note: since the LED driver chip is 16 channels, and we have 16 LEDs of 3 colors, why didn't we just do a 3-way mux?  Well, that was the original plan, but the layout was going to be somewhere between arduous and impossible on a 2-layer board.  So for an extra 30c we did it 4-way.

There are some difficulties with the TI chip.  For starters, it doesn't just "auto run".  It is 12-bit, and after sending it 4096 clocks, you have to toggle a pin to reset the PWM counter.  This is required, and is a serious design hassle.  Additionally, it seems in our usage anyway, that new PWM settings have to be loaded in while the PWM clock is stopped.  There may be something I'm doing wrong, but considerable effort was spent with no luck.  So this means when doing multiplexing, where new PWM data is loaded each multiplex step, that all the LEDs are off while the data is being loaded.  This makes the display more susceptible to flickering and the overall output dimmer.  However, for this design low power is essential for battery operation for reasonable runtimes, so everything is being run fairly dimly anyway.  Flicker was not a problem at all.

For dealing with the PWM counter: the PIC generates the PWM clock via one of its hardware PWM generators running at maximum speed (5Mhz).  This goes to the TI chip and the input pin for one of the PICs counters.  When the counter hits 4096, the PWM generator is turned off, new PWM data for the new mux phase is loaded into the TI chip, the TI chip's PWM cycle is reset, the pfet for the mux step is turned on, and then the PIC PWM hardware is activated again and repeat.

The RS-485 version hasn't been used much (at least not yet), but was essential for making a 3x3 grid of these units, to form a DMX-enabled prototype of this beast.

These also make excellent "taillights" for bicycle riding at night in Oakland.  Of course, being Oakland, you can't leave it on your bike while you're at the bar...  :)