0
\$\begingroup\$

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?

\$\endgroup\$
  • \$\begingroup\$ It appears that most of the RS232 drivers invert their signals. Have you considered using a Schmitt Trigger to invert your signal? \$\endgroup\$ – JDB Apr 7 '15 at 3:59
2
\$\begingroup\$

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.)

\$\endgroup\$
0
\$\begingroup\$

Xbee is ttl level (unipolar), and so is Arduino. You don't need rs-232 converter here, just a 3.3V to 5V level shifter if Arduino board is 5V (or just use 3.3V Arduino and connect directly). Don't forget to cross TX,RX. If you already tried to connect RS-232 (bipolar) driver to Xbee you might have fried the Xbee - test before continuing.

\$\endgroup\$
  • \$\begingroup\$ In the end...the arduino/xbee will be connected to the computer in room 1 and the second xbee will be connected to the RS232 device in room 2. But in order to connect the RS232 device to the xbee, I need a level shifter that doesn't invert the signal. Does a chip exist that uses a charge pump? Basically, a non-inverting MAX3232? \$\endgroup\$ – SolveEtCoagula07 Apr 7 '15 at 1:23
  • \$\begingroup\$ Have you seen this yet -> sparkfun.com/products/9111 ? They're using regular MAX232 and it seems to work just fine. \$\endgroup\$ – Oleg Mazurov Apr 7 '15 at 1:29
  • \$\begingroup\$ Yes, but that is not what I am looking for. \$\endgroup\$ – SolveEtCoagula07 Apr 7 '15 at 1:31
  • 2
    \$\begingroup\$ What makes you think that you need a non-inverting level shifter? The MAX3232 on your Arduino inverts the signal, so you need to invert the signal again when converting it back to TTL. Just use another MAX3232 (or equivalent) on the XBee, and it should work fine. \$\endgroup\$ – Bruce Abbott Apr 7 '15 at 4:56
  • \$\begingroup\$ When I was testing the circuit out there must have been a bad connection. Today when I messed with it, everything worked as expected. I was under the impression that the RX and TX lines on the arduino may be inverting the output and then the MAX3232 was inverting it again... Thanks for all of the input. \$\endgroup\$ – SolveEtCoagula07 Apr 11 '15 at 18:02
0
\$\begingroup\$

As others have said, it seems odd that you would need to invert the signals going into and coming out of the MAX3232 chip, since the combination of the RS3232 and RS232 is non-inverting (the two chips both with inverters cancel themselves out), and connecting the MCU by direct wire to the XBee should not require inverters also.

However, if for some reason you determine you do need inverters, there is no need to actually find a RS232-type level translator that is non-inverting; instead all you need to do is use 74HC04 or 74HCT04 hex inverters on the TX line going in to the MAX3232 chip, and on the RX leading coming out.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.