RS232 non-inverting level shifter

rs232

I am starting a project that will end up as an RS232 wireless bridge (XBee radios) and have no idea where to find the chip I am in need of.

I'm currently in the testing phase without the radios to ensure that the MCU->RS232 will work properly but I ran into a problem. Because I go from the Arduino 2560 -> MAX3232 -> RS232 device the signal is not being recognized by the end device. After thinking about it I realized that the MAX3232 is the problem since it is inverting the signal before sending it to the end device.

My question is, if and where can I find an IC that will perform the proper level shifting needed (bi-directional) without inverting the signal?

Best Answer

You won't find a non-inverting TTL/CMOS to RS232 level translator, because there's no market for such a thing. Developing an integrated circuit design is very expensive, so it won't be done unless there is a substantial clearly identified market. And every TTL-level UART expects the idle "space" to be a logic low "0". If you invert the logic level it won't be able to communicate with RS232 devices.

Normally a level translator adapts a logic "1" from one voltage bus (Vcc1) to a logic "1" in another voltage bus (Vcc2). Logic "0" is close to ground in both systems.

An RS232 interface chip is different from a normal level shifter, because logic "0" "space" maps to a high positive voltage (somewhere between +3V to +25V), and logic "1" "mark" is a negative voltage (somewhere between -25V to -3V) (depending on which of the many TIA/EIA/RS232 "specs" you choose to believe). There's also significant capacitive loading on a long length of cable, so an RS232 transmitter has to be able to drive this heavier capacitive load quickly enough not to lose signal integrity, yet slow enough to meet any applicable radiated EMC requirements.

The RS232 level translator has to not only output a minimum logic level that's something like +5V/-5V, but also survive logic levels of +25V/-25V. Because somebody someday could connect an ancient Hayes 1200 baud modem, and your RS232 level translator had better be able to survive the higher signalling voltage levels.

Since in your application you are connecting TTL/CMOS Arduino TX to an Xbee TTL/CMOS RX input, you must either use:

  • A direct wire connection (if they are physically close and the logic levels are compatible)
  • A standard logic level translator (if the logic levels are different)
  • An RS232 TX driver and an RS232 RX receiver (if driving through a long RS232 cable)

(Disclosure: I work at Maxim Integrated and designed the evaluation kit for the MAX3223E back in the day. Very similar part to the MAX3232 and MAX232.)