I am trying to make multiple 8x8 bi color LED matrix to work with Intel Edison. I am using I2C ports present on the Edison Arduino kit and it seem to be I2C 6 bus being enabled. I run into problem when i connect multiple LED backpacks (Each with unique address, as i am using Bi color LED backpack with 3 bit addressing i.e. 8 addresses from 0x70 to 0x77), i was able to make only 5 to work at the same time, the moment i attach the 6th one, the display hangs on all of them even if i try to re upload the code but it doesn't work unless i remove the 6th LED backpack. At first i speculated that it might be a power problem, and may be there isn't enough drive current to make more than 5 LED to light up but this doesn't seem to be the case and it is I2C bus that is crashing because i can see I2C register dumping in Putty's Linux Terminal using serial port of Edison. The moment i attach the 6th backpack the I2C crashes.
I was able to make some progress by playing around with pull ups and pull down resistors, adding external resistors and also changing internal port resistance of Edison which gives me option for 2k, 20k, 50k and 910 ohms. By default it is set top 50k. I added external 2k pull downs (surprisingly pull ups didn't work) on SDA and SCL lines going to LED backpacks and set the internal port resistance of Edison to 2k. With that configuration i was able to light up 8-10 LED backpacks (few with repetitive addresses as there are only 8 unique addresses) however, the problem still persists when i try to add more and I2C crashes again. And i am not able to lower the value of the external pull down any lower i.e. 1k because then nothing works at all.
I would really appreciate if someone can point out what is going on the background and how to upscale properly and fix these crashes.
This in fact could be a power issue as the output current of the I2C output is limited and if this limit is surpassed, it could make the bus crash. So, the first thing I would try to use an external power supply to power the I2C devices.
I believe the reason why the pull-down resistors seemed to improve the bus' behavior is because you were decreasing the charge exposed to Edison's output. However, when you started to add additional LED backpacks you increased the charge again and you might have reached the current limit again.
Try using an external power supply for the LED backpacks and let me know if the issues persists, I'd be glad to help if that was the case.
Thanks Peter for your elaborate response i appreciate that. Yes, i am powering my I2C devices from an external power source which can provide enough current to all I2C devices simultaneously, and current limitation doesn't seem to be the problem as devices are not showing any sign of dimming as well.
I understand, in that case, it would be interesting to see the I2C signal the Edison is outputting. Do you have access to an oscilloscope or to a logic analyzer? Comparing both the output before the I2C bus crashes to what happens when it crashes.
Have you tried verifying these signals?