MAX7221 x 16 - how do I power this crazy thing?

First of all, here is what I'm building:

It's a multi-touch music controller. The black stripes down the middle of each column are touch-sensitive strips. The leds provide visual feedback of touch input as well as displaying animations based on the host music software. The real thing will use just one color of led, not 2-color as shown in the concept sketch.

I have built a little prototype with Arduino and code from Tomek, Wayoda, et al, modified:

xenome: meanwhile, back at the lab... - YouTube (watch all the way to the end to see the touchstrip in action)

Now I have designed a couple of circuit boards:

The first board holds 112 10-segment led bar-graph arrays. 7 in each column = 70 leds, then I leave the top 3 and bottom 3 out of the circuit to get 64 LEDs per column.

The second board holds 16 MAX7221 driver circuits. I've routed the traces to the edges of both boards so I can stack the led board on top of the driver board and connect them together with header pins/sockets.

Now I need to figure out how much power this will need and how to build a power supply.

I found this power supply cookbook on MAXIM's site: , but I'm not sure what I need. I saw elsewhere on this site that I will probably need 3 Amps to power all of the MAX7221s, but I'm not sure how this will work, exactly. Do I need to route 4.5V to each MAX7221 individually? Should each driver circuit be on it's own ground plane/power plane, or can they all be connected together? Is there an off-the-shelf power supply that will work for the prototype? Any and all help appreciated as I am into this thing WAY over my head! :o

Note: I see some people on this site are working on projects driving large #'s of LED so hopefully this will be useful/inspirational/cautionary for others.


you can get DC powers supplies in all shapes and sizes. Try Jameco. You can also usually find a power supply around the house in some non-working electronic device.

Not sure about your current requirements, but a couple of tips:

  • make the power traces as wide as possible at the power supply connection. they can narrow as they feed successive chips. This is sort of like how the water system works: big huge pipe feeds local pipe, to smaller pipe into your house, then small pipe to your sink.

  • Us a PCB trace current calculator. These are on the web, just Google that phrase and it will tell you the current capacity of a particular trace width.

  • use lots of bypass capacitors. Switching large currents causes larger transients in the power supply line, so you wil need at minimum a .1uF cap very close to each MAX chip.

If you can't be bothered to figure out the current requirements, you could just plug in a single MAX chip and display, measure the current drawn and multiply by the number of chips/displays, then order the power supply.


Cool, thanks for the great info…

My driver circuit board is 4-plane, with a power and ground plane, so it doesn’t have individual traces for the power. Is this the wrong way to do it?


If you zoom in a lot, you’ll see I have all the MAX7221 V+ connected to a common power plane, and all the grounds connected to a common plane. Then I have a .1 uF cap connected from each MAX7221 V+ to the ground plane.

I suspect this might be wrong. Should I break these up so they each have their own power and ground?

As far as current requirements, the datasheet for the MAX7221 says typical draw for “all segments on” is 330 mA - so multiplied by 16 / 1000 = 5.28 amps - does that sound right? According to that logic I’m looking for a wall wart that outputs 5.5 VDC at 5.28 Amps. How exact does it have to be? I see some out there for instance that are 6 Volts - so do I just add a resistor to lower the voltage to 5.5 Volts? Hmm - maybe this could be variable so I can set the brightness…

Also, I won’t often need all the LEDs to be on at once, so if I go for lower amperage I wonder what would happen if I did try to light all the leds…


you need a regulated supply of the exact voltage that the chips need. No dropping voltage by tesistor, which is a bad idea, as the voltage drop fluctuates with current.

Re the board, you need thick power traces. I’m not a PCB expert, but from what I can see you are daisy-chaining a thin wire form one chip to the next. From the power connector to the first chip you will have 5 amps flowing through the + and ground traces. From the first chip to the second, you’ll have something like 4.5A through the traces… and so on.

I remember reading somewhere that traces on internal layers have 1/6th the power capacity of external traces. Makes sense, as they’re not exposed to air.

Have you tried googling for <PCB & trace & power & design> ? There’s also always a whole shelf of books on this in any university engineering library…


I found a reasonably priced power supply online that is a line-wart with 5V/5A and a 5-pin DIN connector.

(scroll down to the 3d item in the catalog)

