Matrix overcurrent concerns during reset

I have completed a simple two color 8x8 LED matrix project. The matrix is common cathode. I am using three shift registers (74HC595). Two for columns. One for rows. Row current is sunk through a ULN2803A. I am driving the display by going one row at a time and looping quickly to make all of the rows appear lit (this seems pretty standard). I am using very conservative resistor values. With my current design and the 12.5% duty cycle of each LED I estimate I can have a smaller resistor to get closer to the 20ma of current that will drive the display at full brightness.

My concern is this: any time I reset the Arduino whatever the shift registers were last latched to gets powered at full brightness at what appears to be a 100% duty cycle. If I use a small resistor that would be OK, but during reset at the 12.5% duty cycle it seems that it would blast my LED with a huge amount of current and break things. I attempted to wire a pull down resistor to my SRCLR pin on my shift register (and then set it to high in my setup() function), but it doesn't seem to be working. When I reset the device it still does the high power thing depending on when the main display loop gets interrupted.

I also toyed around with the output enable pin and enabling/disabling that, but I think this needs to happen (mostly) outside of my code. Can anyone give a concrete suggestion on how to send a for sure digital high or low signal wen the Arduino is reset? I have this circuit wired on a bread board. Pretend like I am absolutely clueless (I basically am) in your response so I can wire this up properly.

(BTW, my pull down design looks something like this: Pin 10 goes to one slot on the breadboard. I then have a 10K resistor and my SRCLR pin wired up there. On the other side of the resistor (same slot) is GND. If I am close or not making sense I am all ears on how to move forward).

Thanks :slight_smile:

The arduino pins all go to inputs on a reset.
I would add a pullup on the ROW '595 OE pin, control it with an arduino pin, and put pull down resistors on its 8 outputs.
Thus on reset it is not driving, the ULN2803 inputs are low and not sinking the cathodes.
SRCLR does no good until there is a clock to change the output register.
You could also look into TPIC6B595 from TI, combines the shift & drive into 1 chip. Output enable then actually controls the outputs, and you just need the 1 pullup resistor.

You probably have the MR pins of the 595s connected to +5v. A low on MR will force the outputs to logic 0, assuming the outputs are enabled.

CORRECTION: MR will only force the shift register outputs to logic low, not the latch registers. To get the latch register outputs low, you also need a low-to-high transition on the STCP pin as well. So a pullup on the OE pin as CrossRoads suggested is a better solution. However, I don't think you need pulldown resistors on the 8 outputs, because the ULN2803 has these built in.