I have a number of 8x8 RGB LED matrices. 8x8 RGD LED matrix

Each has 32 pins, and you could (barely) characterise them as common anode - all the anodes in a row are common, but so are all the Red, Green and Blue cathodes in each column.

In short, I don't know where the resistors should go: but I figure that 24 resistors on the cathodes is better than 8 on the anodes. The Red voltage drop is 2.2V, while both the Green and Blue are 3.3V - and all are reportedly 50 mA (max 70 mA) LEDs.

To avoid brightness "droop", do I (5V supply, 30 mA drive each):

  • Provide no resistors at all (I don't think so!);
  • Provide the maximum for 1 LED (100Ω for Red, 68Ω for Green and Blue);
  • Provide the minimum for 8 LEDs (12Ω for Red, 8.2Ω for Green and Blue);
  • Average the results (stuff it: 47Ω for the lot of 'em!)

Before you start, I don't want to use an LED driver like the MAX7219 or AS1107 - there are too many matrices, and I'm multiplexing the multiplexors already...

  • \$\begingroup\$ Are you scanning 1 color at a time or all 3? And there is another option. 1 68Ω on the Anode which would work for both blue and green, then a 40Ω on the red cathode. When the red is enabled, the two resistors will combine to 100Ω. 16 resistors instead of 24. \$\endgroup\$
    – Passerby
    Commented Aug 14, 2016 at 23:02
  • \$\begingroup\$ @Passerby I like the way you think! Food for thought... \$\endgroup\$ Commented Aug 15, 2016 at 8:57
  • \$\begingroup\$ @PasserBy (if you're still around; not, you know, passing by...) I've decided to go with your idea. Please turn it into an answer? \$\endgroup\$ Commented Aug 22, 2016 at 9:41

2 Answers 2


I would put resistors to cathodes here, because you might want to use different values of resistors for different colors. LEDs of different colors could have different forward voltage drop. And if you want the same brightness of all 3 colors you possibly will need different resistors for every color.


The thing with a matrix is it is both common anode and common cathode at the same time. You just have to pick one.

There are two sides to a matrix - the "swept" side (which is effectively your "common") and the "data" side. The "swept" side is activated one pin at a time, whereas the "data" side has all pins activated at once.

So say you choose to have a common anode arrangement - the "swept" side would provide power to each of the anode clusters in turn (pins 17 to 32 in your case) and you sink, or don't sink, the current through the cathodes (pins 1-16 in your case). Since the anodes are common and the cathodes aren't the resistors go on the cathodes.

You can do the opposite, too. You can sweep the cathodes (sinking pins 1-16 in turn) and source (or not source) to the 8 anodes. In this case the resistors go on the anodes. This means less resistors, but it does mean 3x the amount of time to sweep an entire frame since you have 16 steps instead of just 8 to sweep through.

So in short: the resistors go on the side that you designate as the data side.

  • \$\begingroup\$ I have never understood the "logic" behind where the resistors are supposed to go. As long as they're between Vcc and GND, then it shouldn't matter? But I understand what you're saying - avoid (as much as possible) multiple LEDs. \$\endgroup\$ Commented Aug 15, 2016 at 9:02
  • \$\begingroup\$ The common side must be a switched voltage that can handle 8x the average LED with all segments ON and not sag, hence lowest RdsOn practical... Caution Mux'ing LED's 8:1 cannot be done by taking 50mA max * 8 at 1/8 duty cycle \$\endgroup\$ Commented Oct 14, 2016 at 1:11

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.