Go Down

Topic: signals for shift registers over long distance (Read 7 times) previous topic - next topic


Jan 06, 2011, 06:15 pm Last Edit: Jan 06, 2011, 06:22 pm by deuplonicus Reason: 1
I have a hefty project to fix, The new years party was a success, I managed to turn data/clock line corruption into my advantage (programming the effects took minutes - as there wasn't much I could do thanks to bad signals, lol)

Anyhow, here's a pic to excite you:

and a video to finish you off:

So let me explain, there are two lines at the moment I need control over, with long distance and 14 MIC5891 shift registers.
  • One line is a clock line, it is linear topology branching from the arduino mega 2560 pin 8.

  • The other line is from pin 9, it is serial data into the MIC5891 data in pin, this IC has a serial out, which cascades to the next MIC5891 data input

The clock line is.... 15.9 feet long, every 15 inches or so, there is a MIC5891 tied to the line. some are 6 inches apart, others 30 inches apart.

The data line output to the next input is similar, 15 inches between or so, with variance.

Right now it appears the clock line is just crazy full of false cycles as you get further away from its origin at the arduino. The wire is 18guage solid core.

The power supply is also a crazy schematic, branching out in a star pattern from a central PSU, then stubbed connections to bus's for the mic5891 ICs

I was looking into using the maxim RS-485 or cheaper equivalent, but I know there must be other people here with arduinos and such that came across this issue. Searching the forum with my skills does not produce much help, only more about RS-485s, lol, makes me think I am gonna need a ton of these things, considering there are 14 mic5891 shift registers.

What have you guys seen that works in long chains of one wire data and clock lines?

Also, there are plenty more pics of this thing and hot chicks if you guys want them.

So far, $1000 +/- 50, over 1500 feet of wire (loads of antennas), 1474 LEDs (7 broken = 1467 working LEDs), and loads of man hours


Basically you need to know how fast these clock lines are going.

Then you need to arrange a low impedance driver to handle this. Your problem is that reflections and capacitance are messing up your signal. You can use a RS455 line driver and a RS485 line receiver on each of the inputs, but note there is no need to actually use the RS485 protocol.


Another possibly cheap approach would be to use 75 ohm coax for the timing signals.  Tie the shield to ground.  You should be able to score 25 to 50 feet of CATV cable for $2 at a dollar store.


cheap approach would be to use 75 ohm coax for the timing signals

So how does that get over the impedance mismatches then? All you are doing is providing a shield to the signal and that is not the problem.


Jan 07, 2011, 01:15 am Last Edit: Jan 07, 2011, 01:19 am by deuplonicus Reason: 1
How many lines can an RS455 line driver handle? I mean with 14 ICs on one side of the sign, and 15 on the other side, this gets expensive fast. Are there other options?

Also I'm having trouble finding RS455


how does that get over the impedance mismatches

It doesn't.  It just shields the signal from picking up RF and crosstalk and helps reduce radiation losses.

It seems to be your supposition that reflections and ringing are the main problem.  My guess is that he's picking up RF and AC interference.  Without being there with a scope on the line and a signal generator, it's tough to be sure which is the most critical to address or whether a partial fix is sufficient to achieve reliable operation.

30 feet of CATV cable is cheap, and may help enough to get him on his way.  A box-load of RS485 drivers would take some time and effort to set up.


How many lines can an RS455

RS485 is a multidrop bus.  You can have up to 32 devices on a standards conforming bus, but there are parts that support over 100.

Have a look at http://en.wikipedia.org/wiki/EIA-485

A popular bus driver is a MAX485: http://www.maxim-ic.com/datasheet/index.mvp/id/1111


Jan 07, 2011, 04:11 am Last Edit: Jan 07, 2011, 04:24 am by mrmeval Reason: 1

This is nice if you can get it but I believe there are now pin compatible alternates by other manufacturers.
If it was designed by man it can be repaired by man.


Jan 07, 2011, 03:04 pm Last Edit: Jan 07, 2011, 03:06 pm by deuplonicus Reason: 1
looks like my best bet is the max1480B for the main driver, as it has built-in complete isolation from the power supply via transformers and opto-isolation. so as to eliminate some EMI as a precaution as I'm pretty certain ringing is also the case as Grumpy Mike says. Grumpy can I verify this in any easy way with an oscilloscope?

and something like the TI 75176 for receivers

mainly because they are cheap.

Now I'm wondering, since I really have three 15ft+ lines (clock, latch and output enable), I coulddn't find anything that can drive three lines, so it looks like I would need three drivers, and 14x3 receivers = 42 for ONE letter, the other letter would have 45 receivers and three drivers,,,

That is pretty hefty, in fact more work here than the 28 circuit boards I already created with 51 soldering points on each for driving the LEDs. But as everything in electronics, things only get more complicated.

I just want to make sure this is the best solution before I get excited about it and spend a ton of money and time. I will be checking this stuff with my teachers in a few days when the new semester starts.


I think you're all making this too complicated. Even at the maximum data rate for the shift registers, 5 MHz, the clock line is too short, at 16', to produce much in the way of transmission line effects. I think gardner's supposition that it's picking up noise from the environment is generally correct. You shouldn't have much trouble with the 15" data lines, but a small inline resistor on each one will form an RC filter with the input & output capacitance of the pins that should suppress any noise.

The easiest thing to try to begin with would be to add a differential driver to the clock line. This will suppress any external interference.

You could try current mode for the clock line. Get a high current open-collector buffer on the line, connect the far end to Vcc, and make the on state the state where you have a substantial current, 20 mA should do, flowing in the line when it's on and no current when it's off. The receivers then become a small resistor (1-10 ohm) and a simple one op-amp differential amplifier. This is basically immune to all but the most extreme noise, which is why it's commonly used in industrial controls where wire runs can be in the thousands of feet and the electrical noise levels are often outlandish.


Adding a differential driver for the clock line would mean I would need a receiver at each shift register right?

Could you elaborate more on this open-collector buffer idea? I'm a little confused about it the way you explained it.

Thanks for all the input guys! We are getting closure, every time I hear something new and research it, I learn ton!


Given your description of your system, I think you'd need a receiver on each one... but a receiver can be just a op-amp wired up as a differential amplifier, which is just an op-amp and half a dozen resistors. Super cheap and simple.

The current mode signalling for the clock requires you to find a way to turn on and off the current in the clock line. You don't need a buffer -- a simple NPN transistor (such as a PN2222) wired up with the emitter grounded, the base connected to your clock pin with a resistor (say 1K), and the collector connected to your clock pin. The far end of the clock line should be connected to your positive power supply. Therefore, when you turn on the clock pin, current will flow in the clock line.

At each shift register, put a small resistor in series with the line. 10 ohms is reasonable. Then put a differential op-amp amplifier on each one. A differential amp is a bog standard op-amp circuit. See http://en.wikipedia.org/wiki/Operational_amplifier_applications#Differential_amplifier for how to make this circuit. Make the gain high enough so that it hit the positive rail when the current is on and not so high that you get noise interference.

Go Up