7 Segment Display - Common Anode


I was just wondering if anyone has an idea for the best way to drive 4x large 7 segment displays that are common anode (which is not the norm) that each require 12V forward voltage to run.

The displays in question are here: http://www.sparkfun.com/commerce/product_info.php?products_id=8530

Datasheet: http://www.sparkfun.com/datasheets/Components/YSD-1600AR6F-89.pdf

It has been mentioned on here before, however there were no shared outputs between the displays which I am requiring due to the PCB footprint this driver board will be going on to.

Basically I want the arduino to either output I2C, SPI or digitial outputs to a chip which can then drive 4 of these displays. Basically a shift register or multiplexor, but to drive common anode.

I want 12 wires coming out. The 7 segments and the decimal point, which would be common wires between all 4 displays, and then 4 select outputs to chose the display to update.

I have looked at the 74HC595 shift register and thought about putting a darlington array after it or something - but is this the best way?

The displays take 12V (from 11.6v to 12.4v), so with a supply of 12v going through the darlington arrays, you get a voltage drop which would dim the displays (as I have tested). I could use FET's I suppose, but is there another solution?


Thanks - I had seen them, but from what I can tell, you need one of these chips for each of the digits? ie to control 4 digits I would need 4 chips, and therefore 8 or so wires going to each digit…?

I can only have 12 wires total going to all 4 digits.

I may have misinterpreted what I quickly just read now though.

I just found another site.

I havent read it fully yet, but it uses another chip to drive common anode displays.

And yes, the price on sparkfun is not cheap - luckily I didnt get mine from there but its just easy to link to their stuff :stuck_out_tongue:


12 wires, as in the output of the circuit which goes to the 7 segment displays. Not 12 wires to go into this driver circuit like you think I mean.

Whatever goes between the arduino and this driver circuit doesnt really matter. Its the output of the driver circuit TO the 4x 7 segment displays can only be 12 wires.


So no ideas then…

Righto - thanks.

The 12 wires, as mentioned above are just the 4 digits segment LED's in parallel with each other, with seperate digit select wires each.

ie digit1 has 8 wires for the segments and the decimal point. These are in parallel with the other 3 digits. The anode supplying 12V to the digits are seperate for each digit. So that is 8 wires that are common (7 segments + decimal) and 4 wires that are seperate (12V feed to each digit).

Those are the requirements I have. All the rest is fully open to suggestion. i2C, SPI, parallel, etc.

All I want to know if anyone has a known combination that works to drive these displays, with the outputs the are basically multiplexed so there are only 12 wires maximum out of the driving circuit to the 4 digits.

I have read over my lasts posts and I explained this in my first post. Im not sure what there is further not to understand.

I have on breadboard a driver which each digit has its own wires, but that is a total of 36 wires to feed the 4 digits, as none of them are common. I want to find a solution where I can parallel up the digits and have a digit select - but suitable to drive a common anode display at 12V.


GND, +12V and I2C out to the display...? The display doesnt take i2c... its just a 7 segment display.

I am trying to build the driver here

An example of what I almost want is on this datasheet. Page 12. http://www.grifo.com/PRESS/DOC/Philips/SAA1064.pdf The only exception is, this driver is only capable of driving 2 digits off common wires, which isnt quite good enough for what I need. This diagram shows 8 wires which are common for 2 digits, and 2 digit select outputs. This means there are 18 wires required to drive 4 digits, which is still too many. I need 8 wires common for 4 digits, and 4 digit select outputs.

Am I not explaining this well enough?

That is fine but it doesnt fit the requirements I have for this project!

I can only have 12 wires coming off this board to the 4 digits. I dont know how many more times I can say that.

Your solution requires 9 wires for each digit. I dont have room for that on my board. I have a predetermined wire to PCB header on the PCB which only has room for 12 wires. The only solution I can think of is 8 common, 4 digit selects. I am trying to build a driver which suits this requirement.

most simple, straightforward, easiest, and cheapest way

  • thats fine, but that is not my requirement! Its like im trying to build a car here, and you keep telling me to walk because its cheaper.

I already have a solution which can drive 4 digits with 36 wires. I want to drive 4 digits with 12 wires. This is the whole purpose of this post. To find a solution which can achieve this, to drive 4 digits at 12V common anode using 12 wires.

