Shift Register or LED Driver

Hey Everyone,

I am running into some problems with my shift register and I have some questions. I am currently running an UNO to control my common anode 7 segment display with the SN54HC595 shift register. I am powering the leds with a different power supply so I am using the SN54HC595 to sink the current. To start off I have a couple questions with this shift register.

I have 9V applied to each led and each led has a 560 Ohm resister. Each led is connected to a pin on the shift register. To toggle the led on I obviously have to pull the pin low to ground. My question is, since I have to toggle the pin high to turn it off does that mean when I pull the pin high my +9V will have a direct connection to my +5V that is powering the shift register from the UNO? Because when I unplug the uno and maintain power to my leds through my 9V supply my UNO stays on due to what I am guessing could be the power connection of the pins pulled high through the shift register? If thats the case how would I fix it?

Also with these shift registers my hope is to "set and forget" so I free up my processor for other processes (it will be a big project and the leds will not be always changing). That should work correct due to them having latching capabilities?

Due to the amount of leds in this project I need multiple shift registers. However the leds are broken up into different sections so I decided not to daisychain every shift register in series as it would cause too much of a delay to light up the last bit. Basically delay of one shift register X 10 on the last bit is something I want to avoid. However I need to use the least amount of pins as possible. My idea is to have an dedicated CLOCK and SERIAL pin for each shift register but a shared LATCH Pin between them all. I figure I can pull the latch pin high and low as much as I want on the shift registers I am not trying to update so long as I don't touch their CLOCK and SERIAL pin correct? So if I want to write to Register 1, I address the CLOCK and SERIAL pin for that register and toggle the LATCH pin. Register 2, even though connected to the shared LATCH pin, should still maintain its current states since I did change anything to its own dedicated CLOCK and SERIAL pin right? This would allow me to cut down from 30 required pins to 21 if that works while maintaining individual control of each shift register.

I have been reading that an LED driver would be best for constant current sourcing however if I am only powering 2ma leds on each pin (aside from the common anode 7 segment display 20ma leds) would it not be best to stick to the shift register as its far cheaper and only get LED drivers for the 7 segment display? I am sinking every led by the way.

Also when I am controlling the 7 segment display I get some really faint ghosting on the off leds. I am not multiplexing it and I have a delay of 5 seconds before it updates again so it really shouldn't cause ghosting due to the delay and not constant switching right?

Sorry for the long post and thanks in advance!

The 9V will damage the shift registers, and perhaps the Uno too. The high voltage may be causing your ghosting problem also. You should use tpic6b595 (or tpic6c595). These have a higher voltage rating and open-collector outputs.

You should daisy-chain them. Then only 3 Arduino pins will be needed. I don't understand your concerns about daisy-chaining. Your point about delay makes no sense to me, I think you must have a misconception about how they work. The time taken to update 100 shift registers would be too small to measure except with specialist equipment. There would be no delay between the first and last registers in the chain updating because they all update their outputs at the same time, when the latch signal tells them to.

Using led drivers would save the need for series resistors for each led/segment. Some also allow brightness control through your code.

Okay thanks! for some reason I assumed the shift register would be open collector

As I understood the delay to shift the data out is dependent on the microcontroller speed so it would take about 500 nanoseconds to write 8 bits to a shift register with each one daisychained causing 500 nanoseconds longer of delay. My main concern was a huge amount daisychaining might cause a noticeable delay but I suppose looking at it now it really isn't that big of a delay for what I am trying to accomplish. I wanted to separate the shift registers controlling them so it wouldn't have to cycle through the earlier shift registers but I suppose i need to save space. I did realize that the latch is nearly instant once you toggle it and delay difference down the line is next to nothing.

Still learning about led driver so I didn't realize you could cut out the resisters. Ill have to see how I can apply it to my circuit.

Thanks once again!

7459*6* has open collector outputs, but I suspect that chip isn't easy to find these days.

Separating the chips would have made little difference to the time it takes to shift out your data. If anything, it would be slightly slower. It's the same amount of data either way, but you would have many latch lines to control instead of just one.

Still learning about led driver so I didn't realize you could cut out the resisters

With a shift register you can't, only with a driver chip that has current limiting functions.

Each shift register needs a 0.1uF ceramic capacitor solderd between the power and ground pins.