Help with increasing 8x8 LED Matrix brightness

Hi I've got an 8x8 LED matrix driven by the Arduino Mega and 8 74HC595's. There is no resistor between the 74HC595 and the LEDs. I measured the current and they receive ~20mA at peak brightness which is exactly what the data sheet suggests. This is when I have just one LED on in the shift register. When I turn on all 8 LEDs, the brightness is still the same. However, when I turn on all 64 LEDs the brightness drops considerably. The LEDs are connected by a common cathode and all the current is sunk by an IRFS630B MOSFET (200V, 9A). Why is that when all shift registers are on, the brightness drops? Each shift register is essentially isolated from the other. I've even tried PWM with little success.. how can I fix this?

Perhaps your power supply can't handle the combined current draw? 64 * 20 = 1280 mA = 1.2 A What is your power supply rated for?

I'm using an old PC power supply rated at 25A. The strange thing is that when one shift register is lighting up a single row, its plenty bright enough. But when I start to light other rows, they all get dimmer. To clarify its like one row i am at 100% brightness. Two rows, everything is at 75% brightness. Three rows 50%..and so on. This is kind of boggling me because the shift register circuits are relatively independent of each other except for the power source. The PSU has a 10ohm 10 watt resistor as a load to turn it on. I connect the shift registers in parellel with this load.

anarchy2465:
There is no resistor between the 74HC595 and the LEDs. ... The LEDs are connected by a common cathode and all the current is sunk by an IRFS630B MOSFET (200V, 9A).

I was working with LEDs yesterday, 32 of them:

I was thinking "how can I save soldering 32 resistors?" and thought of doing what you did - a constant current sink. But I decided against it on the grounds that the current being sunk would be shared, and the more LEDs that lit up, the more current would need to be sunk, and that the results wouldn't be even. Your report appears to confirm that.

Perhaps you can clarify how you are managing the current. In the absence of resistors are you going for a constant current sink, or relying on PWM to limit it?

The LEDs are connected by a common cathode and all the current is sunk by an IRFS630B MOSFET (200V, 9A).

Are you sure of this?
This would be true for a common anode but with a common cathode you need a current source not a sink.

Doesn't the Anode of the LED need to be more positive than the Cathode for the diode to conduct?.
The only conducting diode I can think of that doesn't is a Zener...

Doc

Yes, current flows from anode to cathode. All the anodes are connected to 5V (logic-1) when they are turned on and the cathodes are connected to a MOSFET's drain.

I was thinking "how can I save soldering 32 resistors?" and thought of doing what you did - a constant current sink. But I decided against it on the grounds that the current being sunk would be shared, and the more LEDs that lit up, the more current would need to be sunk, and that the results wouldn't be even. Your report appears to confirm that.

Perhaps you can clarify how you are managing the current. In the absence of resistors are you going for a constant current sink, or relying on PWM to limit it?

The most current management I'm doing is switching it with the MOSFET which can take up to 9A. Since the current is not constant, I can't really use a constant current sink. I may be lighting 1 LED or 64 LED's and ideally the current should increase proportionally based on the number of LEDs lit. I've done some PWM to flash 8 LED's at a time and that helps achieve uniform brightness (at the expense of maximum brightness). If I can't increase the current then I'll probably settle for a solution like this.

There is another thought that occurs to me. The wire (ribbon cable) in the picture is 30 Ga wire and the current is being sources/sunk through several feet of what is essentially data grade wire, small gauge wire. Might this be the issue, if you place a voltmeter across several feet of wire and measure any drop at all you will have serious issues with led brightness. This includes power ground and control lines.

Doc

The most current management I'm doing is switching it with the MOSFET which can take up to 9A

This means you will end up frying your shift registers.

I am having a bit of trouble down loading the data sheet for that FET, but almost certainly it is not a logic level FET and requires 10V to fully turn it on. You are supplying it with 5V and so it has a high, for a FET resistance. This is fine for small currents, but when a large current flows, with all your LEDs on the resistance drops a larger voltage and restrict what is flowing.

EDIT - just checked the data sheet and the FET is your problem, the Gate Threshold is only when the FET starts to turn on, not when it is fully on, you need 10V on the gate to get an on resistance of 0.4R which tells me it is a very old device newer devices have a much lower Ron ( resistance when on ) than this. So either boost the gate voltage or get another FET.

Docedison:
The wire (ribbon cable) in the picture is 30 Ga wire and the current is being sources/sunk through several feet of what is essentially data grade wire

Are you referring to my picture? I had 1K resistors, so if my calculations are correct the most that each wire would have to take is 3 mA, and 3 * 8 = 24 mA for the Gnd return.

Grumpy_Mike:

The most current management I'm doing is switching it with the MOSFET which can take up to 9A

This means you will end up frying your shift registers.

I am having a bit of trouble down loading the data sheet for that FET, but almost certainly it is not a logic level FET and requires 10V to fully turn it on. You are supplying it with 5V and so it has a high, for a FET resistance. This is fine for small currents, but when a large current flows, with all your LEDs on the resistance drops a larger voltage and restrict what is flowing.

EDIT - just checked the data sheet and the FET is your problem, the Gate Threshold is only when the FET starts to turn on, not when it is fully on, you need 10V on the gate to get an on resistance of 0.4R which tells me it is a very old device newer devices have a much lower Ron ( resistance when on ) than this. So either boost the gate voltage or get another FET.

Can you elaborate on frying the shift registers?

Also you're right about the FET. I disconnected it from the Arduino and connected the gate to a 9V battery. HUGE difference. However, I measured the current at the output of one shift register pin (i.e. one LED) and it was like 1.5mA while lit. Not really sure what to make of that.. But with 9V driving the MOSFET I can could turn on 32 LEDs with comparable brightness to 8 LEDs. I'm thinking of buying some TTL mosfets, do you have any ideas what series to go with? Also how will changing the transistor affect the current? Right now I've been able to get away with no resistors between the shift register outputs and the LEDs

Can you elaborate on frying the shift registers?

well you can:-

Right now I've been able to get away with no resistors between the shift register outputs and the LEDs

This means that the only thing limiting the current is the output impedance of the drivers. That means they are supplying too much current. You don't need resistors because you are killing your shift register outputs.
Read this about LEDs and the voltage / current relationship. LEDs

Also how will changing the transistor affect the current?

Because the on resistance will be much lower and that allows more current to flow.

However, I measured the current at the output of one shift register pin (i.e. one LED) and it was like 1.5mA while lit.

I find that very hard to believe. Meters don't tell the truth when subject to any sort of oscillation or chopping.

any ideas what series to go with

Try the IRLB8478

So what should I do?

Buy some resistors?