Discrete multiplexed LED array not working as expected - (transistor related perhaps?)

Thread Starter


Joined May 26, 2019
Greetings everyone,
First off, I am a complete amateur who is learning on his own. So if I'm making an obvious mistake, I'm glad to be told so and I apologize for any oversight. This may also affect my terminology usage.

I am working on a project to help me learn as I'm a hands-on learner. I am building a 24x8 multiplexed LED array which I intend to use for displaying simple text etc. I intend to drive the LEDs with shift registers which in turn are run from an Arduino Nano. I have 4 shift registers. The first one has its 8 outputs connected to NPN2222A transistors which act as switches for enabling 5V, 1000amp power into the individual rows of LEDs. The remaining three shift registers also have their outputs connected to NPN2222A transistors, but these ones act as switches to enable the ground connections for the columns. The four shift registers are linked together with common clocks and the data is passed on from shift register 1 to 2 to 3 to 4, etc.

I am actually running into an issue which I can "reproduce" without having the shift registers and arduino in play, so we can ignore that complexity. I'm providing it simply for clarity. Based on the behavior, I believe it has something to do with how I've setup my transistors, but I believe it looks correct, hence I'm confused and reaching out for help.

A few more clarifying details.
  • The first 8 transistors have their collectors connected to the same 5V, 1000amp current that is feeding all other components. Their base pins are connected to the shift register outputs, with a 430ohm resistor between the shift register output pins and the base pin. Their emitters are connected to one of 8 rows of 24 LEDs (LED anodes).
  • The remaining 24 transistors have their collectors connected to the LED columns (LED cathodes). Their base pins are connected to the shift register outputs with a 430ohm resistor between the shift register and the base pin. Their emitters are connected to the same ground line that all other components are sharing.
  • A PDF of my schematic is attached. I apologize for any lack of skill that is apparent in how I've drawn it.
The Issue:
  • Basically in my testing, I've gotten very irregular behavior from the grid that seems relatively unpredictable. This has led me to testing without the shift registers, etc to find where the problem lies. I know that the multiplexed grid itself works as expected. If I apply 5V to a given row and then ground a given column (no transistors, just direct to the wires), the expected LED lights up. I only start having issues at the point where I've introduced the transistors and their base pin resistors.
  • If I manually apply 5V to a transistor that is controlling a row (which in turn switches on 5V to that row), and then apply 5V to a transistor that is controlling a column (which in turn switches on the ground for that column), I get no LEDs lit up.
I guess I'm not sure if that helps clarify what my problem is. As far as I can tell, applying 5V to a row transistor and to a column transistor should cause an LED to light up. But it doesn't. My schematic should accurately reflect my wiring, so perhaps a more experienced eye will notice something right away which is a problem. I do realize that my design is lacking resistors on the columns for the LEDs themselves. That was an oversight on my part and I'm working on resoldering a circuit that includes those. But I don't believe that should prevent the circuit from working.


Thread Starter


Joined May 26, 2019
Aha, after some experimentation, I think I discovered the issue. Insufficient voltage.

I used a breadboard to build the most basic structure of this circuit to test with as follows.

5V ---> NPN2222A ---> Blue LED ---> NPN2222A ---> Ground

Basically, what happens is that the blue LED drops the voltage below 5V. So when the second transistor comes into play to close the circuit, it has less voltage on the collector than is on its base pin. So it fails to successfully close the circuit.

It looks like I'd have a few options for resolving this:
  1. Use PNP transistors on the columns instead.
  2. Decrease the voltage on the base pins for the columns transistors somehow. Since the shift registers are running the transistors, and I'm powering them in parallel, I believe I can just throw an LED before the shift register vcc lines and they'll just run at a lower voltage and therefore feed a lower voltage to their outputs. Thoughts on that? This would be a minimal change to my existing circuit.


Joined Jun 19, 2017
Does your Blue LED need 3.3 Volts or more ?

What is the C-E Saturation voltage of the 2N2222's?

How are you limiting the current in the LED?


Joined Jun 19, 2012
Definitely change the high-side driver transistors to PNP.
This will require changing the program logic to active low, the inverse of what it is now.

Add current limiting resistors to each column.

The high-side configuration you are using now - "emitter follower" - will always have 0.6V drop, and will sag even more when loaded.

Your idea "reduce the voltage on base pins" makes no sense?
What is the problem with the low side?

Try illuminating just a few LEDs at once first, (low current) when you are sure it's working correctly, try more.
If more LED's causes the shift registers to glitch, you have the classic problem of a poor ground corrupting the logic signals- beef up the ground.