Amplify signal outputting from Arduino Uno

Hello,

Currently I have an Arduino Uno outputting 0-5V pulse signals to program my lighting devices via a TI protocol call Single-Wire communication. Since there are so many lighting devices that need to read that same signal from the same output of the Arduino and those lights are like 50ft away from my Arduino Uno, my pulse signal drops so low (0-1V) that my lighting devices couldn't understand the signal.

I would think I need some sort of signal buffer/signal repeater to help solving the issue. Since the Arduino can only output 50mA max, I am hoping to raise its ability to 400mA or more while maintaining its good frequency (600kps data transfer rate).

Wondering if my thought is correct and if someone experience this same issue before, and how they solve it. Any recommendation on what buffer/repeater/shield would be deeply appreciated.

Thanks,

I don’t think it’s distance, I think it’s impedance & current related. Have you tried it with a shorter cable? Have you tried it with just one device?

Do you have a link to the 1-wire spec or the devices?

Since there are so many lighting devices that need to read that same signal from the same output of the Arduino

How many devices? 400mA seems like an awful lot!

The information I found calls for a 1K-10K pull-up resistor, but it shows only one common one (not one for each device) so that’s only 5mA.

Since this is lighting and it requires power at the remote end, I assume you are not powering the 1-Wire devices from the bus? If you are powering it from the bus, maybe you can find a specialized 1-Wire driver chip?

…my pulse signal drops so low (0-1V) that my lighting devices couldn’t understand the signal.

Are you measuring that with an oscilloscope or a meter? (A meter won’t give you an accurate reading when transmitting.)

What about putting the Arduino signals through a buffer chip such as a 74HC04 or maybe a Schmidt trigger chip to restore the waveform.

...R

DVDdoug:

I’ve tried a shorter cable and reduce the number of devices, and the signal quality was improved dramatically. That’s why I think the signal will be improved if I use some sort of buffer or repeater device.

Here is the link for the TI LED driver that I use for my lighting device: http://www.ti.com/product/TLC59731. And the Arduino Uno generates pulse signal to control light intensity for 800 lighting devices.

And all my measurement were captured using oscilloscope. In my attachments, you can see 2 of the captures that I have there, all the measurement was captured right at the output of my Arduino.

  1. Without load at the end: Voltage pulse is 0-6.5V pulse. Current pulse is -41mA to 41mA
  2. With a load of 160 lighting devices: voltage pulse is 0-5V pulse. Current pulse is -81mA to 81mA.

Since I would need to add a lot more load than just 160 ending devices, I would need more current, correct? Any thought or recommendation?

Robin2:

Do you know any shield/dev board that could do it? I try not to design a repeater or buffer to reduce my design time.

Thanks much,

Are you measuring with an oscilloscope?

Paul

Paul: Yes

huynh213: Do you know any shield/dev board that could do it?

Sorry, no. I'm a cheapskate with time to spare :)

...R

I see the "scope" pictures, but I don't see anything showing the shape of the signal you are trying to send. How is it possible to get + and - voltages and current from an Arduino pin producing only 0-5 volts?

I suspect the shape of your data bits are getting distorted and that is what you need to key on, not the impossible readings from the scope.

Paul

A transistor? I may be missing something, but you want a low current to switch a higher current.

General transistor switching times (NPN - 2N2222) = 10s to 100s of MHz.

2N222 NPN transistor datasheet

PS: You oscilloscope doesn't really show a wave form in terms of a data signal like a square wave.

If I follow the data sheets correctly, the Arduino only has to supply the PWM signal to the first TI device. After that the TI devices are all daisy-chained together. Is this how your circuit is connected? Or are you trying to drive each TI device individually? The data sheet says there is no limit to how many devices can be chained together.

Paul

I bet your scope pictures are of an AC coupled display, rather than DC!

Paul

Hi Paul:

You’re absolutely correct, I only send the data to my first 16 lights devices on 16 different strings (all in parallel and connected into the single output from my Arduino). The rest will just be daisy chained together as you said. You can take a look at my quick draw for a reference. There’s no limit of how many lights can be chained.

Each first devices of on those 16 strings are located about 50Ft away from my Arduino. I use 22AWG 2 conductors cable with shield to transmit my data.

If the Arduino connects to only 1 string, my pulse signal from Arduino is good (5V pulse signal). But when I hook up the other 15 strings, the pulse signal from the Arduino drops down to ~1V pulse signal, which is too low for the TI Driver to decode, I believe. My thought is because I have long cable, heavy load, and the Arduino doesn’t have enough current/voltage to drive the data signal into my first 16 light devices on the 16 strings.

Simple Layout.JPG

Ok. I do see, now. Probably if you hook up only 2 strings, it still works fine, but added individually, at some point doesn't work. You need to add a driver IC between the Arduino pin and the strings. I will let one of the electronic engineers tell you some device numbers. But a single or perhaps two devices will solve your problem and they will all run off 5 volts.

Paul

Hi Paul,

Thank you for taking a look into my problem. I am looking forward to learning about your IC Driver and hope it could help solve the issue.

Just a clarification on the oscilloscope captures that I shared earlier: Each capture has 2 signals: pulse signal (suppose to be 0-5V pulse) and current signal coming out from an output pin#8 of my Arduino. Keep in mind that all my lights are powered from a separate power supply, and the signal from Arduino is just for controlling the light intensity and some other lighting functions.

I can understand the pulse signal on the voltage as it tries to send a data of 0 &1 into LED driver TLC59731 on lights. But not sure why the current signal coming out is also like a pulse but ramp up from the negative to positive side (in the capture without load: current signal is in the shape of pulse from -41mA to 41mA) Wondering if anyone could enlighten me?

Thanks!

An AC coupled scope trace removed the DC component by sending the signal through a capacitor, so will appear as +and -. DC coupled will show the actual signal as 0 - 5 volts and back to 0 again.

Paul

Paul,

Thanks for the clarification on the voltage signal. But if the current signal is in the pulse shape ramping from -x (mA) to x (mA), is that normal?

Also wondering if you had a chance to find out what IC driver/ signal buffer is that I should implement into my system?

Thank,

huynh213: Paul,

Thanks for the clarification on the voltage signal. But if the current signal is in the pulse shape ramping from -x (mA) to x (mA), is that normal?

Also wondering if you had a chance to find out what IC driver/ signal buffer is that I should implement into my system?

Thank,

That depends. I am guessing your TI devices are not real close to your Arduino. They are connected by wires. So, regular quad buffers won't work. All the wires need to be the same length and need to be twisted pairs.

I have not thought about this kind of stuff since the 1970's, so I am a bit out of date, but I think we need to look at "line drivers". They are designed to send digital signals for some distances over twisted pair wires.

Are you anywhere near a community college offering classes in digital design, etc?

Paul

My general manager saw the CMOS and TTL books on my desk and asked bout what I was doing. I explained your project and the problem you encountered. James mentioned I might want to stop helping you for legal reasons. I signed a non-disclosure agreement with a new customer and I may inadvertently break that agreement.

Sorry. Perhaps someone else will take over and get answers for you.

Best Regards, Paul

Paul,

It's sad to know, but I totally understand. Thanks Paul!