Introducción
En este post, se muestra cómo probar el RS-485 en Versión M-Duino PLUS.
Lo primero que debes saber es que la versión RS-485 PLUS tiene comunicación Full y Half-Duplex. Controlando el interruptor dip, debes seleccionar si quieres trabajar en Full o Half-Duplex. Hay internamente instalado un transmisor MAX485 Half duplex y MAX485. Si trabajas en Full-Duplex utilizará el MAX485 Half-Duplex para recibir los datos y el transmisor MAX485 para enviarlos.
La asignación de pines se muestra a continuación:
| Max485 | Arduino Pins |
| RX (RO) | RX Serial3 (15) |
| TX (DI) | TX Serial3 (14) |
| RE (inverted logic) | 11 |
| DE | 46 |
Requisitos
Ethernet PLC: Productos de la familia M-Duino
Librería RS-485-: Librería Industrial Shields RS-485 (Github)
Configuración
Para hacer la prueba Full-Duplex, debes conectar el A, B (receptores) al Y, X(transmisores). Para el Half-Duplex, debes conectarte con otro dispositivo con RS-485 y seleccionar si quieres transmitir o recibir datos con un comentario o descomentar el comando "#define":
En el boceto Half-Duplex:
Para transmitir:
#define TEST_RS485_TX //#define TEST_RS485_RX
Para recibir
//#define TEST_RS485_TX #define TEST_RS485_RX
Software
A continuación se muestra el esquema de prueba para Half-Duplex:
(por defecto está en modo transmisor)
#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
}
A continuación se muestra el esquema de prueba para 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");
}
}
}
