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.
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.
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.
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?
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....
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.
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??
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)
/*
DigitalReadSerial
Reads a digital input on pin 2, prints the result to the serial monitor
This example code is in the public domain.
*/
void setup() {
Serial.begin(9600);
pinMode(2, INPUT);
}
void loop() {
if (Serial.available()) {
Serial.read();
Serial.println("OK");
}
}
Este si va.
Muchas gracias Igor. Seguiré investigando por que falla el Messenger y te contaré.
Has sido muy amable.
No se por que, a traves de tx/rx no me funciona:
ni la librería Messenger con el serial monitor
ni la librería Modbus con Mango M2m
Pero si lo hacen cuando me conecto a traves de usb
si hago un puente entre la pata 1 del ftdi (txd) y la rx del arduino con chip, SI VA
si hago un puente entre la pata 2 del soket (rxd) al pin rx del arduino con chip, NO VA
Se supone que la pata 1 del ftdi está conectada directamente a la pata 2 del socket del atmega, siendo la pata 2 la segunda patilla cercana a las letras ICSP, ¿no?