Driving multiplexed 2.3" seven segment displays problem

Hi all,

I am kind of new to electronics, so I started by doing a simple countdown.
I have been following the instructions here: http://www.instructables.com/id/Seven-Segment-Display-Tutorial/?ALLSTEPS
I was able to get the smaller seven segment displays to perfectly. Both one digit and two digits, later learning shift registers I increased to 4 digits.

Recently I got a few 2.3" seven segment displays for free. (8v, 15ma, common anode)
I have been playing around with them but could not get them to work.
I searched around and figured that the arduino is not powerful enough to drive them and I will need to bump the current up.
I started with transistors (PN2222), got all the segments to light up. I was able to count down with 1 digit.
However, I cannot get two digits to work.
I tried using the ULN2003 instead but same thing. Only 1 digit would work.

What I did:

  • All 7 led segments from the arduino were connected to the ULN2003, which then output to the displays. (9v at pin9 and GND at pin8)
  • I have 9v going into the collector pin, arduino connected to the base pin and the emitter pin to the common anode pin of the display.(using the PN2222) However the displays would not light up.
  • Everything works fine until I add in the second display.

Did I do something wrong or missed a step?
Any help would be appreciated!

If the segments require 8V you can't drive them directly from the Arduino. You will need "High-side" drivers for the common anodes of each digit and "Low-side" drivers for the cathodes of each segment. Low-side drivers are easy since you can use an NPN transistor. The high-side drivers are harder: you can use a PNP transistor between +8V and the Cathode but to turn that transistor OFF you need to bring the Base pin up to 8V which the Arduino can't do directly. You can use a pull-up resistor to bring the Base up to 8V (OFF) and another NPN transistor to bring the Base down to Ground (ON).

Remember to put a resistor (roughly 200 to 500 Ohms) between each Arduino pin and the NPN Base pin. This keeps the NPN Base-Emitter junction from drawing too much current.

Hi johnwasser,
thank you for the response! I do not have any PNP transistors with me at the moment so I cannot try your advice.
I am starting to understand the differences between PNP and NPN and how to use them.

Let me just double check on what you said:
I would need to connect 8V to a pull up resistor, which is then connected to the base (PNP).
The base (PNP) is connected to the emitter(NPN).
The arduino pin also goes to the base of the PNP.

So:
Base(PNP) is connected to -- pull up resistor, emitter (NPN) and Arduino pin
Emitter(PNP) is connected to -- digits
Collector(PNP) is connected to -- 8V

Base(NPN) is connected to -- GND
Emitter(NPN) is connected to -- base (PNP)
Collector(NPN) is connected to -- Arduino pin

thanks!

rotcivisme:
Base(PNP) is connected to -- pull up resistor, emitter (NPN) and Arduino pin
Emitter(PNP) is connected to -- digits
Collector(PNP) is connected to -- 8V

Base(NPN) is connected to -- GND
Emitter(NPN) is connected to -- base (PNP)
Collector(NPN) is connected to -- Arduino pin

Not quite. You want:

Emitter(PNP) is connected to -- +8V
Base(PNP) is connected to -- pull up resistor (to +8V), COLLECTOR (NPN)
Collector(PNP) is connected to -- digits (ANODES)

Collector(NPN) is connected to -- Base (PNP)
Base(NPN) is connected to -- Arduino pin through base resistor.
Emitter(NPN) is connected to -- Ground

The NPN Transistor is acting as a LOW-SIDE switch controlling the Base of the PNP transistor. When the NPN Base is grounded, no current flows from Emitter to Base so no current flows from Collector to Emitter. The pull-up resistor takes the PNP Base to +8V to turn off the PNP transistor. When the NPN Base is at 5V there is a Base-Emitter current and that allows current to flow from Collector to Emitter. This drags the PNP Base down to Ground and the PNP Base-Emitter current allows current to flow from the Emitter to Collector and into the LEDs.

I assume the 8V you mention is the forward voltage @ 15mA. As johnwasser says, you need high side drivers for the anodes. The cathodes can be driven from Arduino pins via series resistors as long as you are careful with the choice of supply voltage (i.e. not too high, certainly below 13V). If you are going to make your own NPN/PNP high side drivers, then I suggest you use a regulated +12V supply. You will then have to drop about 3.9V in the series resistors, so 270 ohm resistors would be about right.

As an alternative to making your own high side drivers from transistors, you could get a MIC2981 octal high side driver. However, this has a higher voltage drop (about 1.7V) than a transistor (about 0.1V), so you would need to allow for this in calculating the values of the series resistors.