# MAX7219 High Voltage 7 LEDs in Series

Hello there,

I am trying to use a MAX7219 to control 7Segment Displays.
Each segment of the Display originally consists of 7 red LEDs in series (1.8V forward Voltage)
So I am trying to figure out how to use PNP/NPN transistors to "boost" up the voltage coming from the MAX7219 outputs to around 18V, since 7 LEDs in series take 7*1.9V= 13.3V,but the MAX7219 cant provide that

The schematic as shown is not working at all, no LEDs light, no matter how many are connected in series.

How do I use the pair of Transistors to solve that?

This schematic showcases how I want to control a single Segment of a single 7Segment Display here

I think you need just one npn between the common cathode/digit pin and ground.

You need a pnp between 18V and the segment pin (plus the series resistor). You need a pull-up resistor (eg. 10K) from the pnp base to 18V to switch it off and an npn from the pnp base to ground to switch the npn on. And a current limiting resistor from the npn base to the max pin, of course.

How many digits in total?

The usual advice for large digits is to use a tpic6b595 for each digit, which should be common anode.

Suggestion: Rewire the display to have common anode segments, connect all to 18V, then wire each segment with appropriate current limit resister to a TPIC6B595.
Will be way fewer wires & transistors.
Use one TPIC6B595 per digit.

Simple array to map a number to the segments:

``````byte fontArray[] = {
0b00111111, // 0 with DP-g-f-e-d-c-b-a
0b00000110, // 1
:
:
0b01101111, // 9
};

Then use SPI.transfer to send a digit to the shift register
digitalWrite (ssPin, LOW); // shift register latch signal
SPI.transfer (fontArray[numberToDisplay] );
}
numberToDisplay can be from an array also if you were to for:loop thru an array and had multiple digits
SPI.transfer (fontArray[numberToDisplay[x]] ); // double lookup!
``````

I have a board with 12 shift registers, used it to drive this display with 3 series LED segments, and 2 x 3-LED segments, each segment having its own current limit resistor.

First of all I forgot to mention, the displays are ready-made, so I cant change them to common anode, they will stay common cathode as they are
So every segment consists of 2 x (7LEDs 1.8V ~ 24mA in series) in parallel, so I would need about 50mA per Segment Channel
If every Segment of one 7Seg Display is on, it draws 50mA*8 = 400mA, so the transistors on the Common Cathode pin have to be able to handle that too

PaulRB:
I think you need just one npn between the common cathode/digit pin and ground.

You need a pnp between 18V and the segment pin (plus the series resistor). You need a pull-up resistor (eg. 10K) from the pnp base to 18V to switch it off and an npn from the pnp base to ground to switch the npn on. And a current limiting resistor from the npn base to the max pin, of course.

How many digits in total?

The usual advice for large digits is to use a tpic6b595 for each digit, which should be common anode.

Thanks for the suggestion, so would this be schedule you suggest?

Anode/segment: yes. Except 22R is too low. Probably 2K2 will be ok.

Cathode/digit: a series resistor on the npn base will certainly be needed. But also I am thinking a single transistor will invert the signal, so perhaps 2 transistors will be needed here also.

PaulRB:
Anode/segment: yes. Except 22R is too low. Probably 2K2 will be ok.

Cathode/digit: a series resistor on the npn base will certainly be needed. But also I am thinking a single transistor will invert the signal, so perhaps 2 transistors will be needed here also.

So like this?
I am not sure about the collector on the PNP1, should there be 18V too and a resistor between PNP1 Emitter and NPN2 Base?

Anode/segment: yes.

Cathode/digit: getting colder. Go back to your original idea, but add the series resistor on the base.

Use this chip as the anode driver (source)
https://www.digikey.com/product-detail/en/microchip-technology/MIC2981-82YN/576-1158-ND/771627

And ULN2803 as the cathode driver (sink)

I don't know of MOSFET equivalents.

PaulRB:
Anode/segment: yes.

Cathode/digit: getting colder. Go back to your original idea, but add the series resistor on the base.

But I would still need another transistor for the cathode, otherwise the signal would be inverted, and since the MAX7219 multiplexes the Digit Pins it wouldnt work with only 1 Transistor
You mean a resistor between PNP1 and DIG0?

EDIT:
Ok so I have a whole other idea, in the end I want to drive 16 Displays which are multiplexed by their commond cathodes, so instead of using the MAX7219 and 2 Transistor Arrays each, cant I just use a 74HC595 Shift register and connect them to 1 Transistor Array each?
That would mean if I have a "1" at an output of the 74HC595 on the anode side, the LED would be off because the UDN2981 "inverts" the signal. But I can simply fix that by inverting "1"s and "0" I send to the shfit register in code. So no second Transistor array needed right?
Like that ( thats the entire Displays, not like the other testing circuit):

Use this chip as the anode driver (source)
MIC2981/82YN Microchip Technology | Integrated Circuits (ICs) | DigiKey

And ULN2803 as the cathode driver (sink)

I don't know of MOSFET equivalents.

