Feasibility of a 25.000 LEDs matrix (or 4 x 6250 LEDs)

Hello dear Forum,

It has been quite some time since my last visit, but I'm finally getting into Arduino again! And with a rather big question.

For an upcoming (serious) project I need to figure out how to get an insane amount of leds hooked up to an Arduino (Mega) / Arduino's.
(I'm not even sure it should be an Arduino-project, maybe I should go for the Raspberry direction.)

Output
Basically we want to create a custom, multiplexed LED matrix of in total 25.000 LEDs (100 by 250 single colour LEDs).
Creating four identical quarter grids of 6.250 (50 by 125 single colour LEDs would also be completely acceptable for the design of the project.
(If this whole idea turns out to be unfeasible we will look into creating smaller quadrants, but for now the quarter should be the maximum division. Also using LED strips is, due to the proposed design and budget, not an option)
Other requirement: The LEDs need to be uniquely addressable, but when all ON they should still be visible (without a serious drop in brightness).

The topic on the forum that came closest would be this one: Potential problems with large (50x30) LED Matrix Potential problems with large (50x30) led Matrix - LEDs and Multiplexing - Arduino Forum It got me going (in theory), but I am now worried about a couple of things.

  1. First of all: my non-experience with large scale electronics projects.
    While I've done quite some Arduino projects, I have never dealt with something of this size. This makes me rather weary about things like:

  2. Duty cycles. I know that in a multiplex matrix you run through the combined rows and columns to light a single LED.
    But while with an 8x8 grid, or a 16x16 the time required to go through all the options is pretty low, it gets big really quickly. What would be the absolutely minimal time a single LED needs to light up visibly?

  3. Power consumption / power supply? Because of the way a mulitplexed matrix is set up, should I calculate this to be around the maximum usage of one complete row (125 LEDs turned on at the same time), should it be around the total of all the LEDs combined -which would probably disqualify the entire project ;)-, or even some other way? I was thinking of using a good old 1000W ATX adapter, which can supply 30A on 5V.

  4. Heat. I probably should go for the MOSFET solution, as suggested by @CrossRoads in the abovemeantioned post?

  5. Organisation. When using the quarter grid solution, I think I would require per quarter:

  • 8 multiplexers (74HC595) to handle the 50 rows (anodes)
  • 50 1 kOhm 1/4 resistors
  • 16 multiplexers (74HC595) to handle the 125 columns (cathodes)
    (Would it be a good idea to daisy chain these?)
  • 8 transistor arrays, or 50 MOSFETS
  • Crazy amount of cabling.

I would of course have to create circuit board to host it all.

Input
In essence these LEDs will be controlled through 6250 ON/OFF switches. I was thinking of creating using a separate Arduino for this task, with another 816 74HC595 => 50125 grid system as input.

Soldering
Soldering 25.000 LEDs will be an insane amount of work, but that will not be a problem due to an army of soldering slaves. Yey! :wink:

Anyway, I would love to get some feedback on this!
Thank you all in advance,

Cheers,
Eelke

Either I am not understanding your led configuration or your math is wrong.
Please list the following:
Type led used (standard round red led ?) and post datasheet for proposed led.
Number of leds in series in a single chain (bank)
Number of banks total.

74HC595 is only good in this application for controlling other parts.

Any chance you could break it down further and just use an insane amount (nearly 400) of MAX7219s to control 8x8 grids? Then you don't need to worry about multiplexing, only getting data to the MAX7219s, and brightness would not be an issue. Would need to buffer SCK & SS out to all the parts, and daisy chain MOSI to Data In to Data Out.

Otherwise, '595 to control Gate of P-channel MOSFETs to source current to Anode layers, and TPIC6B595s to sink current from cathode columns. Or maybe a part with higher number of outputs for sinking current.
I have a board with 12 TPIC6B595s, 96 outputs. Would not be hard to modify it for more on a larger card, make it easy to use with ribbon cable connectors, and daisychainable.
Use a 1/2 populated board to drive a board of MOSFETs, and two fully populated boards for the cathodes.
http://www.crossroadsfencing.com/BobuinoRev17/

You should consider this option if it meets your display criteria. (I don't know what the final display pattern or sequence or effect you are trying to achieve.)

Thank you both for replying! I'll do my best to fill in the blanks:

raschemmel:
Type led used (standard round red led ?) and post datasheet for proposed led.

The exact LEDs have not been decided on yet. They will probably be standard 5mm LEDs, white, and possibly high brightness.
I am currently looking at these: http://www.aliexpress.com/item/1000-PCS-5mm-Ultra-Bright-Pure-White-LED-Diode-EXTRA-BRIGHT-White-Color-15000MCD/937155950.html Specs:

Forward Voltage 3.5V
Current Rating 20mA
Reverse Voltage (V) 5
Continuous forward current(mA) 20
Peak forward Current(mA) 40
Power Dissipation (mW) 100

raschemmel:
Number of leds in series in a single chain (bank)
Number of banks total.

Depending on if we'd go for making quarter grids or one full grid:
4 Quarters: 50 rows (banks?) of 125 columns, or 125 rows and 50 columns => 6250 LEDs
1 Giant grid: 100 rows of 250 columns, or vice versa => 25.000 LEDs

CrossRoads:
74HC595 is only good in this application for controlling other parts.

Any chance you could break it down further and just use an insane amount (nearly 400) of MAX7219s to control 8x8 grids? Then you don't need to worry about multiplexing, only getting data to the MAX7219s, and brightness would not be an issue. Would need to buffer SCK & SS out to all the parts, and daisy chain MOSI to Data In to Data Out.

I have asked my partners and they're considering it. The problem is, in the end it needs to look like one giant grid, so this adds the practical problem of physically connecting those 400 sub grids. I don't understand what you mean with "Would need to buffer SCK & SS out to all the parts, and daisy chain MOSI to Data In to Data Out.", sorry :blush:

CrossRoads:
I have a board with 12 TPIC6B595s, 96 outputs. Would not be hard to modify it for more on a larger card, make it easy to use with ribbon cable connectors, and daisychainable.
Use a 1/2 populated board to drive a board of MOSFETs, and two fully populated boards for the cathodes.

This looks like a very nice option! By daisychaining do you mean populating one board with an ATMega328 and use the other boards as a extension of this one boards shift register part? (Basically connect the extender boards IC2's Serial in to the 'motherboard's IC12's Serial out). Or would you suggest using multiple complete boards and keeping them in sync somehow? I have not worked with hooking up multiple boards before, but definitely willing to learn!

What still keeps worrying though is the expected drop in brightness when you increase the amount of leds that are on, and if the Arduino is fast enough to handle this. Here I am confused as to wether I should calculate a duty cycle per row, or for the matrix as a whole. Could someone possibly shine a little light on this?

Thank you for your replies, and your patience!

(Edit: removed image from quote)

125 * 3.5V = 437.5V dc / per bank. Can you supply this?
50 * 0.02A = 1A per bank * 50 banks= 438V @ 50A .
That is no small PS. It would be expensive.

raschemmel:
125 * 3.5V = 437.5V dc / per bank. Can you supply this?
50 * 0.02A = 1A per bank * 50 banks= 438V @ 50A .
That is no small PS. It would be expensive.

I'm not sure how you get to that total voltage (well, I can see the calculation, but I don't understand it).
I thought that I would just need a 5V @ 50A power supply, combined with a resistor to bring it down to 3.5V.

This was my question:

Number of leds in series in a single chain (bank)

This was your answer:

Forward Voltage 3.5V
Current Rating 20mA

50 rows (banks?) of 125 columns,

If EACH led in a series chain of 125 drops 3.5V then what is 125*3.5V ? (answer=437.5)
Why is that hard to understand ?

FYI- SAFETY WARNING ! 437V IS A LETHAL VOLTAGE FOR STUDENTS TO BE MESSING AROUND WITH .

raschemmel:
If EACH led in a series chain of 125 drops 3.5V then what is 125*3.5V ? (answer=437.5)
Why is that hard to understand ?

Thanks for taking time Raschemmel. Apparently I didn't understand the voltage drop properly? I figured that, because only one LED is actually ON at any given moment I would only have to supply enough voltage for that one LED. But you're saying that I should add the voltage drops of all LEDs in one column together. Can you explain what is wrong about my idea?

raschemmel:
FYI- SAFETY WARNING ! 437V IS A LETHAL VOLTAGE FOR STUDENTS TO BE MESSING AROUND WITH .

Totally aware of this!

@raschemmel, you are totally off base on this.
Multiplexing involves providing 5V power to the anodes in one whole row from P-channel MOSFET while each individual is turned on/off as needed via TCIP6B595.
Or, providing power from suitable shift register (cd74AC164 for example) to all anodes in a column while sinking current from all cathodes in that column via N-channel MOSFET.
There are no LEDS is series.

@eelke,
The signal I am referring to are the SPI signals; sending data out a 8 MHz rate is the only way you will able to refresh this display at a reasonable rate.
100 bits = 13 shift registers
250 bits = 32 shift registers
Sending out 45 bytes from an array at 8 MHz rate can be done in about 50uS.
If every row was left on for 0.4mS, that would require 40mS to refresh the entire display, for a 25Hz refresh rate.
You can do a simple test with a shift register and 8 LEDs, make a simple pattern and try the LEDs you propose at the currents and refresh times proposed, see if they look okay.

You might look into RGB led strips. I have seen 5m strip with 300 individually (60 per meter) controlled RGB leds with power, controller and remote for about US$24. You would only need 84 of those!
Yes, expensive but you can make roll-up/down curtain if you want and relatively quick and easy build, use, store, move compared to panels.

People already build less ambitious video walls and curtains:

@Crossroad,
With all due respect, I may have misunderstood the configuration but you can see my question and the OP's answer (albeit wrong answer) that there are 125 leds in series in a chain. He did not replay there are no leds in series . He replied there are 125 in each chain (series chain as I defined it). Based on the OP's reply to my question, is my calculation wrong ? ( I don't contest that I may have misunderstood the configuration but based on the OP's answer to my question am I wrong ?)

4 Quarters: 50 rows (banks?) of 125 columns, or 125 rows and 50 columns => 6250 LEDs
1 Giant grid: 100 rows of 250 columns, or vice versa => 25.000 LEDs

To me this simply means 50 series chains (of 125 leds each) in parallel.
Without a schematic, I can't picture the configuration you are describing.

The LEDs need to be uniquely addressable, but when all ON they should still be visible (without a serious drop in brightness).

Thus you were totally off base to start with despite eelke's use of "chain" vs the more common "Row/Column" nomenclature. The following description of muxes & transistors made the intent clear.
I won't go into the calculation because it does not apply.

@Crossroads,
Thanks for clarifying that. I did not realize the OP was talking about a ROW/COLUMN matrix where a single led is lit when a HIGH on a Column chip corresponds to a LOW on a ROW chip at the same point in time.

Rather than delete the irrelevant comments in my previous post in this thread, I'll leave it to give others something to think about should they ever contemplate something similar without the matrix scheme you explained.

That boggles my mind! I hand wired 48 LEDs (no PC board) for a project a few months ago and it took me HOURS to solder and heat-shrink the connections... That's 96 solder connections to the LEDs, plus the 96 soldered connections at the other end of the wires. (The physical design didn't make it easy.)

