Those last 2 posts really gave me a lot to look into
I would agree. I think the issue is a bad signal.
There was an excellent document on that site:http://ics.nxp.com/literature/presentations/interface/pdf/debug.i2c.oscilloscope.pdf
People interested in i2c should give it a look.
A wild guess at my freezing problem would be this quote:
The SDA line is stuck low because the slave is stuck in the transmitter mode
So an I2C extender really seems like it would solve my problem. But I couldn't find a product I can just start using : (
Can you recommend a product? An I2C extender breakout board for example?
So the first question is, are you fiddling with interrupts? Like disabling them from time to time?
What you could consider is a "watchdog timer".
Researching a bit shows that to be very tricky. Maybe too tricky for me. Unless there is an easy way to do it without a risk of locking up your Arduino or having to create custom bootloaders.
Did you try the suggestion of lower pull-up resistors?
I did. I didn't have 1.5k as suggested, but I did try 2.2k and noticed no difference in stability. I will try 1.5k when I get my hands on them.
I'm considering replacing the ribbon cable with a cat 5 between the lights in case that helps keep noise out. Are there any off the shelf adapters with a cat 5 female on one side and a 0.1" 4 or more input female on the other? Or would making 15 patch points add just as much instability?
Also, would putting decoupling capacitors on clock and gnd and data and gnd between each light do anything? Or would that destroy the signal instead of stabilize it?
Thanks for all your help!