Go Down

Topic: mkr 485 y arduino mega (Read 470 times) previous topic - next topic

dremers

Hola, tengo una placa mkr 485 y un arduino mega 2560 que me gustaría conectar a un dispositivo a través de la placa que he comentado y también me gustaría ver por el serial monitor del ordenador la lectura.

El primer problema es que no encuentro a que pines de la mkr he de conectar las cosas y el segundo es que las librerias que parece que hay que usar van con el mismo serie que el que usa el puerto usb.

¿Se puede hacer la comunicación con la placa a través de otro puerto serie del arduino mega?

(Espero haberlo puesto en el sub-foro correcto)

Muchas gracias,
Ramón

tauro0221

Hi.
No se si ya  buscastes las expecificaciiones del Mega 250 pero dicen en ingles lo siguiente:
Quote
Serial: 0 (RX) and 1 (TX); Serial 1: 19 (RX) and 18 (TX); Serial 2: 17 (RX) and 16 (TX); Serial 3: 15 (RX) and 14 (TX).Used to receive (RX) and transmit (TX) TTL serial data. Pins 0 and 1 are also connected to the corresponding pins of the ATmega16U2 USB-to-TTL Serial chip.
Espero que esto conteste tu pregunta.

dremers

muchas gracias por responder.

Si, si, de eso si era consciente.

El problema que me encuentro es que la librería modbus por defecto creo que utiliza el serie0 y lo quiero cambiar de serie, pero no encuentro la manera.

En principio igual la duda iba para la parte de software, pero como también tengo problemas con la placa mkr485 lo puse todo junto en hardware

surbyte

Quote
El problema que me encuentro es que la librería modbus por defecto creo que utiliza el serie0 y lo quiero cambiar de serie, pero no encuentro la manera.
Según que librería y que Arduino uses, puedes usar cualquier puerto Serie0,1,2 o 3 si es un MEGA o uno virtual o sea SoftwareSerial.

Asi que no te adelantes porque las cosas funcionan. Solo verifica la buena continuidad del cable y verás lo bien que funciona todo.

tauro0221

Hi,
Surbyte yo veo el punto de vista y la preocupacion de el como establecer la comunicacion con el modbus. Si uno va enviar informacion tienes que declarar que puerto vaz a usar. Normamente el setup tu declara o asigna el puerto de 0 a 3 que vaz a usar. Una de las cosas que yo encuentro en las librerias es que tu tienes que adivinar algunas cosas que son importante y las mayoria de las veces tiene que buscalas haciendo un google. Deberian de tener un documento donde esplican lo basico. Es verdad que hay que darle creditos estas personas que han dedicado su tiempo en desarollar esta librerias pero deberia tambien esplicar las cosas basicas de como usar la libreria. En este caso como el le dice a libreria que port va a usar en setuup.

surbyte

Bueno, pero ellos no cobran por hacerlo, y si la documentación es pobre tambien alguno de nosotros (por decirlo de algun modo) deberíamos tomar la posta y mejorar dicha documentación.

tauro0221

Hi,
No quiero que me mal entiendan pero estas personas que escriben estas librerias se encuentran en un nivel alto en cuanto a la programacion y es posible que con el nivel de uno no pueda decifrar como trabaja la libreria. Yo estoy hablando de mi persona he tratado algunas veces y siempre fracaso.

dremers

#7
Sep 05, 2019, 10:25 am Last Edit: Sep 05, 2019, 10:32 am by dremers
Según que librería y que Arduino uses, puedes usar cualquier puerto Serie0,1,2 o 3 si es un MEGA o uno virtual o sea SoftwareSerial.

Asi que no te adelantes porque las cosas funcionan. Solo verifica la buena continuidad del cable y verás lo bien que funciona todo.
Hola, muchas gracias a los dos por responder.

En primer lugar las librerías que estoy usando son ArduinoRS485.h y ArduinoModbus.h, que son las que venían en los ejemplos que encontré de la placa mkr 485.

No dudo que no funcione, solo que no he encontrado como definir en esas librerias el puerto serie que quiero usar, ni los pines de la placa que he de usar, ya que la documentación está errónea.

Comprobré con el datasheet del chip max3157 la continuidad de la placa pero hay cosas que no encuentro.

surbyte

El mirar la librería (RS485.cpp) te permite entender como usarla

