Busca en nuestro Blog. Encontrarás múltiples aplicaciones, soluciones, ejemplos de código. Navega utilizando la nube de etiquetas o busca utilizando criterios específicos
RS-485 test on M-Duino PLUS version
Introduction
In this post it is showed how to test the RS-485 on M-Duino PLUS version.
The first thing that you need to know is that the RS-485 PLUS version have full and half duplex communication. Controlling the dip switch you must select if you want to work on full or half duplex. There is internally installed a half duplex MAX485 and MAX485 transmitter. If you are working on full duplex you will use the MAX485 half duplex to receive data and MAX485 transmitter to send the data.
The pin mapping is showed below:
Max485 | Arduino Pins |
RX (RO) | RX Serial3 (15) |
TX (DI) | TX Serial3 (14) |
RE (inverted logic) | 11 |
DE | 46 |
Requirements
Ethernet PLC: MDuino Family Products
RS-485 Library: Industrial Shields RS-485 Library (Github)
Configuration
To do the full duplex test you must connect the A, B (receivers) to the Y, X(transmitters). For half duplex you must connect with another device with RS-485 and select if you want to transmit or receive data with comment or uncomment “#define” command:
In half duplex sketch:
For transmitting:
#define TEST_RS485_TX //#define TEST_RS485_RX
For receiving:
//#define TEST_RS485_TX #define TEST_RS485_RX
Software
Next it is showed the test sketch for half duplex:
(by default it is in transmitter mode)
#define TEST_RS485_TX //#define TEST_RS485_RX int _rs485DE = 46; int _rs485RE = 11; /////////////////////////////////////////////////////////////////////////////// void setup() { Serial.begin(9600L); Serial.println("M-Duino PLUS RS-485 test started"); Serial3.begin(9600L); pinMode(_rs485RE, OUTPUT); digitalWrite(_rs485RE, LOW); pinMode(_rs485DE, OUTPUT); digitalWrite(_rs485DE, LOW); } ////////////////////////////////////////////////////////////////////////////// void loop() { #if defined TEST_RS485_TX digitalWrite(_rs485RE, HIGH); digitalWrite(_rs485DE, HIGH); Serial3.write(0x12); Serial3.flush(); digitalWrite(_rs485DE, LOW); digitalWrite(_rs485RE, LOW); delay(1000); #endif // TEST_RS485_TX #if defined TEST_RS485_RX if (Serial3.available()) { if (Serial3.read() == 0x12) { Serial.println("RX"); } } #endif // TEST_RS485_RX }
Next it is showed the test sketch for full-duplex:
int _rs485DE = 46; int _rs485RE = 11; /////////////////////////////////////////////////////////////////////////////// void setup() { Serial.begin(9600L); Serial.println("M-Duino PLUS RS-485 test started"); Serial3.begin(9600L); pinMode(_rs485RE, OUTPUT); digitalWrite(_rs485RE, LOW); pinMode(_rs485DE, OUTPUT); digitalWrite(_rs485DE, LOW); } ////////////////////////////////////////////////////////////////////////////// void loop() { digitalWrite(_rs485RE, HIGH); digitalWrite(_rs485DE, HIGH); Serial3.write(0x12); Serial3.flush(); digitalWrite(_rs485DE, LOW); digitalWrite(_rs485RE, LOW); delay(1000); if (Serial3.available()) { if (Serial3.read() == 0x12) { Serial.println("RX"); } } }
See also: