I don't have a frequency counter, and I'm unable to derive the maximum frequency of the shiftOut clock based on a default arduino.
Long version of question short: How scalable is an LED display with the piles of shift registers I'm planning on using, while maintaining a reasonable refresh rate.
I know if I shift a byte as quickly as possible the 8 leds are a dim blur; but if I want to start making a display of say...256 or 1024 leds;
what kind of refresh rate can I expect assuming mild/moderate other calculations such as serial io (to get the shift data) or parsing tables in ram...
I guess I could make a software loop to count how many bytes it can shift out in a timed second...
That's exactly what I'd do. Make sure your shift registers and the devices connected to them can handle the data at that rate.
Would you mind posting your results? At some kiddie arcades they have a game which consists of a few hundred colored LEDs arranged in a circle. One of these, the "special" one, is colored distinctly. When you start playing, the LEDs light up one at a time, giving the illusion of a single light moving rapidly around the circle. Your job is to push a button precisely when the "special" LED is lit up, and if you do, you win a bunch of tickets or something. I thought it would be fun to build something like that and wondered whether the architecture you describe -- with "piles" of shift registers -- would make this possible.
Depending on complexity, you could use a(nother) pile of digital logic ic's to make a huge led matrix...
bowdens hobby circuits has an interesting 'scalable 16 led scroller' that uses only digital logic. Basically load 1 high bit, and start shifting. To do what you are interested in just hook the carryout to the input on the first register.
The way I see it, output pins >clock, data, latch, and 2 inputs> button and carry-in
the arduino shifts 1 high bit out, then keeps shifting and listening to the carryout for the complete revolution. This pin will also light your special led. When it detects it, the arduino gets ready to load the bit back out. simply check the button for a press during the time when the 'carry out' led is on.
I just wrote that, and decided a picture would be better...
with this design; shift speed wouldnt matter, as you wouldn't use shiftout, as you only shift 1 bit at a time, instead of the standard 1 byte (8 bits).
As a benefit, you could make cool animations using the standard shiftout to signify win or lose...
program>
start, shiftout x bits low to clear the field
loop like crazy
{shift 1 high bit out
loop until carryin=high or buttonpress = high
(shift 1 bit low
delay
check for button press
check for carryin)
end loop
if buttonpress then person hit button
if carryin = high >>>win //yay
if carryin = low >>>lose //nay
//loop ended, and we load a high bit at the start of the main loop...
}loop
The shiftout code use ordinary DigitalWrite() commands.
The same could be done much faster if direct port manipulation was used in stead.
Thre will always be some (small) propagation delay in the shiftregisters, and 1024 led's = 128 (8bit) shiftregisters. This is a lot of IC's to keep track of and to supply with power, and the power requirements of the LED's ... 20mA each = VERY large power supply. Depending of course on how many is on at the same time.
I would certainly try to approach a project like this in a modular fashion, otherwise it could become unmanagable.