I think I have spent a fair amount of time Googling for this answer. I want the most simple and efficient way to multiplex (not Charlieplex) multiple seven-segment displays.
I am employing 4 arduino pins that are hooked up to a 7447 decoder, which is then connected to 6 seven-segments, which are then connected back to the arduino so I can select which one is at ground. So total 10 pins used.
What is the best way to switch between them? My first thought would be to just switch between them at every cycle, but that's pretty unnecessary right? My second thought would be picking a frequency such that all 6 digits would go through a cycle 60 times per second, but I don't know how to time it. Do I just check millis() over and over with an if statement?
I read on the ATMega328 datasheet that the 328 is capable of "internal interrupts", but I could not find anything in the arduino reference.
There are tons of driver ICs for either CA or CC 7-segment displays. I've found CC to be a bit more common, but either way there are plenty that will allow you to drive 4 or more digits off of 2-4 pins.
Check out ICM7418, there are 2 versions of both the CA and CC version, and can be run off as few as 6 pins for 8 digits (BCD/Code-B only) and does all the plexing for you. At most, it takes 10 pins and can write to each segment individually (a/b) or can address which digit to update (c/d).
There are quite a few I2C chips out there, as well as other interfaces.
If you have the extra shift registers, you can always just daisy chain 6 of them and leave them on for full duty cycle (assuming that you have individual digits and not shared segments between digits).