UART Signal not reaching GND (High=5V Low = 3V)

Hi all,

I am working on a project with an Arduino Nano, I am reading in the SBUS from an RC receiver. Basically, this is just a common RS232 with its own protocol. The problem is however that when I plug in the Nano the signal low jumps from 0V up to 3V. Please see these images:

With Nano


(red line shows GND)

The low level is now to high and the serialEvent never gets triggered.
Any help is welcome!
Thanks Erik

This is the signal without the Nano plugged in:
IMG_20210812_080603

Original RS-232 is +-12V. You seem to have different specs with your devices.

Sorry, RS232 might not be the right name it is probably just UART

Have you shared the Gnd or Vcc line?

Yes Both, thanks for your help btw Doctor :wink:

Are you sure to match transmit and receive lines?

The Receiver send out a Transmit and this goes into the receiver of the Arduino

It's impossible to decipher the connections from the image alone (although it's a welcome addition). Please draw a wiring diagram. Please supply data or links about the RC module.

Thank Aarg.. see image. I do not have any schematics on the receiver however..
I have noticed that the issue does not occur on some cheap china copies of the Nano

You have no link? I don't feel like Googling Tunngy iAGC or whatever and struggling with the spelling... it is important to understand the "SBUS" characteristics and/or protocol.

Also where is your code? Have you accidentally misconfigured the RX pin?

/*
  Serial Event example

  When new serial data arrives, this sketch adds it to a String.
  When a newline is received, the loop prints the string and clears it.

  A good test for this is to try it with a GPS receiver that sends out
  NMEA 0183 sentences.

  NOTE: The serialEvent() feature is not available on the Leonardo, Micro, or
  other ATmega32U4 based boards.

  created 9 May 2011
  by Tom Igoe

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/SerialEvent
*/

String inputString = "";         // a String to hold incoming data
bool stringComplete = false;  // whether the string is complete

void setup() {
  // initialize serial:
  Serial.begin(115200);
  // reserve 200 bytes for the inputString:
  inputString.reserve(200);
}

void loop() {
  // print the string when a newline arrives:
  if (stringComplete) {
    Serial.println(inputString);
    // clear the string:
    inputString = "";
    stringComplete = false;
  }
}

/*
  SerialEvent occurs whenever a new data comes in the hardware serial RX. This
  routine is run between each time loop() runs, so using delay inside loop can
  delay response. Multiple bytes of data may be available.
*/
void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    inputString += inChar;
    // if the incoming character is a newline, set a flag so the main loop can
    // do something about it:
    if (inChar == '\n') {
      stringComplete = true;
    }
  }
}

Thanks Aarg,

I have searched the web but cant find schematics on the receiver.
It seems to be something to do with the Nano's, because I had Nano's before that ran fine and I had the whole protocol sussed out as well. I was pulling all the data at the time. I hoped it might be a pull up pull down issue or such. Might need to try some other Nano's

I found the issue, this nano must be a Chinese knock off with a CH340, and they have not put in the 1k's but 220ohms instead.. Thanks guys, need to get my hands on some propper Nano's

1 Like

I'm still curious how you will read the SBUS signal then on the RX pin through the UART. The SBUS signal is an inverted serial protocol, so unless you add an inverter or use SoftwareSerial I would not know how it can be done with a nano.