Der Blinken Lights (Part I -- hardware)

We'll have a table at this year's MakerFaire Bay Area and at the Seattle Mini Maker Faire. In order to give our booth a little more visual interest, I've been putting together a couple of demonstrations projects to show off some of our products. So naturally I went straight to the blinky lights.

ITead studios had some nice 60mm 8x8 ultrabright common anode RGB panels on sale for cheap ($15/ea), which I decided would be perfect for this project. They're big, they're bright, the colors are great, and the fact that they are common anode makes it trivial to use one of our 4x4 Drivers as a column driver for two columns of the LED modules. 

The I2C PWM Driver from Snootlab makes a perfect row driver. Not only are they easy to use, but their open drain topology and built-in resistor packs make the electrical interface really easy. Each driver has sixteen channels of open drain PWM drive, so if we assign one to each color, that drives two rows of the LED modules, for a total of four modules, and a 16x16 grid of RGB LEDs. That's enough for an eye-catching demo. Add a Zigduino to drive it (for both the 16K of RAM and the wireless communications), and we've got the hardware list for a pretty and eye-catching demo. We also have a great excuse for me to practice my point to point soldering skills.

My first thought was to put all four of the modules in a square on a single piece of perfboard. Sadly, none of the perfboard on sale at my local Fry's was big enough to accomodate a square pattern of the 60mm panels. I decided to do each column on its own piece of perfboard and connect them to each other and to the drivers with ribbon cables. This makes life relatively easy -- all the PWM drivers connect to each perfboard, and only the cable from the column driver has to split. Ribbon cables allow me to use rectangular IDC connectors for everything, which are about the quickest way to terminate large numbers of connections.

Each LED module has two rows of 16 pins on 0.1" centers. According to the drawing, these rows are 45.76mm (or 1.8") apart -- perfect for my 0.1" pitch perfboard. The fact that I mention this should tell you that they are no such thing. With one row of pins in the holes in the perfboard, the other row lands about half way between two rows of holes. Nothing a little forcing couldn't fix, but I did end up with the headers canted out a millimeter or so in order to fit.

My initial intention was to wire one PWM driver for each color. I didn't end up doing this, because it would have made the point to point wiring more painful and I can remap it all in software later anyhow. Here's the perfboard for two pairs with just the column wiring done:


While soldering these together, I decided to try using solder paste instead of flux core wire solder. It comes in a syringe with a dispensing needle and allows me to put the right mix of solder and flux right on the joint. This lets me hold the soldering iron in one hand and the hold the workpiece with the other. I wish I'd started doing it years ago -- it entirely solves the three hands problem that I usually have with point to point work.

When you buy solder paste, make sure you're getting the electronics grade and not one of the jewelry, plumbing, or automotive grades. If you are in a country that allows you to use lead-tin solder, get that kind. Make absolutely sure you do not get paste made with acid flux -- it will eat your project. Also remember to keep it in the fridge when you are not using it. You can buy appropriate solder paste syringes from a number of online suppliers.

I started wiring up the row lines with individual wires, but quickly switched to using the 8 conductor ribbon cable I already had for making up the daisy chain cable kits. I used one cable for each color on each panel, and soldered them to headers in the easiest way possible. This resulted in red and blue for each panel being driven by a single PWM driver each and the green for both driven by a third. It sounds messy, and it is, but it's less of a mess than the alternatives.

And here's a whole panel with all the wires, all the drivers attached. You can't quite see my kludged connections for the I2C bus on the 4x4 driver shield. Luckily it only takes four wires -- SDA, SCL, ground, and +3.3V.


Next, I will discuss the software interface and the frame buffer.