You are talking about the input wires from the arduino to the driver. I am talking about the output of the driver to the 7 segment digits.

The 7 segment digits have 9 wires on them each (8 cathodes, 1 anode).

You are not talking about the same wires as I am. I dont care about the arduino to driver wire requirement. I only care about the output of the driver to the digits.

Very basic diagram to illustrate.

Note, blue wires on the right hand side are common to each of the 4 displays, even though they are only shown to the first one.
Hence, 12 wires total OUT OF the driver board (which I want to make) to the 7 segment displays.

I hope this is clearer, but it is what I have been stating above.


To make things clearer, basically the driver board I want to make, assume its a shield for the Arduino. The 7 segment displays are mounted a few meters away.

I am not using arduino hardware for this project, still using the Arduino IDE for programming etc, but not a production arduino, but the concept is the same.

Hi, just reading the thread. So you want 8 wires that go to each digit in parallel - Segment A, B, C, D, E, F, G, Decimal Point, and then a unique Anode for each digit (the Common Anode). So you're going to need to switch 12V to the 4 anodes, while your segment driver goes low to turn the segments on. One way is to have two 7406 hex open collector parts to pull the segment lines low while you control 4 MOSFETs to switch the 12V to the common anode for each digit. This article tells you how a very nice MAXIM 8-digit driver (can be programmed to use from 3 to 8 digits) can be interfaced with transistors for the higher voltage you want to use.


I'm no expert by any means, but to me your idea with the 595 and fets sounds good. Another idea (I'm not sure this would work, but it might) is to use one of the drivers Richard was talking about, but parallel the displays and just don't use the +12v wire from the driver board (I didn't quite understand what was going on in the diagram he linked to, but I assume it has a +12v connection for the display). Instead, use your own 4 +12v wires that you can turn on and off when you want. If this wouldn't work, then it would be great if somebody could explain why.

Hi wanago, long time no see.

To get 4 digits with 12 wires you have to multiplex, which means finding a driver chip or breaking out the FETs.

Those displays have a Vf of 11.6 to 12.4v don't they. That's not much headroom.


Thanks Guys

Hi Rob :) - This is in parallel with the conversation we had offline :)

Its good to see my question has been understood. CrossRoads - yes you have it bang on, that is what I want to achieve.

I was talking to Rob (Graynomad) offline, and the question came up about multiplexing and what effect that has on the brightness of LED's like this. Basically if I have 4 displays in parallel, switching between them really fast, they effectively have a duty cycle of 25% - correct? How does that effect the brightness, compared to powering the displays individually.

As Rob pointed out, the headroom is slim - 11.6V to 12.4V. If they are multiplexed, effectively PWMing the 12V source, will the voltage have to be boosted in order to keep the average within the required limits, to then keep the display at full brightness?

This is just one of the problems. 12 wires for 4 displays is the aim, but will a simple 12V source be sufficient, or will it required a variable regulator or something in order to ensure the displays are full brightness?

RE the MAXIM 8 digit driver, that is what I used first off. But since its common cathode designed, I had to use transistors (or FETS) obviously, plus the fact they require 12V. Transistors caused the voltage drop which dimmed the digits which I want to get around and FET's would fix this. I then thought about just using an IO expander or a 2nd processor and just powering each individually. That made the 36 wire solution though. The final version I want to fit in the same footprint as other baords I have made, which means I can only fit 12 wires.

All good solutions but a number of questions too.


You can have a common 12v feeding your fets, and then FETs as your segment drivers also. A part such as the IRF3707 has an on-resistance of just milliohms, so the voltage across it will be really small. (ex. 40mA, 9 mohm = 0.36mV drop.

If you're seeing too much voltage drop, then yes, add in some kind of voltage boost such as is available from pololu.com.

If you are concerned about the brightness, as multiplexing will turn them each on 1/4 of the time as you said, then you could go back to the original suggestions, and put the driver electronics with the LEDs instead of having the LEDs remote from the driver, which would result in fewer wires spanning the distance.

It might be a bit late now but this schematic is of a Chess computer it is in German but schematic shows four 7 seg displays connected up. http://www.andreadrian.de/schach/#Selbstbau_Schachcomputer_SHAH