Code: [Select]
RS485Class::RS485Class(HardwareSerial& hwSerial, int txPin, int dePin, int rePin) :
  _serial(&hwSerial),
  _txPin(txPin),
  _dePin(dePin),
  _rePin(rePin),
  _transmisionBegun(false)
{
}


La clase pide que al inicializar el objeto le indiques que puerto serie usaras, luego el pin de TX/RX, y la indicacion del pin DE y RE (que corresponden al MAX485).
Si no pones nada asume que esta en Serial_8N1.


dremers

#9
Sep 12, 2019, 04:31 pm Last Edit: Sep 16, 2019, 09:09 am by dremers
Muchísimas gracias.


Entonces cuando pongo en el código en la parte de setup algo como:


Code: [Select]

if (!ModbusRTUClient.begin(19200)) {
   Serial.print("Failed to start Modbus RTU Client!");
   while (1);
 } else {
   Serial.print("Succesful to start Modbus RTU Client!");
 }
}

Dentro de ese begin que uso debo poner el puerto serie?

Podrías por favor indicarme cómo sería? Algo tipo:

Code: [Select]

ModbusRTUClient.begin(Serial1, 19200)
?

(Al menos me ha permitido compilar, no lo puedo probar porque ahora mismo no tengo los dispositivos delante, pero quería agradecerte ya tu respuesta)

De nuevo muchas gracias por aclarme lo de la clase.

surbyte

Tu me has visto postear un código del modo que tu lo has hecho? NO
Lee las normas y edita tu post#9 y mira mi post#8 para entender de que hablo.


No.
Si miras la respuesta de tu librería dice que begin solo incializa la velocidad del objeto.
Un google: ArduinoRS485.begin te da la respuesta.

Lo que yo te indiqué es cuando inicializas el objeto.

Cuando tengas estas dudas consulta siempre los ejemplos de la librería.
El ejemplo RS485Sender.ino no dice nada y ahora entiendo tu consulta.
Estoy escribiendo conforme lo leo.

Normalmente un ejemplo responde pero en este caso no, o bueno si, pero hay que ir mas profundo en la librería.
El archivo RS485.cpp es el que tiene las respuestas.

Esto tiene al final

Code: [Select]
RS485Class RS485(SERIAL_PORT_HARDWARE, RS485_DEFAULT_TX_PIN, RS485_DEFAULT_DE_PIN, RS485_DEFAULT_RE_PIN);

Ahi dice que usa el puerto serie definido, el pin TX x defecto, el RX por defecto y el RE por defecto.
Estos valor por defecto los encuentras en el .h

Ahora bien, si tu definieras un objeto con otro nompre puedes asignar todo.

Te doy un ejemplo que te servirá. Compilado para un Mega.

Code: [Select]
#include <ArduinoRS485.h>
#define SERIAL_HARDWARE Serial2
#define RS485_TX_PIN 2  // Elige el pin que desees
#define RS485_DE_PIN 3
#define RS485_RE_PIN 4
RS485Class myRS485(SERIAL_HARDWARE, RS485_TX_PIN, RS485_DE_PIN, RS485_RE_PIN);

int counter = 0;

void setup() {
  myRS485.begin(9600);
}

void loop() {
  myRS485.beginTransmission();
  myRS485.print("hello ");
  myRS485.println(counter);
  myRS485.endTransmission();

  counter++;

  delay(1000);
}



dremers

Muchas gracias y perdón por el post#8, ya está corregido.

Busqué como relaciona se librería ArduinoModubs.h con RS485.h sin éxito. Con lo que me has indicado volveré a buscar a ver si define algo de eso en algún punto.

Muchas gracias de nuevo.

surbyte

#12
Sep 16, 2019, 03:57 pm Last Edit: Sep 16, 2019, 04:02 pm by surbyte
SOn librerías nuevas. Las demas de Modbus tienen mucho mas soporte.
Pon en Google. Arduino Modbus y decidete por alguna mas probada.
Si te da tanto trabajo no sirve. En eso concuerdo contigo.

Ve a la Lupa (buscador del foro) y solo coloca Modbus y lee las respuestas en los hilos que hay al respecto.
Seguramente le darás un giro al tema.

Si decides x otra librería continuemos el debate aquí.

tauro0221

Hi,
Para tu consideracion adjunto de un link de alguien que explica la comunicacion 485 en espanol. Posiblemente ya las a visto si es el caso ingnorala.

Go Up