[phpBB Debug] PHP Warning: in file [ROOT]/phpbb/session.php on line 580: sizeof(): Parameter must be an array or an object that implements Countable
[phpBB Debug] PHP Warning: in file [ROOT]/phpbb/session.php on line 636: sizeof(): Parameter must be an array or an object that implements Countable
Brads Electronic Projects Forum • Making shift registers faster (connecting them in parallel)
Page 1 of 1

Making shift registers faster (connecting them in parallel)

Posted: Mon Nov 12, 2012 7:26 am
by Saimaster13
In a large LED screen the Arduino cannot shift the data out fast enough to 595 shift registers connected in serial. So, what if they were connected in parallel? It would take more pins, but it should be a lot faster.

The idea:
This should be 3x slower:
Image

This should be 3x faster:
Image


All the latch pins and clock pins would be connected together, the serial branches would be connected as normal, but each branch would have its individual data pins. That way it could run multiple branches but it would only take the amount of time to run as running one branch.

Would this idea work? Is there any foreseeable problems? I am already working on the code.

Re: Making shift registers faster (connecting them in parall

Posted: Mon Nov 12, 2012 3:09 pm
by Saimaster13
What I came up with seems like it might help a little, but it isn't very significant. I made a code using the digitalWrite functions, but I've just been reading that addressing stuff directly using the ports may be faster (portA, I don't really know, etc.) Is it faster? I've been doing a little research and will try to write up the code soon.

Re: Making shift registers faster (connecting them in parall

Posted: Tue Nov 13, 2012 5:30 am
by brad
You are certainly on the right track here. If you connect them in parallel you will get faster data throughput. However, it all depends on how you send the data out to the displays. If you send out one bit to the first column, then one bit to the second then one bit to the third and then send the clock pulse for them to grab the data, you are saving yourself two clock pulses opposed to the original way you were doing it.

But if you want to save even more time, you would access the ports directly, the most efficient method would be to use all eight bits on a port (so eight columns) and you would send a byte out to that port, then a clock pulse to make them all grab the data at the same time (one bit for each of the eight registers)

This way you will be doing it a whole heap faster than the previous two methods!