Estoy intentando integrar una bascula de peso que tiene una salida RS-232 con mi Arduino UNO. Lo primero que he hecho es conectar la bascula al PC y ver lo que envía, después de comprobar que la bascula envía correctamente los datos he empezado a integrarlo con mi Arduino.
Al realizar las conexiones y después de cargar el siguiente programa al Arduino (es para probar si recibe algo el Arduino, mas adelante desarrollare mejor el programa):
int incomingByte = 0; // para el byte leido
void setup()
{
Serial.begin(9600);
}
void loop()
{
// lee el byte entrante:
incomingByte = Serial.read();
// dice lo que ha recibido:
Serial.print("He recibido: ");
Serial.println(incomingByte,DEC);
delay(3000);
}
La sorpresa es que el Arduino no recibe nada. La bascula esta configurada con 8bit de batos, 1 bit stop, ningún bit de paridad.
Investigando un poco, tengo el conector RS-232 (RS-232 y USB) que se le enciende un LED cuando esta conectado, la cosa es que cuando hago la conexion USB-RS232 se le enciende el LED. O cuando solo conecto el lado del USB sin conectar el otro se le enciende el LED. Pero cuando conecto solo el RS232 a la bascula no se enciende el LED. Por lo que veo, la bascula no alimenta el RS232, por lo que tendría que alimentarlo desde el Arduino.
La cosa es, mi adaptador de RS232 a TTL no sirve? Que adaptador tendría que comprar para que el cable RS232 se alimente desde el Arduino?
¿Podrias poner un esquema de como has conectado tu circuito?
Ten en cuenta que si quieres comunicarte con el PC a través de Serial, no puedes conectar la bascual a los pines 0 y 1. Deberías usar la librería SoftSerial para poder comunicarte con el PC por Serial y con la báscula por Softserial.
Bascula (rs-232) <--> ADAPTADOR RS232 / TTL <--> Arduino (5V, Gnd, Pin2, Pin3) ] <--> USB al PC
Por lo que entiendo, mi bascula envía sus datos desde rs-232 y desde mi adaptador el Arduino UNO lo recibiría en los pines 2 y 3. Y a través de los pines 0 y 1 lo recibido desde la bascula lo visualizaría en el Serial del PC.
Con el código que pruebo el Arduino no recibe nada. No se si es problema del hardware o software, ya que la bascula envía correctamente los datos.
Tengo dudas con el adaptador que estoy utilizando, por lo que he leído la mayoría utiliza el modulo max232 para hacer las integraciones y no se si con el mio es suficiente o no, ya que no lleva el max232.
Si, he probado intercambiando los pines tx y rx y también cambiando los pines de MySerial unas dos veces.
He probado otra vez conectando la bascula con el ordenador y con el programa Realterm y la bascula transmite perfectamente.
No se por que no recibe nada el Arduino... No entiendo sobre esto de RS-232 pero puede ser que la bascula no transmita nada porque no tiene alimentación? Y cuando esta conectado al PC recibe desde ahí la alimentación y transmite adecuadamente?
BITEK:
No se por que no recibe nada el Arduino... No entiendo sobre esto de RS-232 pero puede ser que la bascula no transmita nada porque no tiene alimentación? Y cuando esta conectado al PC recibe desde ahí la alimentación y transmite adecuadamente?
Desde el desconocimiento que da el no tener en las manos tu montaje para hacer pruebas, tal vez sea lo que comentabas anteriormente. Si como parece que ocurre, la báscula sencillamente no transmite cuando se conecta a la tarjeta, pudiera ser porque aparte de tx/rx debas cruzar también DTR/DSR y RTS/CTS.
Prueba a ver a puentear los pines DTR con DSR y RTS con CTS (4-6 y 7-8) en el lado del arduino, que te será más sencillo, a ver si se despierta la báscula.
Saludos.
He probado haciendo las conexiones que me indicas, por si acaso he probado de formas distintas para asegurarme pero nada, no recibe nada el Arduino.
Aparte, he realizado pruebas con el polimetro, si conecto un [RS232 - USB] al PC desde el lado del RS232 hay voltios (10V en algunos pines). Pero cuando conecto un [RS232 - RS232] a la bascula no hay nada de voltios.
Estoy haciendo otras pruebas, he pensado igual que puede ser por el protocolo que envía los datos la bascula, por lo que he leído hay tres formas de enviar, protocolo hardware, protocolo software y sin protocolo.
Probando con el Realterm, tiene una pestaña que puedes elegir el protocolo. He probado con los tres protocolos y la bascula envía de todas las formas. ¿Que quiere decir eso? Por lo que entiendo es que transmite sin protocolo la bascula... Pero el Arduino no recibe nada de nada...
Pantallazo del Realterm:
He probado también con un cable [RS232 - RS232] conectado a la bascula y en el otro lado hago puente con los pines 4-6 y 7-8. Mido con el polimetro y no hay nada de tensión...
Me temo que tu báscula necesita que el otro dispositivo le indique que está al otro lado mediante el pin dcr. Prueba a hacer un serie "espía" de la comunicación entre ordenador y báscula. Puentea a tu tarjeta los pines rx y gnd del ordenador (o bien el tx y gnd de la báscula; lo que te resulte menos complicado). Deberías recibir los datos en ordenador y arduino simultáneamente. Si eso funciona, tu siguiente quebradero de cabeza será cómo proporcionar voltaje al pin dtr para despertar a la báscula, pero vamos paso a paso.
He hecho lo que me decías, he hecho un puente entre la bascula y el PC, solo con los pines GND y el pin2 (transmit data) de la bascula, todo los demás no los he conectado. La sorpresa es que la bascula se comunica con el PC y el Arduino recibe PERFECTAMENTE!
Cuando he quitado el conector USB todavía seguía comunicándose y el Arduino seguía recibiendo. El problema era lo siguiente: Tenia el conector RS232-RS232 que no cruzaba los pines 2 y 3, ese dato ya lo sabia yo. Pero lo que hacia era que los cruzaba al conectarlo al Arduino y por lo que se ve ese era el problema. Ahora los cruzo antes del adaptador y el Arduino recibe perfectamente!
Ahora solo me falta adaptar el dato que recibo para que lo guarde en una variable. Por lo que veo el Arduino lo recibe en modo uint8, y el que quiero ver seria ASCII. ¿Sabéis como se podría hacer?
Pongo las capturas:
Para ver que el PC y el Arduino reciben lo mismo en modo uint8:
Para ver que lo que realmente manda la bascula es en ASCII:
Hola.
Me alegro de que hayas podido salir del atasco.
Lo de imprimir el carácter, depende de qué quieras hacer. En principio puedes usar un cast, por ejemplo:
Serial.println((char) incomingByte);