Arduino electronics

MAX7219 and LED matrix power requirements

Parola_ModuleA recurring question is how much current Parola (and similar) modules use, and can how many can be directly powered from the Arduino 5V power supply. The answer is that it depends – but on what, exactly?

I thought I would try an experiment and actually measure the current usage and answer the question to my satisfaction. I used my Parola module (forum discussion) as the test device, but this is similar to the more generic modules and I believe the results are transferable.

The main point of the questions is to know now many modules can be strung together before an external power supply is required, so I set out to understand the power usage of 1 module when different numbers LEDs are on at different intensity levels.

The MAX7219 has a resistor that sets the maximum current supplied to the matrix (RSET in the datasheet). My matrix has VLED ≈ 2V (red LED) and RSET = 62k, so according to the MAX7219 datasheet values (Table 11, below), I am expecting around 10mA per segment (which is a single LED in the matrix).


Most of the cheap generic modules have very low values for RSET, which would significantly increase the power/current required by the module. This seems to be 10kΩ for the eBay specials, for a segment current exceeding 40mA, the specified minimum value for RSET in Table 11 being 11.8kΩ for VLED = 2V.

A standard digital multimeter was used to measure the current into the module, so readings will be average values rather than peak. I also wrote a sketch (below) to systematically step through the various combinations of LEDs and intensities.

// Use the MD_MAX72XX library to test current usage of a display module
// Set various configurations of the display to allow current measurements
#include <MD_MAX72xx.h>
// Print a string followed by a value
#define DISPLAY(s, v) { Serial.print(F(s)); Serial.print(v); }
// --------------------
// MD_MAX72xx hardware definitions and object
// Define the number of devices we have in the chain
#define MAX_DEVICES 1
#define CS_PIN 10 // or SS
MD_MAX72XX mx = MD_MAX72XX(CS_PIN, MAX_DEVICES); // SPI hardware interface
// --------------------
#define WAIT_TIME 5000
// ========== Control routines ===========
void setup()
 DISPLAY("\n","[Matrix current test]");

void loop() 
 for (uint8_t intensity=0; intensity<=MAX_INTENSITY; intensity++)
   mx.control(MD_MAX72XX::INTENSITY, intensity);
   DISPLAY("\nIntensity ", intensity);
   DISPLAY("\n", "\tBlank");

   for (uint8_t row=0; row<ROW_SIZE; row++)
     DISPLAY("\n\tRows ", row+1);
     mx.setRow(row, 0xff);
   for (uint8_t col=0; col<COL_SIZE; col++)
     DISPLAY("\n\tColumns ", col+1);
     mx.setColumn(col, 0xff);

As you can see in the code, I originally also checked turning on columns as well as rows. However, I ended up discarding the column values as the results were completely symmetrical between number of rows and number of columns.

The table below is the data collected (mA) at Supply Voltage 4.9V and RSET 62kΩ.

Int  0R  1R   2R   3R   4R   5R   6R   7R   8R
 0  2.6  2.9  3.0  3.4  3.7  4.0  4.3  4.5  4.8 
 1  2.6  3.4  4.2  5.0  5.9  6.7  7.5  8.3  9.1
 2  2.6  4.0  5.3  6.7  8.0  9.4 10.8 12.1 13.5
 3  2.6  4.5  6.4  8.3 10.2 12.1 14.0 15.9 17.8
 4  2.6  5.0  7.5  9.9 12.3 14.8 17.2 19.6 22.0
 5  2.6  5.6  8.5 11.5 14.5 17.4 20.4 23.3 26.3
 6  2.6  6.1  9.6 13.1 16.6 20.1 23.6 27.0 30.4
 7  2.6  6.6 10.7 14.7 18.7 22.7 26.7 30.7 34.6
 8  2.6  7.2 11.8 16.3 20.8 25.3 29.9 34.3 38.8
 9  2.6  7.7 12.8 17.9 22.9 28.0 33.0 38.0 42.9
10  2.6  8.3 13.9 19.5 25.0 30.6 36.1 41.6 47.1
11  2.6  8.8 14.9 21.0 27.1 33.2 39.2 45.2 51.1
12  2.6  9.3 16.0 22.6 29.2 35.8 42.3 48.8 55.2
13  2.6  9.8 17.0 24.2 31.2 38.3 45.3 52.3 59.2
14  2.6 10.4 18.1 25.7 33.3 40.9 48.4 55.8 63.2
15  2.6 10.9 19.1 27.3 35.4 43.4 51.4 59.4 67.2

With no LEDs on, the current drawn was 2.6mA. With all LEDs at maximum brightness setting it was around 67mA.

These are graphed below.

Current vs Rows - Click to Enlarge
Current vs Rows per intensity – Click to Enlarge
Current vs Int
Current vs Intensity, per rows – Click to Enlarge

Results confirmed by the measured data:

  1. The current is linearly proportional to the number of LEDs lit, irrespective of whether the LEDs were rows or columns.
  2. The current was linearly proportional to the intensity setting of the LEDs.

What does it all mean?

According to Table 11, given a red LED segment voltage 2V, RSET of 62kΩ gives a segment current of just under 10mA, making it 80mA for a row.  So 67mA is close to the tabled value for a single row.

Assuming that we will be running at half brightness (the Parola library default) and that around 24 LEDs (3 rows) are on at any one time for a scrolling display, then the total current per Parola module will be 14.7mA. Many of these modules can therefore be ganged up before the Arduino power supply runs out of puff and external power is required.

An ‘eBay special’ with RSET of 10kΩ under the same conditions could draw up to 20mA per LED (at half brightness) for 24 LEDs, giving a total of 480mA. In practice these matrices need to be run at a lower brightness as they are too bright, so assuming quarter brightness level (10mA), the current is about 240mA, which is close to the current requirements attributed to these modules in various forums.

8 replies on “MAX7219 and LED matrix power requirements”

Those modules should work as FC16 module type. You don’t mention what library you are using so I assume it is MD_MAX72xx or MD_Parola. Make sure you have specified the right module type and the correct number of modules when initialising the library. I would also check to make sure the electrical connections between the modules is not broken somehow.


I have 7 8×8 led matrix modules daisy chained together.
I have a scrolling text working perfectly across all of them for about the first 2 minutes.
As it continues to scroll I will lose an entire matrix where no leds will light up so it skips that matrix. I lose more and more matrixes as I continue scrolling the message.
Now I am only scrolling across 3 of 7. From left to right only the 1st, 5th and 6th show scrolling letters. Is this due to a lack of power?


I ran into the same problem and it was my PSU didn’t supply enough power, so some individual units would reset. Solved it by sending power limitation commands at boot time (see the specs of MAX7219 for the code to send to the displays), and after some software tinkering I got it to work ok.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s