Testing the RS485 Building Block Board#

Today I tested the simplified RS485 Building Block Board, which was derived from the original RS485 + 48 V Passthrough Board.

The standalone RS485 circuit had already been designed as part of the earlier combined board, so creating this version was fairly straightforward. This board removes the 48 V passthrough, voltage regulators, and additional protection circuitry from the previous design, leaving a smaller board focused purely on RS485 communication.

RS485 physical board

RS485 Physical Board

Testing was mostly a case of connecting the new boards to the Raspberry Pi Pico 2 W boards I used when testing the RS485 + 48 V version, and then rerunning the same MicroPython test scripts.

I did make a few tweaks to the board compared with the original design. Some components were moved to 0402 and 0603 packages, where power levels permitted, to keep the board smaller. Otherwise, the circuit is largely the same as the previous version.

The bias resistor options on the D0/A and D1/B lines were changed to 470 Ω and 4.7 kΩ, compared with the 1 kΩ and 4.7 kΩ values used on the original board. This gives clearer bias options for the lines.

I also changed the LED indicator resistors from 2.2 kΩ to 470 Ω so that the LEDs are brighter. The indicator LED circuits still include solder jumpers, which can be cut if power efficiency is an absolute requirement.

Finally, I swapped the larger pitch screw terminals for smaller 0.1 inch pitch screw terminals to reduce the overall board size.

Test Setup#

I used two Raspberry Pi Pico 2 W boards running MicroPython. One board was configured as the transmitter and the other as the receiver.

The boards were connected using Cat 6 cable, with approximately 20 m between the transmitter and receiver boards.

I tested the boards at the following baud rates:

  • 300 baud
  • 2400 baud
  • 9600 baud
  • 115200 baud
  • 921600 baud

The same basic transmit and receive scripts were used for each test.

Transmit Script#

The following MicroPython script was used on the transmitting board:

from machine import UART, Pin
import time

# Configure UART
uart = UART(0, baudrate=921600, tx=Pin(0), rx=Pin(1))

# Define the Driver Enable / Receiver Enable pin for RS485
de_re = Pin(2, Pin.OUT)

counter = 0

while True:
    # Enable transmit mode
    de_re.value(1)

    message = "Okay here's a counter value: " + str(counter)

    uart.write(message.encode())
    print("Sent:", message.strip())

    uart.flush()

    time.sleep(1)

    if counter >= 10:
        counter = 0
    else:
        counter += 1

Receive Script#

The following MicroPython script was used on the receiving board:

from machine import UART, Pin
import time

# Configure UART
uart = UART(0, baudrate=921600, tx=Pin(0), rx=Pin(1))

# Define the Driver Enable / Receiver Enable pin for RS485
de_re = Pin(2, Pin.OUT)

# Set board into receive mode
de_re.value(0)

print("Waiting for data...")

while True:
    if uart.any():
        data = uart.read()

        try:
            decoded_text = data.decode("utf-8")

            print("Received Raw:", data)
            print("Decoded Text:", decoded_text.strip())

        except UnicodeError:
            print("Received data, but could not decode it as UTF-8.")

    # Small delay to avoid hogging the CPU
    time.sleep(0.1)

Results#

The results were good. The boards worked without issues at 300, 2400, 9600, 115200, and 921600 baud over approximately 20 m of Cat 6 cable.

This gives me confidence that the simplified RS485 Building Block Board is working as intended for bench, cabinet, and short-to-medium distance wiring use cases.

Conclusion#

With the testing results looking good, I now consider this revision of the RS485 Building Block Board complete, at least for now.

I now have another useful block that I can include in larger and more complex designs, alongside the Digital I/O Expansion board and the USB-C 3.3 V breakout board.

I may declutter the silkscreen on a possible Rev B of the board so that labels and indicators are clearer for a potential user. However, like the silkscreen issue on the Digital I/O Expansion Building Block Board, this can wait until I need to manufacture more boards.

For now, this version is fit for purpose.

Next Steps#

The next step is to publish the designs for the current boards through the documentation website, which I will be developing over the next few weeks.

I also plan to design a USB-C to serial building block board. This will be useful for programming MCUs in future projects, or for including directly on boards where I want to avoid using a larger USB-to-serial breakout or separate adapter.


If you are looking for reusable open hardware modules to speed up your bench testing, or need support designing custom breakout circuits, check out our catalog at Protoworks (NI).