Help sending digital outputs long distance.

Hello, I am working on the 7" led display project I posted about before. The goal is some one types a 5 digit number into a key pad and it is displayed on an LED display 50 to 100 ft away. I am using 5 of these http://www.sureelectronics.net/goods.php?id=721 They each have a 74HC164 with a serial out to the next digit. In the key pad I have a nano. Between the two I plan on using cat 5. I will need to drive 2 cloned displays at once for some of the locations.

I currently have it working for short distance. I feed 12 V to the display and from the display to the nano in the key pad I run 12v, ground, data, and clock. I also run latch but it does not seem to be necessary. I tried 70+ ft of cat 5 and it sort of worked. I am getting data corruption. I had a max366 on each end for pin protection. I have a pile of max485 chips I could try but they do not seam to transmit separate clock and data streams. I also have the demo driver boards that came with the displays. They have a pic16f54 on them that I assume I can reprogram if needed to work with the rs485.
I need to keep cost and complexity down on this. It is going to end up all over the state operated by very non tech savvy people. Currently there will be 4 single and 6 double ( 16 total 5 digit displays and 10 key pads)

Here is a video of it working: My random stuff.

I will post pics and full code once I have the displays finished in the exhibit forum.
For those interested, here is the code that writes to the display:
It is only called when a change is needed, not as part of a loop or timed interrupt.

digitalWrite(LATCH_PIN, LOW);
byte k = chardata[disp[4]];
shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, k);
k = chardata[disp[3]];
shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, k);
k = chardata[disp[2]];
shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, k);
k = chardata[disp[1]];
shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, k);
k = chardata[disp[0]];
shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, k);
digitalWrite(LATCH_PIN, HIGH);

Thank you!

You should look at RS-485 for that distance. Here's one thread on the topic: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1270227591

RS485 is high on my list to try to use. I already use it in the form of DMX, I even have built a light controller using a mega and max485 chip. Unfortunately I don't see a good way to get the info I need into and out of 485 with out putting another microprocessor at the receiving end.

info I need into and out of 485 with out putting another microprocessor at the receiving end.

The 485 tranceiver will output the same data stream you put in the other end, I don't see any need for a uC.


Rob

The shift register requires both a clock and data stream.

Currently I am looking at using 2 rs485 chips on each end.
one for clock, the other for data.

Yeah I get that, that's why I queried the need for a uC.

You could use a uC of course and transmit serial data if you needed to save a couple of wires.

If the basic problem is the speed of shiftOut being too fast for the line you could also bit bang your own shift out at a slower rate. That would save using any more hardware.


Rob

Well it is working now. I put a max485 chip on each end of the lines. So total 4 chips. The up shot is it will be easy to add a second display, just add on to the. Now on to finishing the code and finalizing components and housings.
Thanks guys.