Finished a mapping of all the Beams in the Solarium as they will appear in the dome. The format is similar to a flattened globe with the longitudinal lines showing the curvature. Click through to a full sized vector PDF:
Noise on the power line seems to be the major cause of problems for the Solarium lights. In the last post about getting the lights working without freezing, I actually found that they worked longer but still died after a few hours.
Examining the data sheets a little closer I realized I had neglected to place capacitors near all the chips. Capacitors have many functions, but one important thing they do is absorb noise. A capacitor will block a constant voltage but lets changing voltages pass through. Put a capacitor between the power lead of an IC and ground and the constant 5v power will be delivered to the chip while (most) fluctuations will drop through the capacitor to ground.
Having clean power (read constant and unchanging) is important because the 5v power is a reference for how a digital device determines what's a 1 (5v) and what's a 0. Noisy power can confuse these devices and cause unpredictable behavior. In the Ray's case, the noise is comming from the signals to the LEDs themselves.
I started by putting a capactor across the power inputs of the chip that is supposed to allow longer cable lengths (important since the Rays will be about 6 feet away from each other). After doing this the lights ran for over a day before I stopped them.
Next I added a longer 6.5' cable to test driving a longer length. This introduced a new type of problem; the lights would not freeze but changed more slowly, stuttering and irregular. I examined the power at the end of the cable and found it to be very noisy. Each IC on the Ray has a capacitor next to it, but I had not placed a capacitor across the power line where it connects to the PCB. Adding one cleaned up the power and allowed the lights to run smoothly.
I'd always been told as a general rule to put a capacitor as close as possible to each IC and one where power enterers the board. I understood the reason, but I'd never seen it affect anything in practice (likely because I'd worked in small, ideal conditions). Debugging this was a great illustration of how important this rule is.
After struggling with the lights a bit, I finally go the lights working continuously:
Previously they would follow their program correctly for anywhere from 30 seconds to several minutes. Inevitably however, the lights would freeze and stop changing. I would then have to power cycle the ray and restart the program.
The answer were a pair of pull-up resistors on the clock and serial lines. These hold each line at +5v or a logic '1' . The devices connected then just have to pull the lines down to 0v to send a signal. The resistor values I had were the recommended values but were actually too high (1oK ohm) for the configuration I was using. Reducing these to 1K ohm did the trick.