Go Down

Topic: Comunicar a traves de Tx/Rx (Read 8678 times) previous topic - next topic

Jose Francisco

Feb 15, 2011, 12:10 pm Last Edit: Feb 16, 2011, 12:05 am by Jose Francisco Reason: 1
Hola amigos.

Estoy intentando conectar un arduino al pc usando otro arduino como pasarela (quitándole el atmega). ¿por que hago esta tonterida? Para posteriormente sustituir la conexión tx/rx por conexiones rs485 full-duplex.

Os cuento las fases de mi experimento.

1.- Conecto un arduino con modbus-slave al pc mediante usb. En el pc tengo un software modbus-master. La comunicación funciona perfectamente.
2.- Desconecto el usb del ardu-modbus-slave y se lo conecto a un arduino sin atmega.
3.- Conecto tx->rx, rx->tx,5v, y gnd de ambos arduinos.
4.- Ambos arduinos comparten tensión.
5.- Con el software del pc busco al slave. El led rx del arduino sin chip parpadea. Esto quiere decir que recibe los datos del pc.
6.- El pc no encuentra nada.

¿Alguien me puede dar una pista de que está pasando?

Muchas gracias. Un saludo

PD. Por si a alguien le interesa después pienso usar un MAX488. El software que uso es Mango M2M. La librería Modbus es la de jpmzometa.

xlopez

La patilla TX es por donde el ATMEGA envía datos.
La patilla RX es por donde el ATMEGA recibe datos.

Lo que envías desde el PC llegará al primer Arduino por la patilla RX (RX1).

Si luego conectas la patilla RX del primer Arduino(RX1) con la apatilla TX del segundo Arduino (TX2) estás intententando meterle al segundo Arduino por la patilla TX (que es para que el ATMEGA envíe datos, no para recibirlos) lo que envía el PC.

Por eso no funciona.

Jose Francisco

Gracias por la aclaración, pero sigue sin funcionar.

He conectado Rx -> Rx y Tx -> Tx
He alimentado al esclavo con una pila por si fuese problema de falta de tensión, comunicando los gnd.
He cambiado los cables de comunicación.

Y nada.

Funciona bien cuando lo conecto por usb directamente pero no cuando hago el puente con otro arduino sin atmega.

¿Fantasmas?

Jose Francisco

Sigo con los experimentos:



El arduino con atmega:
lo puedo programar directamente por usb.
Ese sketch (modbus) y otros con serial funcionan perfectamente a traves de usb.

Ahora uso un arduino intermediario sin atmega. tx a tx y rx a rx:
Le meto un sketch que SOLO escribe en el puerto serie y puedo ver los datos en el pc. Conclusión: el atmega envia datos y el ftdi los manda correctamente al usb
Le meto un sketch que lee comandos por puerto serie y escribe resultados por puerto serie: NO REACCIONA

Si saco un cable del pin rx del arduino sin atmega (es equivalente al tx del ftdi) y lo conecto al led tx o rx del arduino con atmega, el led parpadea. Conclusión el ftdi envía datos

En principio parece que esta sordo de pin rx, pero ¿como puede tener sordo el pin rx y funcionar perfectamente por usb?

¿Ghostbusters?

Jose Francisco

Estoy perdidisimo.

¿Me podéis indicar como comunicarme con un arduino a través de los pines tx/rx usando otro arduino sin atmega?


Jose Francisco

#6
Feb 16, 2011, 12:13 am Last Edit: Feb 16, 2011, 12:17 am by Jose Francisco Reason: 1
Si. De hecho alimento la una con la otra.
También las he alimentado por separado uniendo las masas

Igor R

#7
Feb 16, 2011, 12:21 am Last Edit: Feb 16, 2011, 12:30 am by Igor R Reason: 1
ummm!! Los pasos que se me ocurren:
- Masas unidas??
- El Tx del FTDI (Rx de la placa sin micro) unido al RX de la placa Arduino con micro??
- El Rx del FTDI (Tx de la placa sin micro) unido al TX de la placa Arduino con micro??
- Estoy seguro que el programa de Arduino funciona correctamente?? Lo he probado individualmente??
- Por el lado de PC con la placa sin micro tengo el hyperterminal o similar en el puerto correcto, y configurado la velocidad, paridad, bit de stop y control de flujo adecuadamente??
- NO tengo en la placa con micro el puerto serie abierto con el PC, a la vez que estoy haciendo las pruebas??

Yo lo he hecho muchas veces precisamente para el tema de rs485 sin ningún problema....

Jose Francisco

Masas unidas: OK.
Verificación. hago un puente entre 3v3 de una placa  al led 13 de la otra y se enciende. (Ya se que no es sano)

RX de una a RX de la otra, TX de una a TX de la otra.

El programa funciona correctamente cuando lo uso por usb

En el pc uso el terminal de Arduino IDE, que por usb, 115200 bps y NL+CR va al pelo.


... y no chuta.

Igor R

#9
Feb 16, 2011, 12:33 am Last Edit: Feb 16, 2011, 12:36 am by Igor R Reason: 1
Justo cuando has contestado, estaba editando con otro punto mi post.
La placa con micro, no la tienes conectada al PC y abriendo el puerto mientras las pruebas, verdad??

Me refiero, sólo tienes abierto en el PC, el puerto serie correspondiente a la placa SIN micro.
La otra placa CON micro,NO tiene la conexión serie abierta con el PC. Es más, si estás sacando la alimentacion directamente de la otra placa, no tienes ni el usb conectado a dicha placa.

??

Jose Francisco

Solo un usb en uso: el de la placa sin micro.

Igor R

#11
Feb 16, 2011, 12:39 am Last Edit: Feb 16, 2011, 12:41 am by Igor R Reason: 1
Puedes poner un programita super básico que mande cosas de la placa del micro, y que si recibe algo, te saque un OK o algo asi.
Para probar Tx y Rx.

Me refiero, que no espere a recibir algo para empezar a transmitir.

Jose Francisco

Quote

/*
  AnalogReadSerial
 Reads an analog input on pin 0, prints the result to the serial monitor 
 
 This example code is in the public domain.
 */

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

void loop() {
  int sensorValue = analogRead(A0);
  Serial.println(sensorValue, DEC);
}




Obtengo comunicación correcta

Igor R

#13
Feb 16, 2011, 12:49 am Last Edit: Feb 16, 2011, 12:51 am by Igor R Reason: 1
Ese esta a 9600 baudios (lo digo porque antes pusistes que estabas a 115200).
Tienes tu placa sin micro configurada a 9600 baudios y lees lo que te manda la placa con micro funcionando con dicho programa??

Jose Francisco

No, he cambiado la configuración del Serial Monitor.
El otro programa estaba a 115200 y está basado en la librería Messenger la cual, dicho sea de paso, está muy bien. (No se si me tendré que arrepentir de lo dicho)

Go Up