# Running LED dot matrix using shift registers

So as the title suggests, I'm using 3 shift registers (74595) to run a dual colour LED dot matrix display by daisy-chaining them (I believe that's the term). I haven't got to the coding bit yet, but before that I'm having doubts about the current usage of the system. I'll be using an Arduino to run it, and I soldered the display and ICs on a veroboard without using current limiting resistors (oops). If I use a current limiting resistor before the first shift register, at the digital pin of the Arduino, will it work? I'm worried the entire system will draw too much current.

• No , tis wil not work you must place a resistor for each segment. The max current for the arduino is 500mA. Have you the name of the displays?. Commented Mar 25, 2016 at 8:33
• No I don't have the name of the display. Any idea how much current an average 8x8 dot matrix with 3 shift registers would draw? Commented Mar 25, 2016 at 10:25
• what if I use an external power source for the ICs? Commented Mar 25, 2016 at 10:32
• How is the current for the Arduino related to anything here? It's just driving a few pins on the shift register.
– pipe
Commented Mar 25, 2016 at 12:46
• Yeah I'm new at this, hence the confusion. The LEDs draw current from the corresponding shift register, and each shift register will draw that much current from the arduino right? Commented Mar 25, 2016 at 13:10

You don't say which 74595 you're using. On the 74HC595 datasheet I have, the maximum current from Vcc or Ground is 70mA.

So the Arduino's 500mA is not the problem. It is the total current handling capacity of the 74595's.

I'm assuming there is one 74595 for each 'column' of each colour, and one 74595 for the LED's common 'row'; it really doesn't matter if this is reversed, the issue is the same.

Then the 74595 driving the common (anode or cathode) of the LEDs is the biggest current limit. You'd actually be slightly better off driving the commons with two different ports of the Arduino. Used that way, the Arduino could supply more current than the 74595 (about 40mA one pin only from a port.)

With your existing wiring, you need to use resistors on all 16 'columns' of LEDs so that the total current is less than 70mA. This means I = 70mA/16LEDs, say 4 mA per 'column'. This should still be visible, just not as bright as possible using two ports of the Arduino to drive the LED commons.

Edit:
For an 8x8 Red and Green LED display, the current limiting dimension is the one with the most LEDs connected to it. So, if there are 16 LEDs connected to a row then drive that with the best driver you've got, i.e. an Arduino pin.

I'd probably replace the 74HC595 driving the LEDs common with a 'power' version of the part, for example a TPIC6595 (search the web for "high power 595 shift register", many manufacturers make an equivalent), and drive the row/column with the common 16 LEDs with that.

Alternatively, drive only one colour of LED at a time, so that the common row/column only needs to supply 1/2 the current. This would have a loss of brightness, but, if you've soldered everything together (and didn't use sockets), this should allow you to reduce the load on the shift register which is driving the common LEDs.

• Thank you. I'm using 74HC595. My display is common cathode, ie, I get the LEDs on when I give HIGH voltage to the common row. So what you're saying is I don't daisychain the shift register for one of the colours (columns)? Or do you mean don't daisy chain the common row? Commented Mar 25, 2016 at 13:06
• I have used sockets, and I believe I can make minor changes. So yeah, running one colour at a time works. Also, instead of running 8 common rows from a shift register, I'll run 4 common rows with 1 shift register, thus adding an extra shift register. Commented Mar 26, 2016 at 9:20
• You might find it easier to replace the 74HC595 driving the common LEDs with a 'high power 595 shift register' e.g. a TPIC6C595N, which can handle more current. Commented Mar 28, 2016 at 14:59