Can I also use the TD62783AP instead of the MIC2981? So this would be a PNP transistor array and the ULN2803 a NPN transistor array?

Ah - I forgot the MAX7219 would be driving its outputs low for the common cathodes.
So, add an inverter chip (74HC240, 74HC540) between MAX7219 segment drives and ULN2803.

Still just a three chip addition vs all the transistors.

74HC595 is a poor chip for this. Limited to 8-9mA per output to avoid 70mA Absolute Max on the VCC & Gnd pin.

TD62783AP, sure if you can get them. Looks like an obsolete part, neither Digikey or Mouser carries them. Non-stocked, which usually they aren't made anymore. Looks the same to me as MIC2981, which is an active part.

You could remove 1 chip by driving both uln2803 with the same 74hc595. If you think about it, both those 2 '595 would be loaded with the same data at all times.

You could remove 3 chips by changing your multiplexing strategy. Multiplex by segment instead of by digit. So instead of lighting one or two whole digits at the same instant, light all the "a" segments together, then all the "b" segments etc. This would allow you to use 2 x tpic6b595 for the cathodes, replacing 2 x (74hc595+uln2803). Both udn chips could be driven by the same 74hc595 for the anodes.

Current capability of 74hc595 is not an issue in this circuit, because they only need to drive the ULN/UDN chips, which have high input impedance.

Not using the max7219 will of course mean that the Arduino will have to perform the multiplexing, making coding and timing in your sketch difficult.

So in summary here, you have come across the worst possible display design, essentially an "orphan" product.

I sure hope they were cheap! Where did they come from?

(I'm not kidding! If they were common anode, one TPIC6B595 each would drive them easily, controlled by only three pins for many displays, not multiplexed and so at maximum brightness. As it is you are clearly in a terrible mess!)

Paul__B:
So in summary here, you have come across the worst possible display design, essentially an "orphan" product.

I sure hope they were cheap! Where did they come from?

(I'm not kidding! If they were common anode, one TPIC6B595 each would drive them easily, controlled by only three pins for many displays, not multiplexed and so at maximum brightness. As it is you are clearly in a terrible mess!)

The display is from an old gym, it wasnt bought ;D

Ah - I forgot the MAX7219 would be driving its outputs low for the common cathodes.
So, add an inverter chip (74HC240, 74HC540) between MAX7219 segment drives and ULN2803.

Still just a three chip addition vs all the transistors.

74HC595 is a poor chip for this. Limited to 8-9mA per output to avoid 70mA Absolute Max on the VCC & Gnd pin.

TD62783AP, sure if you can get them. Looks like an obsolete part, neither Digikey or Mouser carries them. Non-stocked, which usually they aren't made anymore. Looks the same to me as MIC2981, which is an active part.

I was asking, because I have some TD62783AP lying around here, so I will replace th UDN2981 with those

PaulRB:
You could remove 1 chip by driving both uln2803 with the same 74hc595. If you think about it, both those 2 '595 would be loaded with the same data at all times.

You could remove 3 chips by changing your multiplexing strategy. Multiplex by segment instead of by digit. So instead of lighting one or two whole digits at the same instant, light all the "a" segments together, then all the "b" segments etc. This would allow you to use 2 x tpic6b595 for the cathodes, replacing 2 x (74hc595+uln2803). Both udn chips could be driven by the same 74hc595 for the anodes.

Current capability of 74hc595 is not an issue in this circuit, because they only need to drive the ULN/UDN chips, which have high input impedance.

Not using the max7219 will of course mean that the Arduino will have to perform the multiplexing, making coding and timing in your sketch difficult.

Since there are 8 Displays per drivers, that would mean that in the worst case e.g. all SegA of all 8 Displays are on, drawing 50mAh each leading to 400mA for the Segment channel (+), is that reliably possible with the parts?
I would stick to multiplex the Displays instead of the Segments and would try to make it work with the Shift registers. I think its better to make the code a bit more difficult than having a lot of different hardware components

Not having the convenience of the MAX is fine for me, multiplexing wont be that hard in code I guess

Yes I think it should be ok. The udn chip is rated for 500mA and your displays will be drawing at most 400mA, which is 80%, so as high as you would comfortably want to go. And only one channel of each udn will be sourcing that at any instant. If they get too hot to touch, bond a little heatsink to them.

The cathode side, each tpic chip will need to sink 50mA per channel, 400mA total per chip, so well within its limits. In fact, it's smaller sibling tpic6c595 would be fine, but often they are more expensive than the "b" variant.

PhilKey:
The display is from an old gym, it wasn't bought

Fair go!

Please explain how you came to lose the original controller?

Another suggestion: mic5891 this is like a combination of 74hc595+udn2981.

You could use one per digit and not multiplex, for max brightness, especially if the display will be re-deployed in a gym.

Or 2 to drive all the segments, multiplexing by segment again, with 2 x tpic6b595 for the cathodes/digits. Down to 4 chips!

If anyone is interested, here is how we did it in the end:
LEDSpielAnzeige GitHub

Thanks for all your help and recommendations/ides

Cool PCB design, very neat & logically laid out.