Welcome to the Pycom forum Forum
    • \[\[global:header.categories\]\]
    • \[\[global:header.recent\]\]
    • \[\[global:header.tags\]\]
    • \[\[global:header.popular\]\]
    • Login

    Explore Pybytes | Official Documentation | Report a Firmware Bug/Issue | GitHub

    Reading inverted RS-232 data

    Scheduled Pinned Locked Moved Discussion
    rs-232
    2 Posts 2 Posters 36 Views 2 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • E Offline
      Elizar
      last edited by Elizar

      Just some notes in case anyone has to read data from a serial RS-232 device that caused me some headache:

      Serial UART and serial RS-232 data differ in voltage swing and polarity.

      A Gpy expects to see 5 V as a logical "1" and 0 V as a logical "0".

      But RS-232 defines about -15 V as a logical "1" and +15 V as logical "0" - what is completely invers.

      Given You only want to read from an RS-232 device, one can use a simple solution of a diode (rectifier) and two resistors (voltage divider) to attach the TX wire of the serial device to the RX1 pin of a Gpy.

      But there is still the problem of the inverted data bits polarity. There really should be a simple python solution like

      uart.init(9600, bits=8, parity=None, stop=1, invert=UART.INV_RX | UART.INV_TX)
      

      as suggested by other authors.

      Meanwhile, however, we can achieve the same goal by setting the required UART bits ourselves:

      UART_CONF0_REG = machine.mem32[0x3FF50020] | (1<<22) | (1<<19)
      machine.mem32[0x3FF50020] = UART_CONF0_REG
      

      will do the trick and voila! the RS-232 data is received correctly.

      (By the way: 0xFF40020 is the serial console, 0xFF50020 is TX1/RX1 and 0xFF6E020 is tied to the LTE modem.)

      robert-hhR 1 Reply Last reply Reply Quote 1
      • robert-hhR Offline
        robert-hh @Elizar
        last edited by

        @Elizar That#s a good hint. There is also a PR #362 outstanding since Nov. 2019 for UART inverted mode, which supports that in a more API consistent fashion. And that PR is compatible to the mainstream MicroPython.

        1 Reply Last reply Reply Quote 0

        Hello! It looks like you're interested in this conversation, but you don't have an account yet.

        Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

        With your input, this post could be even better 💗

        Register Login
        • 1 / 1
        • First post
          Last post

        Pycom on Twitter

        Pycom