When using MAX7219, I am having trouble because the LED is dark

[Explanatory image of wiring for LED lighting]

When power is connected to LED A, 20mA will flow at 100R.
This is not a problem. It shines brightly.

On the other hand, the output of the MAX7219 draws only 4mA when LED B is lit.
I control the MAX7219 with ESP32 and set it to shine the brightest.
When I measured the current of the MAX7219's ISET resistor, it was 0.28mA.
Apparently, the MAX7219 allows 100 times more current to flow through the LED than the ISET resistor current. In other words, LED B should be able to flow 28mA.
However, only 4mA flows and the light is dim.

why?
How can I get 20mA to flow to LED B?

This is a question about lighting one LED with the MAX7219. It is not an 8x8 dot matrix.

The MAX7219 is stated to be able to flow up to 40mA per segment.

When connected as shown in the attached photo, a maximum of 40mA should be able to flow through one LED.
However, when I measure it, only 4mA flows.
If I use the <MD_MAX72xx.h> library, will only 4mA flow?

#include <MD_MAX72xx.h> library is used to light only one LED at maximum brightness.

    #include <MD_MAX72xx.h>
    void setup() {
      Serial.begin(9600);
      mx.begin();
      mx.control(0, MD_MAX72XX::INTENSITY, 15);
      mx.setColumn(0, 0, 0b10000000);
    }

This connects pins 9 and 13 of 1088AS to MAX7219, and only the bottom right one of 1088AS lights up.
In the photo, LED B is connected to GND and pin 9, and 4mA flows.
Similarly, if LED B is connected to pins 9 and 13, 4mA will flow.

Even though the maximum brightness is set to 15, the intervals between pulse outputs are wide. In other words, LEDs don't shine brightly.
Why are the pulse intervals so wide?

You need to set the intensity to MAX and the SCAN_LIMIT to 0

The LED should be connected between DIG0 and one of the SEG pins

Thank you for your reply.
When I set SCAN_LIMIT to 0, it glowed brightly.
The first digit LED below lit brightly.
mx.setColumn(0, 0, 0b10000000);

But a new problem arose.
The 8th digit LED below does not light up.
mx.setColumn(0, 7, 0b00000001);
Because SCAN_LIMIT is set to 0, only the first digit lights up.

When SCAN_LIMIT is set to 7,
mx.setColumn(0, 7, 0b00000001);
will shine. But it's dark because it scans 8 digits.

mx.setColumn(0, 7, 0b00000001);
When lighting this LED in the 8th digit,
I would like to scan only the 8th digit.

When lighting this LED in the 8th digit,
I would like to scan only the 8th digit.
You can't. The choices are 1,2,3,4,5,6,7 or 8 digits. You can't do 1 then skip 2...7 and go to 8

Are lighting a single LED or an 8 digit display?

Multiplexing. Max7219 is a multiplexing LED driver. What you see is normal.

If you need the leds to be as bright as when 20mA flows, you must use non-multiplexing drivers.

Connect 30 LEDs to the MAX7219 and light only one of them.

My desired behavior is essentially the same as the example below.
This is the same as using an 8x8 dot matrix and lighting only one of them brightly.
Or, it is the same as lighting only one segment of the 8th digit of an 8 digit display brightly.

mx.setColumn(0, 7, 0b00000001);
This is the 8th digit lit, so SCAN_LIMIT must be 7. However, if you do that, it will be a 8-digit scan, which will result in a dim light.

mx.setColumn(0, 0, 0b10000000);
This is the first digit, so if you set SCAN_LIMIT to 0, it will scan only the first digit, so more than 20mA will flow and it will shine brightly.

mx.setColumn(0, 7, 0b00000001);
This is the 8th digit, so if you set SCAN_LIMIT to 7, all digits will be scanned, so the pulse will be reduced to one-eighth, so only 4mA will flow, and it will glow dimly.

For 30 LEDs you only need to use 5 digits (5x7=35) but it still scans the 5 digits, so the LEDs will be 1/5 of the brightness set by the ISET resistor. If the LEDs can handle 40mA max current, you can set the ISET current to 40mA then the average for each digit will be 40/5 = 8mA.
Otherwise you need a separate driver for each LED.

you could do this with no max7219, or any other driver. Just 6 Arduino pins and 6 resistors. The technique is called Charlieplexing.

When only one of the 8th digits below lights up in an 8x8 dot matrix.
mx.setColumn(0, 7, 0b00000001);
Is it not possible to scan only the 8th digit?

The normal SCAN_LIMIT setting format is as follows.
SnapCrab_NoName_2023-12-28_1-18-48_No-00

For my desired behavior, I would like to set it to "Display digits 7" so that only the 8th digit is scanned.

Max7219 does not have that feature. As you can see in the table you posted, if you want only one digit lit, it must be digit 0.

This is a correction.
For my desired behavior, I would like to set it to "Display digits 7 only" so that only the 8th digit is scanned.

Thank you for your reply.
I am having trouble because there is no function to scan just one arbitrary digit.

For example, with an 8x8 dot matrix, without scanning at all,
Simply mx.setColumn(0, 7, 0b00000001); Light up only this LED.
Is that possible?

Since scanning is performed, the pulse is divided depending on the number of digits to be scanned, and the lighting current becomes low.

In that case, I think if you specify and light up only one LED without scanning at all, you can output 40mA with that one LED.

I don't think there is a function that lights up one specified LED without scanning.

Yes, I understood your trouble.

No. As I said, max7219 does not have that feature.

Only for digit 0.

No it is not, the only single digit you can do is 0

@mami2023
To do what you want you would need 4 of these IC

You have mentioned an 8 x 8 matrix several times. If you are interested in addressing random numbers of individual LEDs maybe a chip like the HT16K33 would be more to your liking since it is designed to drive a LED matrix.
Adafruit 8X8 I2C backpack.

Thank you for your reply.

When using HT16K33 SOP-28, is it possible to flow 40mA when lighting only one of the 128 connected LEDs?

The MAX7219 scans the number of digits and lights up by distributing the pulses, so it is impossible to flow 40mA to any one LED. When lighting any one LED, only about 5mA flows.


For example, with 128 LEDs connected, is it possible to flow 25mA to any 8 LEDs? 200/25=8

When lighting only 5 arbitrary LEDs, can 40mA be passed to each LED? 200/40=5

The "Typical" spec is not guaranteed but means you can expect that performance from most devices.

See post #15