This combo actually seems pretty rare after poking around for it for a long time. I'm not sure if it's regulated but I'm guessing not. A lot of the psu's with this rating are big and have fans and stuff - I was hoping for something that would fit in the case or be a wall wart...

Do you mean thin traces on the LED board or the driver board?

Re: thin traces on the LED board, is it really necessary to go more than .010? Each LED gets a pretty small current. I have plenty of room to go bigger on that board if it's necessary, tho.

Re: thin traces on the driver board, do you mean the traces to the SEGA, SEGB, DIG0 pins on the 7221? Or just to the power supply?

See, the driver board is a 4-plane board with a power and ground plane sandwiched in the middle. The only traces connected to power are the fat y-shaped ones - they are connected by a through-hole pad to the power plane - they show up as a pad with a + or - on top depending. Then I have a pair of these pads at the lower right edge of the board, also connected to the 2 planes to connect the power supply to.

Am I using the 4-plane the right way?

I mean you need thick traces to the power supply pins of the chips.

Do some research: Google, and perhaps make a trip to that library, as there's more to PCB design than can be said in a few posts.


I’m taking your advice and googling away about PCB design and trace widths and I have a ton to learn and read - for now I am just kinda hacking this together as proof-of-concept - I should probably hire someone to do it but have minimal funds and heck, it’s fun - when prototype is done I plan to go back and do it all over with hindsight.

Library is a good idea - the book I have on PCBs is from 1957 or something.

Thanks so much for your guidance and help so far!

I’m already reading that my bypass capacitors should be connected directly to the planes, not thru traces…

why do a 4-layer board? They cost a lot more, and there are more chances to make mistakes too :slight_smile:



As far as current requirements, the datasheet for the MAX7221 says typical draw for "all segments on" is 330 mA - so multiplied by 16 / 1000 = 5.28 amps - does that sound right?
Also, I won't often need all the LEDs to be on at once, so if I go for lower amperage I wonder what would happen if I did try to light all the leds...

The MAX7221 work like this:
It lights up a group of 8 Leds for a short period of time ,depending on the data you set for these led's. Then it switches this group off and goes to the next group of 8 Led's and so on.
Since all this is done at a rate of 800Hz, the human eye cannot recognize the flicker. If you tell the the MAX7221 to switch on all of the 64 Led's, it will look like all of them are powered the whole time.
But as mentioned a maximum of only 8 Led's are switched on, i.e. require a supply current, at any given point in time.
So, how much current will the project draw :
Take a look at the datasheet for the Led's you are using. It will state a typical Forward Current for the Led, and a Forward Voltage.
Since only 8 Led's are switched on, by a single MAX7221 here is the maximum current for the project:

MaxCurrent=(NumberOfLedsInaGroup * LedForwardCurrent ) * NumberOfMax7221
A typical ForwardCurrent for an Led would be 20mA.
So that would require:
MaxCurrent=(8 * 0,02A) * 16=2.5 A

You will get this amount of current out of most switched walwart-powersupplies which are available in a lot of shops. There should be no need to build one ourself
(Hands off mains if you don't know what you are doing!)

P.S. Project looks cool!

MaxCurrent=(8 * 0,02A) * 16=2.5 A

That is great news! In the back of my mind I was thinking something similar might be the case. I was kinda bummed thinking I was going to need 5+ Amps of current for this little gizmo.

why do a 4-layer board?

You're right it is a lot more expensive (almost twice for the proto) - I was figuring since I had so many traces to run for the signals that the 4-layer would simplify power delivery, in terms of routing. Now that I've been through it once though I see now how I could get away without it. But the articles I'm reading about EM and RF and board design actually encourage multi-layer and ground and power planes because they help with these issues. Must. Read. More.

Thinking more about power requirements, I'm wondering: "how low could I go?" I'm imagining somehow flipping between the 7221's the same way a 7221 flips between leds - e.g. send current sequentially to the 16 drivers at some frequency below 800Hz, but still fast enough that the display would appear relatively flicker-free. I mean the refresh rate of my monitor is only 60Hz, so maybe 800Hz is higher than necessary? And I have noticed I can change the brightness of the leds depending on the length of my loop in the firmware - need to investigate this further.