I have a motor controller that communicates to a hardwired 30 foot long coiled cable hand remote using the older RS485 half duplex format. My ultimate goal is to replace the hardwired hand remote with a wireless solution. There are now small RF enabled Arduino's (e.g., Moteino) that provide +20dB transceiver function at various UHF frequencies. I had no technical data on the motor controller so I had to scope out the RX and TX format and command packet bytes by scope. It took a while but I now have all the info. Before moving to the wireless Arduino I wanted to work out the RX/TX code hardwired using my own Arduino as a replacement for the handheld remote just to make sure I had the RX and TX packets working.
On standard sized Arduino Uno or Mega, all works fine with basic serial code - my Arduino receives the motor controller fixed 5 byte heartbeat (sent every 220 msec) and waits about 60msec before sending it back to the motor controller as required so it knows a remote is handshaking correctly. Attached is a scope picture. Now to the problem - I took the same breadboard setup and swapped out the Arduino with the Moteino RF to run the identical code. See next attached picture. The received heartbeat packet (yellow trace) causes the TX line to drop from High to Low. Though most of this looks like a long serials of zero's, not seen here but when the timebase is made shorter duration, some of the TX voltage fluctuations go high enough to be interpreted as a 1. The only differences between the Moteino and the standard Arduino Uno is it about 1/4 sized PCB with same ATMega MCU but with finer traces.
My thoughts were this behavior is due to capacitive coupling as the data bits are nearly 10KHz on much smaller, closer PCB traces but the Moteino designer thinks not but has no alternate explanation. I have replicated this on more than 4 of these miniaturized RF Moteino's while not seeing this behavior on several of the larger Arduino Uno's.
Any advice on what may be causing this behavior and more importantly what can I do to as a work-around temporary solution?