Go Down

Topic: Questions on Large Matrix (Read 10580 times) previous topic - next topic

KirAsh4

I just realized something ... the I2C bus is, for lack of a better explanation, a single long string of up to 128 devices, one after the other.  As opposed to say something resembling a tree with branches configuration.  This poses a problem with expansion.  Say I have a 3x3 configuration, and the existing I2C bus runs in a zig-zag pattern from top-right to bottom-left (where the master would be.)  How would you add more panels?  You can only do that at the top, you can't add more to the left or right.  I wonder if there are connectors that when you plug something in them, they automatically disconnect another path, kinda like what headphone plugs will do - they cut the signal going to the speakers and it goes to the headphones instead.  That might be one way to do that.  Have the signal always traveling up and down.  If there's something plugged in on either side, that changes the direction of the signal.

Hrm, more cranium busting ...

CrossRoads

That's the kind of thing I was referring to earlier.
Panels report left & up, for instance, on who is to their right or below, based on those panels pullling an input pin low.
The micros on the panels then negotiate where they are, all streams go to all panels, the micros pick off the data intended for their LEDs.
Designing & building electrical circuits for over 25 years.  Screw Shield for Mega/Due/Uno,  Bobuino with ATMega1284P, & other '328P & '1284P creations & offerings at  my website.

KirAsh4


That's the kind of thing I was referring to earlier.
Panels report left & up, for instance, on who is to their right or below, based on those panels pullling an input pin low.
The micros on the panels then negotiate where they are, all streams go to all panels, the micros pick off the data intended for their LEDs.


Wouldn't it be better to have the master send each uController its specific data, as opposed to flooding the whole matrix?  If I can identify each uController by address (hence the i2C possibility), I can also send each one specific instructions and I don't have to flood the whole thing.  This also allows me to send instructions to just one panel, and the rest can simply repeat their last instruction received.  This would cut down on the data being transmitted across the whole thing, no?

I know there are ways to add a star topology to I2C, there are ICs specifically for that.  I just have to figure out if they would work in this scenario without adding too much overhead, or wasted resources, while also keeping everything identical for manufacturing purposes.

CrossRoads

"while also keeping everything identical for manufacturing purposes."

Exactly - so instead of adding some hardware demuxing to limit who ges what data,
send all the data to every micro that is connected and let them filter the data they are to  display.
Designing & building electrical circuits for over 25 years.  Screw Shield for Mega/Due/Uno,  Bobuino with ATMega1284P, & other '328P & '1284P creations & offerings at  my website.

jfenwick

#109
Dec 30, 2011, 04:41 am Last Edit: Dec 30, 2011, 04:57 am by jfenwick Reason: 1
This has been a super informative thread!

I have a bunch of the LED strips that contain these WS2801 chips.
Yes, you can definitely run the 160 LED strips at 4MHz using FastSPI, and it works great as long as you put a 500us delay between updates.
No, you're not going to be able to scale up with one long string of them going past 5 meters.
As soon as you get close to the 6 meter barrier, you have to change the clock to 2MHz.
Then when you get to around 15 meters, you have to slow down to 1MHz... etc.

I'm very interested in how to drive a bunch of these chips (in strip form) in parallel.
I like the idea of sending all the data to all the panels and then filtering.
I know there are some people that have done that before using I2C.
They had some trouble but it still mostly worked.

Is your plan to have a microcontroller at each panel?
It would be really awesome if there was a hardware solution here, where you just sent the same SPI stream to all the panels, then filtered out the piece of the data you want.
Unfortunately I'm not sure such a thing is possible... the closest I found when I was asking around is a bus switch, but that's still ultimately just a demux.

KirAsh4

Yep, each panel will have a uController that will drive the LEDs on that panel based on information received from either a master panel in the matrix, or another uController not in the matrix already.  OR, the master uController will chunk up the data and send each panel its own set of information, but this requires each panel to be addressable.  At least, that's the dream.  Still working out details and how to make it all work, if possible at all.

Go Up