I'm doing a project that has a lot of displays, in the form of single leds or 7-segment displays. So the question is in the title. Using 8 bit registers, if I used them for all the leds, it would take around 60 registers, which is not a money problem given that they are like 20 cents each, but I don't know if it's absurd to do it.

The other option is to multiplex, specially with the 7 segment displays. There are like 55 of those displays, but I'm going to use an Arduino board and I doubt the processing speed will be enough to multiplex them all without blinking.

The other logical option is to use a combination of both, which I wouldn't know how to combine properly, maybe have little groups of up to 6 multiplexed displays, using the registers to control them all.

By the way, I have deduced that with pulse of around 10 microseconds of the clock for the registers, and 8 bit each register, it gives around 80 microsecond per register: 4800 microsecond totally, so about 5 milliseconds to work all of them. I don't know if this will be enough for a proper display of them all, although I could cut back the pulse to 2 or 4 microsecond and see if the registers still work properly.

So that's it, I'm asking for advicen before starting to design the circuit boards and buying registers, if anybody has experience on this things, I would appreciate it.

The board is also supposed to run more things than the displays, a bunch of servo motors, some steppers, and some inputs too (like another 60 inputs), so that will obviously affect time too. I could use a max of two microcontrollers if needed. If I could do it with one, perfect, if not, two at most. I could also change to Arduino DUE, which has a better processor, if that makes any difference.

Thanks in advance.

  • \$\begingroup\$ In short, you want to drive 20 LEDs and 35 x 7-segment displays from an arduino and you're looking for the most economic and practical solution? Common anode or common cathode displays? What current for the LEDs and ditto the 7-seg displays? \$\endgroup\$ – Andy aka Sep 27 '13 at 12:29
  • \$\begingroup\$ I'm not worried about the money because both solutions are really cheap. Then numbers were approimated, There are 55 7segment displays, and 30 LEDs, which gives 59 registers, (I need the dots of the 7seg displays so they're 8 pins each), they're common anode. 15 mA of current for each LEDs, I will be using 5V with a 330ohms resistor for each LED. \$\endgroup\$ – MyUserIsThis Sep 27 '13 at 12:38

I would suggest that if you consider multiplexing with a ratio such that one can achieve acceptable brightness without needing the the instantaneous drive current to exceed the maximum allowable continuous operating current. If you don't, then you'll either have to add circuitry to ensure that the display shuts down when the multiplexing isn't happening properly, or else risk damaging the LEDs if a row or column gets stuck "on".

Given that constraint, depending upon how much brightness you need, you may find that somewhere between 2:1 and 8:1 is adequate. Suppose you decide on 4:1. In that case, I would suggest taking digits in groups of eight, and having each group of eight digits use one 16-bit shift register with current-controlled outputs for the display segments (eight to the segment and decimal wires of the first four displays, and eight to the other four) and an 8-bit shift register to select one of four common wires to drive. The spare outputs of the latter shifter could be used to do something like set the amount of current for the segment outputs [allowing for fading or flashing effects].

If you e.g. want some digits to show up as 25% brightness and the rest to repeatedly fade between 25% and full brightness, then for 1/4 of your multiplex cycles you should set the controller for full current and output the data for all the digits. For the other 3/4 of the cycles, you should set the controller for a variable amount of current, but blank all digits except those that should be fading. This approach has some limitations, but is often much easier than fancier PWM techniques.


You will be well advised to break up the display problem into multiple sub-units. Design a simple MCU solution that can run from 4 to 8 of the seven segment displays in a multiplex manner. Wiring from those displays can be fairly short back to the sub-unit and then a narrow serial bus of a few wires can be used as a communications channel back to your main processor. It would only need to send the data to be displayed at the times that it changes or say once per second to keep it updated.

  • \$\begingroup\$ I was trying to use the least possible number of MCU, but I will take that into consideration. \$\endgroup\$ – MyUserIsThis Sep 27 '13 at 13:16
  • \$\begingroup\$ Additional MCUs may very well end up cheaper than running wiring harnesses containing 100's of wires back to a central location. \$\endgroup\$ – Michael Karas Sep 27 '13 at 13:23
  • \$\begingroup\$ It was more about the programming than the money, but I will look into the additional MCU, it looks like the most reasonable option, so it's probably what I'm going to do. \$\endgroup\$ – MyUserIsThis Sep 27 '13 at 13:32

I've built a 4-digit multiplexing system with an Arduino. Driving 55 displays is probably within the capabilities of the Arduino - you'd need to update at something like 10 KHz to avoid a flicker - but they would be driven at a duty cycle of 1/55, or about 2%. Even if you push the displays to their maximum pulsed voltage, this probably isn't going to be bright enough for your needs.

Maxim makes a lot of multiplexing chips that will simplify your life. A chip like the 7219 will drive 8 digits by itself, and you can cascade them together to drive more. Look at the datasheet for more info on how to do this. They are not particularly cheap at $11, but they will save you a lot of hassle. You communicate with them over SPI.

  • \$\begingroup\$ That's way too expensive for the 55 displays. I'd rather multiplex in little groups of 4 or 8 displays instead of the 55 to get a duty cycle of 25% \$\endgroup\$ – MyUserIsThis Sep 28 '13 at 20:15

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.