A post at DIY Drones points out the possibility to read the channels of a Spektrum satellite receiver via a serial connection.
The receiver is 3.3V so I connected VCC to Arduino's 3.3V and GND to Arduino's ground pin. Then I connected the serial wire of the receiver to Arduino's digital pin 0 (no USB connection).
After powering the Arduino the receiver had the OK status light indicating that it was connected to the sender but the Arduino didn't receive any data (Serial.available() != true).
Normally the satellite receiver is connected to the main receiver and because there is just one serial wire I assume that the communication is from the satellite to the main receiver. As described in the DIY Drones post the protocol is very simple. Maybe I'm wrong but no matter what data is sent, the Arduino should recognize that it has data at the serial input.
Maybe I'm wrong but no matter what data is sent, the Arduino should recognize that it has data at the serial input.
Yes you are wrong.
Can you post the code (use the hash box in the reply bar 9th from right).
Have you set up the baud rate right. What is the parity setting it is spitting out.
What Vcc is this? Is it the receiver? The rest of the wiring sounds Ok.
Somewhere I read that the Arduino's digital pins are 5V for HIGH and 0V for LOW.
Yes that is right but the threshold between a 0 and a 1 is around 3V so there should be enough to trigger the input.
Two points about the code:-
You are always changing the LED into the "nothing received" state, so when you are receiving something you will miss it on the LEDs.
You are using the serial port for monitoring and it is connected to your circuit. That will affect the threshold and might cause it not to work, so try the software serial for your input (and so use another pin).
Yes, the receiver is 3.3V. I've connected it to Arduino's 3.3V pin, that's what I meant.
I've tried the NewSoftSerial approach with no success that's why I switched to the serial port (digital pin 0). I wasn't sure if the NewSoftSerial library supports 115200 Baud. I'll give it another try.
In effect the USB chip is pulling up pin 0 to +5V through a 1K resistor. You might like to check if this is upsetting your receiver. If it is then you need a non inverting buffer between the two like two transistors or two inverters from a 74LS04 so you actually get serial signals into the Arduino.
I can receive non valid data via NewSoftserial with baud rates 57600 or less. According to the source code of the NewSoftSerial library it can transmit up to 115200 but only receive up to 57600 baud. (found here, reply #14)
I don't receive any data via digital pin 0 no matter what baud rate I select. According to your answers the problem could be the FTDI resistor.
Question 1: Could I use one of the Arduino Mega's serial ports to connect my receiver or would I encounter the same problem as with the digital pin 0 on my Duemilanove?
Question 2: Can I use an external 3.3V source for the receiver? Is there no need for a common GND for the Arduino and the receiver?
Question 1: Could I use one of the Arduino Mega's serial ports to connect my receiver or would I encounter the same problem as with the digital pin 0 on my Duemilanove?
Yes you could, there would be no problems like this as only one serial port is used by the USB leaving you with three free.
Question 2: Can I use an external 3.3V source for the receiver?
Yes
Is there no need for a common GND for the Arduino and the receiver?
No there is always a need for a common ground unless you use opto isolators.
I need a 3.3V voltage regulator to connect the receiver to the Arduino's 5V.
Only if the Arduino's 3V3 regualtor can't provide enough current.
I need a 3.3 to 5V logic level converter to connect
As I said before you don't because of the threshold of a 5V input
I was finally able to find a way to connect my arduino duemilanove to the spectrum receiver. I was also able to make sens out of the transfer protocol, an wrote a library for pulling the different channels from the signal.