Go Down

### Topic: Understanding the components of a LED matrix (Read 7256 times)previous topic - next topic

#### M4573R

##### Dec 24, 2012, 11:33 am
I'm looking into making an 8x8 LED matrix. My eyes are almost burning from the amount of googling I've been doing. The most common parts that pop up all the time are the 74HC595 and the ULN2803A. The biggest hurdle is dealing with the current drain. Taking a look at this tutorial for the 74HC595 (http://arduino.cc/en/Tutorial/ShiftOut), I've realized that powering all 8 LEDs with only 220 ohm resistors would be far over the limit of the  chip, which appears to be a maximum of ±70mA (http://www.sparkfun.com/datasheets/IC/SN74HC595.pdf). In a row-scanning matrix, the ULN2803A can sink 8 LEDs worth of current on a single pin, but it can handle 500mA, so that's fine (http://www.sparkfun.com/datasheets/IC/uln2803a.pdf). However, if each LED in the row is on, the 74HC595 still has to source 8 LEDs, 1 per pin. Why don't I see any examples or tutorials using a bunch of PNP transistors (differences to MOSFETS?) between the shift register and the LEDs to handle the current? Apologies for the noob questions. I'm trying to determine if I need to order a bunch of transistors to make my matrix. Thanks for any help!

#### Riva

#1
##### Dec 24, 2012, 11:50 am
What chip(s) you need depend on what you want.
Are you talking about a 8x8 RGB, bi-colour or single colour matrix?
Do you need to dim individual LED's within the matrix or whole matrix dimming with simple LED on/off?
Don't PM me for help as I will ignore it.

#### Grumpy_Mike

#2
##### Dec 24, 2012, 11:56 am
Quote
Why don't I see any examples or tutorials using a bunch of PNP transistors (differences to MOSFETS?) between the shift register and the LEDs to handle the current?

Two reasons:-
1) Depending on how you scan the matrix you might have a ULN2803A sinking 8 LEDs but only one pin sourcing the current for one LED at at time. As described here:-
http://www.thebox.myzen.co.uk/Workshop/LED_Matrix.html

2) There are a lot of moron tutorials out there. Some don't even use resistors to limit the current in the mistaken belief that because it is multiplexing there is no need to. This is wrong. See:- http://www.thebox.myzen.co.uk/Tutorial/LEDs.html

#### M4573R

#3
##### Dec 24, 2012, 12:58 pm
That is quite a helpful tutorial! However I still don't understand how you'd only ever source or sink 1 led as a worst case. Wouldn't the worst case be that each chip could be handling 8 LEDs, just one is per pin, and the other is a single pin? Take the last line in the row-scan example: each LED in the row is lit. That's 8x20mA sourced on a single pin (the walking bit), and 20mA sinking on each column. If those were connected straight to the arduino, wouldn't that be a dangerous 160mA? I feel like I'm misunderstanding some fundamental step here :~

This will be a single color matrix with no dimming for clarification.

#### Riva

#4
##### Dec 24, 2012, 01:22 pm

This will be a single color matrix with no dimming for clarification.

Then have a look at this article http://playground.arduino.cc//Main/MAX72XXHardware You cannot get much simpler than using a MAX7219 as it takes care of all the row/column scanning for you and only needs a single resistor to set current limiting. They are cheap to buy on ebay and so simple to use I made this http://arduino.cc/forum/index.php/topic,118338.0.html as my first arduino project.
Don't PM me for help as I will ignore it.

#### Grumpy_Mike

#5
##### Dec 24, 2012, 01:44 pm
Quote
That's 8x20mA sourced on a single pin (the walking bit), and 20mA sinking on each column.

No it is the walking bit that needs the help in sourcing or sinking the current. So 20mA sinking is fine but 8X20mA sourcing needs extra help.
Normally on an arduino you can choose if you want to supplement  the sourcing or sinking capacity. Then the way it is scanned is chosen so that the low capacity current pin only carry the current for one LED.

Quote
If those were connected straight to the arduino,

Yes so don't.

#### Hippynerd

#6
##### Dec 24, 2012, 09:04 pm
Technically, you can make a single color 8x8 matrix without any ics. You use 16 arduino pins, 8 resistors, and 64 LEDs. I've made a 64 LED cube (4x4x4) with 64 LEDs, 4 resistors (16 resistors works better), wire, solder, and an arduino.

You can also do this with charliplexing, You could even do this with RGB LEDs if you use charlieplexing. Check out asher glicks charliecube.
http://aglick.com/charliecube.html
Im working on doing some documentation for this, he shows you what you need to accomplish, but not so much about how to get there, and its a bit tricky.
Technically, this design should be doing damage to something Im unclear on weather its the LEDs or microcontriller at risk, but I've been running them over a month, without failure, and no appreciable differences in brightness or color, or speed.

