I'm working on the schematic of an upcoming build where I want to use several 7 segment displays (common cathode, two 9 digits and one 2 digits, total 20 digits in three separate displays). The arduino will receive input from a 4x4 keypad and send commands to two separate boards (gpsdo and DDS signal generator). The two 9 digit displays will display the frequencies chosen for both the gpsdo (reference clock) and the dds output. The 2 digit display will show the number of connected satellites. Reason I want to use these kinds of displays are purely aesthetic. One lcd would probably be much more efficient and easy. But here I am lol.
Anyway, to my questions. With multiplexing and say the 74HC595 I can manage the total amount of pins needed on the arduino. But will I run into other problems due to the amount of digits? Such as peak current (due to duty cycle etc) exceeding the displays maximum, even when they are separated into three different units? I'm sorry if these are stupid questions with obvious answers but my brain isn't super fast and I've not worked with 7 segment displays before...
And every digit also has a comma, so in reality they are 8 segment displays I guess.
I have to ask, 'why?'. Three MAX7219 display managers would do the job, with a lot less pfaffing around.
But, yes, you will want to exercise some math skills. Managing 20 digits as three separate numbers, with appropriate indexing and all the bitshifting, etc. needed for this is quite doable in shift registers. You'll want some drivers for the digit selects, and some other considerations will come forward. Do a complete and competent design, to avoid "throw it away and start again" moments.
What display type - CC or CA? Do you have links to the exact products, so we can tell you how best to approach them? I've kept my answer generic, because your question is generic.
And yes, I tried to keep my question a bit generic and general. I'm not looking for detailed solutions, more like a shout out if this could turn very complicated and that there's a much simpler solution, say connecting two arduinos with i2c and let them split the tasks. One board handles the gpsdo and the 11 digits in two displays and another board handles the dds signal generator and the display for that.
The displays I want to use are soviet clones of the HP 5082-7441 calculator display and a pair of single digit 7 segment display units (as a pair displaying one number).
Okay. They're all CC, so at least you're not mixing types that way. CC means your digit selects will be "low" side(cathode of all segments needs to be low to turn on the LED), and your segment drives will be "high" side(segment drive needs to be high to source current for the segment LED).
This COULD be done as one large 20x8 drive cycle, but that would mean the instantaneous current in each segment needs to be 20x the average current, and the CC digit select needs to be able to sink up to 20 such instantaneous currents simultaneously. I think you'll understand that this is getting impractical. So, divide and conquer. Others may have better ideas, so I'll step back for now and see if anything comes forward.
The current issue is my current concern from what I've read in other posts about driving larger number of digits. I just wasn't sure if it would be a problem when they are divided into separate units like this.
Alternatively, drive as an 8x20 cycle by combining all the segments (all A segments to one driver, all B segments to one driver, etc) and selectively driving the digits. That would require enough current to light a single element of all twenty displays simultaneously, but the multiplexing rate is less.
@david_2018 Yes, my comment was incorrectly worded. You either drive 20 LEDs at 1/8 duty cycle, or 8 LEDs at 1/20 duty cycle. So it's a wash, really, what you save one way you spend the other, and either way, drivers will be needed for both segment lines and digit lines.
So I guess I could just basically use a couple of these break out boards and hook them up to the arduino. I mean for that price I could use one board for each display and keypad even.
Do you need to use all 9 digits on the 9-digit displays? Because if you do, I don't see how max7219 or HT16K33 will work. Both chips only have 8 common cathode driver pins.
If you need only 8 digits of the 9-digit displays to work, then either chip can do it.
For the signal generator display I don't really need the ninth digit. For the gpsdo I probably want to be able to go up into the 100's of MHz and use 9 digits. Unless I can change input and display format between say Hz, kHz and MHz. If I need a reference output of 125 MHz I can just display that as 125.0 MHz I mean. There's always going to be a lot of trailing zeroes that I could skip.
Maybe use a rotary encoder to switch between units of input and display?
I would think you would want the code to automatically display Hz, KHz, MHz depending on the value? If it's too large to display Hz in 8 digits, switch to KHz. If too large to display KHz in 8 digits, switch to MHz.
But the display can't display units. I would maybe have three small leds on the front panel, one lighting up showing the unit displayed? If I enter 125000000 via the keypad it will show 125.0 and light up the MHz led?
That seems right. Multiplexing with the arduino itself would be the alternative, but instead of treating it as one set of twenty digits, you could treat it as two sets of ten in order to reduce the multiplexing frequency.