How many I/O needed for this?

What would be the least amount of Arduino I/O needed when handling 7-segments displays through a 74HC595?
I know 3 pins are needed for the shift register.
What I'm still not sure is if I need an extra pin per digit, since common segments are connected in parallel to the IC.
Do I?

Thanks in advance.

Just 3. Daisychain the shift registers.

For example, here are 8 daisychained. Shift out 8 bytes to update them.
I prefer common anode 7-segment displays, with TPIC6B595 for a shift register, can sink the max current the LEDs will allow, vs the 70mA total current limit of 74HC595.

Alternately, use a MAX7219 to control up to 8 common cathode 7-segment displays. Still just 3 pins.

Three pins plus ground, and power for the shift register.

Thank you both for the quick answer.

If you multiplex the displays (which is practical up to at least 4 digits), then you need 7 control lines for the digits (or 8 if you want to drive the decimal points as well), plus 1 per digit. So 11 or 12 Arduino pins will drive 4 digits without using shift registers - although you need 4 transistors or similar for the digit drivers.

If you don't multiplex the displays, then it's 7 or 8 control lines per digit - so about one 8-bit shift register per digit. But you can drive all the shift registers from just 3 Arduino pins. Or use a dedicated driver chip as Crossroads suggests.

Here’s an example of MAX7219 and 8 digits, with the digits being either common cathode 7-segment displays, or just discrete LEDs wired up like 7-segment displays.

dc42:
If you don't multiplex the displays, then it's 7 or 8 control lines per digit - so about one 8-bit shift register per digit. But you can drive all the shift registers from just 3 Arduino pins.

For instance, if I have 50 digits with their respective shift registers, I still can handle all them with only 3 arduino pins? (besides current limitations of course)
That would be great.

dc42:
Or use a dedicated driver chip as Crossroads suggests.

I'm sure that's a proper solution, it's just this is getting so complicated to me that I'm trying to avoid any new variables. :disappointed_relieved:

Then connect up a shift register per 8 LEDs as I showed, I have used as many as 20 in a string like that, across two of these boards:
http://www.crossroadsfencing.com/BobuinoRev17/

if I have 50 digits with their respective shift registers, I still can handle all them with only 3 arduino pins? (besides current limitations of course)

Yes you can, but the '595 is not a great choice for LED driving, there are similar chips that only need a single resistor to set the current for all LEDs (eg TLC5916) plus as CrossRoads showed there are multiplexed chips as well.


Rob

Thank you.

This is what I get so far:

  • Every digit with it's own 74HC595
  • The shift registers connected in serial and sharing the same 3 arduino pins.
  • When i send n bytes the first IC in the chain process the first byte and pass the rest to the 2nd, and so on.

Is this correct?

Even if is not the best way, would it work?

Close, the 1st byte will wind up in the Nth register, the Nth byte in the 1st register. The register do not "process" the bytes until the latch pin is toggled, until that point all data is passed through.

I guess you're keen on using a 1000 resistors then.

Also bear in mind that the '595 can only source of sink 70mA total, so you should limit the LEDs to about 8mA each.


Rob

Thank you, hope I can try this soon!