If you really want to use shift registers, then you should check out ShiftPWM:
http://www.elcojacobs.com/using-shiftpwm-to-control-rgb-leds-with-arduino/

I made a few examples that ran straight off the arduinos 5v pin, plugged into a 5v USB phone charger (about 500mA), I only ran them for a couple days, and technically its probably too much current for the arduino, so it *may* be doing some kind of damage.

Have you considered constant current drivers? They make chips just for controlling many LEDs, it makes things a lot easier, less stuff to deal with, less stuff to screw up, and tidier too.

If you want more examples of people using multiplexing with transistors, also check out cubes, and LED strips.

Im still trying to figure out sinking and sourcing to my 2 other cube setups (one with shift registers, one with constant current driver), but I've been busy with other things. The charliecube was a lot of work soldering, but I had it working within a week, my other cubes are still not finished, and I started them over a month ago.

#### M4573R

#7
##### Dec 24, 2012, 11:05 pmLast Edit: Dec 24, 2012, 11:19 pm by M4573R Reason: 1

No it is the walking bit that needs the help in sourcing or sinking the current. So 20mA sinking is fine but 8X20mA sourcing needs extra help.

What I'm trying to get at is that I can't source OR sink with a 74HC595 since 8x20mA on one pin is too much, and 20mA on 8 pins is also too much. I'm completely new to this, so if I am not understanding some fundamental rules of current flow, I apologize.

Technically, this design should be doing damage to something Im unclear on weather its the LEDs or microcontriller at risk, but I've been running them over a month, without failure, and no appreciable differences in brightness or color, or speed.

That is a bit settling, but it's what I'm trying to avoid, hehe.

#### dhenry

#8
##### Dec 24, 2012, 11:58 pm
Quote
20mA on 8 pins is also too much.

It isn't too much unless you are building for NASA.

In that case,  you can add a swich (npn/pnp, depending on your design) on the 595's output.

#### M4573R

#9
##### Dec 25, 2012, 12:03 am

Quote
20mA on 8 pins is also too much.

It isn't too much unless you are building for NASA.

In that case,  you can add a swich (npn/pnp, depending on your design) on the 595's output.

The 595 is listed as 70mA max current across the chip, how long should I expect it to last?

#### dhenry

#10
##### Dec 25, 2012, 12:20 am
At 20ma/pin, it will outlast all of us, by a few multiples.

#### M4573R

#11
##### Dec 25, 2012, 12:28 am

At 20ma/pin, it will outlast all of us, by a few multiples.

To be clear, we're talking 20mA per pin on all 8 pins at once, double the chips rated current. If that's true, I could use the 595's and a 2083 to even extend this to a 4x4x4 or 8x8x8!

#### dhenry

#12
##### Dec 25, 2012, 12:30 am
Quote
If that's true,

You can easily try it.

#### M4573R

#13
##### Dec 25, 2012, 01:12 am

Quote
If that's true,

You can easily try it.

I can try a lot of things! But I'd like to save my wallet from burning through chips and my mind by saving hours of debugging related to things like this.

#### Hippynerd

#14
##### Dec 25, 2012, 01:25 am
Since you are talking about an 8x8 multiplex, thats a total of 16 control lines, you can do that with just resistors and LEDs, multiplexing is good enough.

If you want to reduce your control lines you can do that by serializing the data, but with this size you are not saving a lot, unless you serialize both at the same time (16 pins to 3 pins, vs 16 pins to 6 pins). It seems like you should be able to use 2 shift registers (one for source, one for sink).

Since you will only have 1 row on at a time, you have a 12% Duty cycle, so they may not be as bright as if you just have them on. If you want them as bright as each one can be, then you could serialize all the anodes or cathodes to 64 pins through 8 shift registers and 64 resistors. You can then have 100% duty cycle.

If you wanted do 100% duty cycle, but didnt want to do the resistors, you could use constant current drivers, heck, you may even be able to find a single chip to solve that.

The ShiftPWM demo runs 3 shift registers to 24 resistors to 8 RGB LEDs (thats 3 diodes per LED). Its sinking or sourcing up to 480mA through 3 70mA devices.  So, in theory, it could source or sink 480 through something rated for 210 or about 225% of its rating. I personally have only run it for a few days, but I had no problems, It theoretically could be doing damage, but I dont know how long it takes to fail, days, weeks, years, its hard to say.

The charliecubes I have running over a month are pretty crazy, thats 192 LEDs running on an arduino, with no other parts. Its just crazy, thats almost 4 amps if the leds were fully driven at 20mA each (64 RGB LEDs = 192 LEDs @ 20mA each= 3840. This all runs from a single arduino, on a 500mA usb power supply, so there is no way its using 3840mA.

here are some things that I have tried: