Electronic – Advice… Shift registers, multiplexing, or both

multiplexershift-register

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.

Best Answer

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.