Multiple MAX7219 common RSET

Hi,

Hopefully simple, I want to control the brightness level of a string of 4 MAX7219 controlled 8x8 LED displays. I'd like them to have an identical wide range of brightness. Using a 10K RSET on each module gives me the higher level brightness I want, but using a library such as MD_MAX72XX and setting the intensity to 0 yields still too bright a display say for night/sleeping time.

I could just up the resistor value to reduce the low end, but that would also reduce the high end. My thought was to have a 10K rset in series with a 50K POT.

Can ALL displays use the same fixed-resistor+POT arrangement? Going for a single external control for the whole display rather than a wiper/knob per module. Or a single internal control from a digital potentiometer.

Complete noob here, I'm thinking I'm missing something obvious here.

Sorry if this obvious to all but me, but searching around a bit I've not found a definitive answer.

Thanks!

kolalde:
Can ALL displays use the same fixed-resistor+POT arrangement?

I very much doubt it.

Replacing each 10k (to bright) with a 60k+ resistor will improve the situation.

You cannot use the same pot for all displays.

The max chip only has 16 brightness levels and brightness levels are linear, unlike the human eye.

Maybe this is an idea: connect 10K resistors from the ISET pins of each max chip to an Arduino output pin. Connect 60K resistors from the ISET pins to a second Arduino pin. When you want bright displays, set the first Arduino pin to OUTPUT & HIGH and the other pin to INPUT. When you want the displays dim, set the second pin to OUTPUT & HIGH & the first to INPUT.

Let's simplify this a bit. :grinning:

You have four displays. You will need four Arduino pins (just four).

Connect a 68k resistor (which is a standard value) from each Iset to 5 V. Connect a 12k from each Iset to a separate Arduino pin. For low brightness range, set each pin to INPUT; for high brightness range set it to OUTPUT and HIGH.

Interesting alternative. Connect a 10k from each Iset to a separate Arduino pin. Just one resistor each. For low brightness range, set each pin to INPUT_PULLUP; for high brightness range set it to OUTPUT (and HIGH - but that should not be necessary if previously set as INPUT_PULLUP).

Paul__B
Yeah, I still don't know why I can't use the same pot for all the boards, but it didn't "feel" right, so I asked.

PaulRB
Thanks, I thought of that too, just seemed a little pin hungry for the job. I'm actually doing this with an ESP-12, with other gadgets, so pin challenged. Though I did just add a MPR121 for sense and GPIOs. I was looking at 4 digital pots too.

marco_c
Thank, I was trying to avoid losing the high end brightness. Useful with the sun hits the display.

Paul__B
Excellent, thanks!

I bread boarded both approaches, worked. I'm having trouble finding the resistor value for the pull-ups, and came across an article that pointed out how to calculate them, and they can be slight different per part and per pin.

This is getting deployed using the GPIOs on a MPR121, which also has input pull-ups if I go with the second method. I think I understand what's going on (mostly):

Method 1:
Low brightness is achieved by sinking the current and creating a voltage divider between the 68K and 12K resistors.

High brightness is achieved by sourcing through the 12K resistor. I'll admit I don't know what part the 68K resistor plays in this cases.

Method 2:
Low brightness is achieved by sourcing through the internal pull-up (30Kish??) plus a 10K. 40K+ish?

High brightness is achieved by sourcing through the 10K.

I drew this out for myself before trying, only now building mental models for things like current, voltage, sink, source, voltage dividers, .... I think I'm getting it, thanks again for the help.