building LED wall using 60 8*8 LED matrices

Hi all, I am a new user of the Neopixel LED matrices. I would like to build a cylinder wall of 15*4 LED matrices, with Small 1.2" 8x8 LED Matrix w/I2C Backpack. The LEDs face inner side, 15 columns of 4 LED matrices.In total, there will be 60 matrices and 3840 single colour LEDs.

However, there are several problems that came to me when I was thinking about it.

1, The backpack is a bit longer than matrix itself. If I need to put them in array that tightly attached between columns, the backpack will block neighbour columns' backpacks. The possible solution is to solder backpacks a bit off the matrix to the tips of pins of matrix. It can buy some space but still not good enough.

2, Since the 1.2" matrix backpack only has 3 bit I2C addresses, I can only control 8 matrix independently at the same time. If I need to control all single LEDs of all matrices, how can I set the addresses? Should I use another layer of micro controllers as master device to control different groups of 8 matrices? Is it going to slower the speed of refreshing matrix? The ideal refresh rate for each matrix is at least 100 Hz.

If by chance anyone have the experience of doing similar projects, or have good knowledge of how to solve these problems with even completely different better solutions, I will more than happy to listen to you for advice.

My contact email is guangda0101@gmail.com. As I am new in electronics and hardware programming, I hope you won't get annoyed if I ask some stupid questions.

Thanks in advance.

Hi,

In the first sentance, you mentioned Neopixel. Was that a mistake? You did not mention it again.

SPI interface would be better for this number of matrices I think. Max7219 chips have this and are available as “backpacks”. I have seen some where the backpack is the same size as the matrix.

Paul

Here you go. You would have to solder a surface mount chip, I hope you have good eyesight and steady hands!

http://www.ebay.co.uk/itm/10Pcs-New-MAX7219-Dot-Matrix-Module-DIY-kit-Cascade-Control-Display-Module-/271546388515?pt=LH_DefaultDomain_0&hash=item3f396d1023

I've got a bunch of those 7219 matrix boards and it isn't that bad to solder.

Or you could use these if you prefer through hole parts: http://www.electrodragon.com/product/dot-matrix-chain-display-kit-max7219-v2/ They are a little cheaper too.

--- bill

Has anybody here had success with daisy chaining that many MAX7219's using SPI? I built a chain of 60 MAX7219's, and the SPI seems to be crapping out after going through only 8-12 MAX7219s.

I've only have 10 so that is as many as I've done.

Have you been using the arduino SPI.h library to control it?

I'm using the icstation modules with the latest MD_Parola library and h/w SPI, but the MD_Parola library uses the MD_MAX72xx library which directly controls the SPI hardware.

--- bill

pcdangio: Has anybody here had success with daisy chaining that many MAX7219's using SPI? I built a chain of 60 MAX7219's, and the SPI seems to be crapping out after going through only 8-12 MAX7219s.

Yes it will, this is due to what is known as the fan out of the driving output. It means the number of inputs you can connect an output to. If you use a pair of inverting buffers like that found in the 74LS04 you can buffer batches of 8 chips at a time.

Grumpy_Mike:
Yes it will, this is due to what is known as the fan out of the driving output. It means the number of inputs you can connect an output to. If you use a pair of inverting buffers like that found in the 74LS04 you can buffer batches of 8 chips at a time.

awesome, thanks for answering that question for me. so you think the CLK and SS pins of the arduino are not able to source enough current into all of the connected MAX7219s? that certainly makes sense since the arduino output pins have a low source current. Can I connect them to a transistor (or relevant IC) that will be able to provide the necessary current to the MAX7219s?

i had asked in another post if I can use a logic level shifter from sparkfun to act as a logic booster. since the shifter uses its own vcc/ground supply, i’m hoping it will be able to provide the necessary current. does this sound like a viable option?

Can I connect them to a transistor (or relevant IC) that will be able to provide the necessary current to the MAX7219s?

Yes that is what I said use a 74LS04.

i had asked in another post if I can use a logic level shifter from sparkfun to act as a logic booster. since the shifter uses its own vcc/ground supply, i'm hoping it will be able to provide the necessary current. does this sound like a viable option?

No.

As well as current there is the problem of signal integrity, that is the shape of the signal. This is degraded by stray capacitance in the wiring which means that fast logic signals can not travel very far only a few meters at most.

I think I'd make 6 strings of 10 MAX7219, give each string its own buffer chip so the 328P is only driving 6 loads. That also limits the delay in updating a string, only have 10 chips worth of data to send out vs 60.

Grumpy_Mike: Yes that is what I said use a 74LS04.

If I hook CLK and SS up to the inverter, I'd have to change their polarity in my Arduino code, correct?

Also, what are these buffer chips that everybody keeps referring to? I googled around but couldn't find a general definition that sounded like it applied to this problem.

While I know I have a problem now with fan-out of the CLK and SS lines, is it safe to assume that the DATA lines are not effected by fan-out due to the shift registers in each MAX7219?

Some 7400 & 4000 series logic chips have "Line Driver" or "Buffer" outputs, which have a larger "Fan-out" ie. they can drive more inputs in parallel. Some of them have "open collector" outputs which means you can use a pull-up resistor of your choice (as long as you don't exceed the chip's maximum sink current) to get faster switching when the line is long and has a lot of stray capacitance.

As for having to invert the Arduino outputs, you may be able to avoid this by using another inverter between the Arduino and the other inverters.

You are correct about the data lines.

CrossRoads: I think I'd make 6 strings of 10 MAX7219, give each string its own buffer chip so the 328P is only driving 6 loads. That also limits the delay in updating a string, only have 10 chips worth of data to send out vs 60.

Can you explain further please Bob? Surely you still have to send data to all 60 chips? Unless the sketch is clever enough to work out that some groups of 10 matrices have not changed and you can skip updating them? If so, would you use a 3-8 line decoder to direct the MOSI clock signal to one of the 6 strings?

Buffer SCk, SS, MOSI out to each string. Use 6 chip selects if there is enough IO pins. Otherwise, let MAX7219s be the data in to data out buffer, and just have the SS & SCK buffered.
3 to 8 decoders are generally 1 of 8 outputs low, that doesn’t help on data; would help on chip select.
http://www.digikey.com/product-detail/en/CD74AC138E/296-4225-5-ND/375864
Good drive current to get across lots of PCB traces and wiring, vs wimpier HC parts:
http://www.digikey.com/product-detail/en/SN74HC138N/296-1575-5-ND/277221