MAX7219 voltage to low (0.2V)


I'm trying to get the max7219 to work with a ESP32. On my oscilloscope I can see the data is being send to de max7219 chip, so that is OK.

I use 50K as iSet resistor and have the 2 100nf and 10uF capacitors at V+ and GND.

But when I measure V on DIG0 and SEGD, I get 0.2V when the digit goes on. When I provide 1.8 to the + of the LED and keep LED- to SEGD, the led blinks every second as I made it in the code. So the chip is doing something.

I must say I have 2 different batches which are both fake (the first one I knew, the second one should have been real based on the seller information....).

Why do I only get 0.2v ?

#include "LedControl.h"
LedControl lc=LedControl(D7,D5,D2,1); // data, clock, load, 1 MAX7219

// pin 12 is connected to the MAX7219 pin 1
// pin 11 is connected to the CLK pin 13
// pin 10 is connected to LOAD pin 12
// 1 as we are only using 1 MAX7219
void setup()
  // the zero refers to the MAX7219 number, it is zero for 1 chip
  lc.shutdown(0,false);// turn off power saving, enables display
  lc.setIntensity(0,8);// sets brightness (0~15 possible values)
  lc.clearDisplay(0);// clear screen
void loop()

  for (int a=0; a<8; a++)

  for (int a=0; a<8; a++)
    lc.setChar(0,a,' ',false);

Did you heed the warning about needing driver transistors for displays with more than 3 LED segments in series in the display?

ESP32 work on 3.3V but for MAX7219 from its datasheet - Logic High Input Voltage VIH 3.5 V min. Maybe ESP32 send data but MAX7219 do not receive it.

It appears things are not working because of hardware problems. Probably the best thing you can do to get help is post a schematic, not a frizzy thing. Also post links the technical data on each of the hardware devices, I assume you read them. How do you know they are fake?

In practice, the MAX7219 generally works perfectly well operating from 5 V when fed with 3 V logic from an ESP.

please post:

  • a schematic
  • real pictures of your setup so we can identify each and every wire(!)
  • a FULL working code (the code you provided will not compile)
  • the link to the library you are using

Max7219 is intended to drive common cathode displays (it will also drive common anode displays, before anyone mentions that!). So I think the SEG pins are expected to be connected to led anodes (+) not cathodes (-).

Paul, I did not read that warning. But I'm trying to light up just 1 B segment for Digit 0, as a test. Even that won't work (getting the 0.2v)

Flashko, I did not provide the correct information. I use a NodeMCU, and take that 5v. But I will take a look at the data signal, which might be to low? Can I use a transistor to switch the 5v and use that as data input? Although Paul says it should be fine? I do see that the 7219 changes it behavior based on what I tell it to do. It only provides 0.2v instead of the +-1.8 I desire.

Gilshultz, I read the technical data 10 times I think. But I'm still a Software developer, trying to speak hardware :slight_smile: I know they are fake due to their appearance (missing a specific dot, ending pins are cut off, etc.).

You can see the transfer from 0 to 0.2v on the oscilloscope. The top led is on, since I use 3.3v directly as an input for this led.

The 0.2V measurement could be a red herring. LEDs are current controlled devices and the max chip's pins are designed to provide a constant current to them. When active, the max chip's SEG pins will source current and the DIG pins will sink current. When not active, both SEG and DIG pins may well simply float, and measuring their voltage would be meaningless.

So maybe it would be more meaningful to measure the voltage drop across a led connected between a SEG and a DIG pin. Don't expect to see 5V, all you will see is the forward voltage of the led, so around 1.8~2V for red LEDs for example.

When I measure the working led (the one on the top which is lighted) on the led pin itself, i see 1.8v and 0.8v (switching each second, as told by the software). But when I disconnect the + from the 3.3v and put it in the DIG0 pin from the 7219 (and keep the - on the SEG-A of the 7219), I see 0v and 0.2 v (switching each second, as told by the software).

edit, I was wrong. I did not measure 1.8 and 0v on the working led. I measured 1.8v and 0.8v. Is my grounding wrong?
I did a test, connected DIG0 to + of the led, the - led directly to GND of the NodeCMU. That did not change my readings; 0v and 0.2v, alternating each second.

Apologies, I used the expression "red herring" but did not explain it. It means a false clue. Measuring the change in voltage may be meaningless because, I suspect, when the SEG or DIG pins are inactive, their impedance is high (they are not internally connected to 5V or ground) so measuring their voltage when inactive is meaningless.

No Problem! I can see the altering voltage. What does that explain/mean? I do expect to see that, based on the software code. I only expected to see 1.8v and not 0.2v.

Where should I look for mistakes?


I updated the code to include the #include.

Probably the best thing you can do to get help is to post a schematic, not a frizzy thing. Also, the post links the technical data on each of the hardware devices, I assume you read them. quickpayportal

How do you know they are fake?

who can check this mess of wires?
start with a clean breadboard, the nodemcu, the max, the resistor & the caps for the max and ONE single LED connected to dig0, segA.

then do a testsketch and blink all "digits". if the LED is not blinking, your wiring is still wrong - post an updated image.

Did you Google;

esp32 max7219 7 segment

Also look at the "RandomNerd" site.

Tom... :smiley: :+1: :coffee: :australia:

Thanks all, I will fix all these somewhere these weekend and post new photos + documentation as asked.

Please don't call it a mess, I'm trying.. :wink:

It took me some time. But i cleaned up the board and created a schematic.

What I notice:
the working led gets it + directly from the +5v (via resistor) and having its ground connected to the segmentA of the max7219 chip. This works! I see the led going on/off in the expected rhythm.

But the "nothing" led gets the + from the digit0, having its ground also to the segmentA, but the led stays off.

On the spectrometer (connected to the + (= digit0) of Led "Nothing" and ground directly, I can see the expected rhythm.

This tells me the chip understands what it needs to do, but does not provide enough power to digit0 ?