I work for a small electronics manufacturer. We sell a couple hundred "units" per month with 6 or so LEDs each (all mounted on PC boards assembled by an outside assembly house). So, 1000-2000 LEDs in a month is trivial, and if these boards had a couple-hundred LEDs each, it would still be trivial as long as the LEDs are PC board mounted and don't have to be hand-wired individually.

In case it's not clear, with a regular matrix or multiplex (shift register) design, each LED can be fully-on or fully-off and you don't have to worry about a reduction of brightness.

Creating four identical quarter grids of 6.250 (50 by 125 single colour LEDs would also be completely acceptable for the design of the project.

It would depend on the size and physical/mechanical design, but I'd go with smaller "modules". Maybe 100-200 LEDs each, or whatever seems reasonable (maybe 256 would be a good number). Something that's more "manageable" and easier to assemble & troubleshoot, and something that can be easily unplugged and replaced if there is a problem. (With smaller modules, you can build a couple extra.)

Again, this depends on the size and mechanical design, but if you are mounting the LEDs on PC boards, assembly can be automated (and you can use surface-mount LEDs). There's a cost to that, but for a project of this size it's probably worth it.

Without recommending any details, conceptually I'd consider some sort of bus or network (maybe I2C) so that each module can be addressed before addressing an individual LED.

P.S.
On my little project I used Maxim I2C constant-current LED drivers, so I didn't need current limiting resistors on the LEDs. But these suckers are expensive, and I probably wouldn't use 'em on such a big project.

Without recommending any details, conceptually I'd consider some sort of bus or network (maybe I2C) so that each module can be addressed before addressing an individual LED.

That would slow down refreshing a lot. Stick with SPI.
The same data can be sent to 4 panels in parallel.

Solder the LEDs to island of holes perfboard, then wirewrap together, Way faster than soldering. Easier to fix a mistake. One the shift registers are in place, can start testing out LEDs.
LEDs leads are square and can be wrapped to directly - the black & white wires on the left side here are LED leads.
This whole box was wirewrapped.

Without recommending any details, conceptually I'd consider some sort of bus or network (maybe I2C) so that each module can be addressed before addressing an individual LED.

That would slow down refreshing a lot. Stick with SPI.
The same data was sent to 4 panels in parallel.

Solder the LEDs to island of holes perfboard, then wirewrap together, Way faster than soldering. Easier to fix a mistake. Once the shift registers are in place, can start testing out LEDs.
LEDs leads are square and can be wrapped to directly - the black & white wires on the left side here are LED leads.

I agree. Most people cannot make a decent solder joint their first four or five attempts. Wirewrap is more reliable for this application.

I know you said in your first post that you were not looking at using LED strips due to cost concerns, but are you really sure you can get this many discrete LEDs cheaper than an equivalent length of pre-made strip? I haven't found that usually to be the case...

Also, I may have missed it (I skimmed certain parts of the thread), but were you hoping to have dimming? That is, are your LEDs either ON or OFF, or do you want levels of brightness as well? If you do, you either need a latching, PWM-enabled LED driver IC per group of LEDs (group being defined by the IC's pin count), or you need to PWM entire rows yourself -- which is going to bring your refresh rate waaaaay down.

On that note, are you considering RAM requirements for storing the bitmap data?

Distance is also factor - LED strips are fixed distance, need individual LEDs for custom spacing, or if want different intensity, like super bright, 20,000mcd LEDs: