La comunicación serie o cómo comunicarte con Arduino

La comunicación RS-232 o comunicación serie¿Qué hay de nuevo, viejo? ¿No te ha pasado nunca que utilizas objetos que solamente se comunican por comunicación serie? Sí, sé que ese conector no está ya ni en los ordenadores pero se sigue utilizando… de hecho tu Arduino utiliza el protocolo serie.

Así que te voy a enseñar cómo funciona esta comunicación y qué programas debes usar para recibir y enviar mensajes. A esta comunicación serie se la conoce por comunicación RS-232 y no sé si prescindiremos de ella en el futuro, pero por ahora sigue muy viva. Así que, ¡Vamos a por todas!

Entendiendo la comunicación serie…

La comunicación serie y la paralela es algo que de pequeños hemos escuchado todos (los más jóvenes sois de la era USB, ya no sabéis de que hablo). Las impresoras siempre usaban la comunicación paralela. La comunicación paralela y la serie son la misma, solo se diferencian en el tamaño. La serie envía un bit (un 1 o un 0) detrás de otro. La paralela los envía todos a la vez, por eso se necesitan muchos cables. Tantos como bits, vaya.

¿Entonces para la comunicación en serie necesitaremos solamente un cable? No, pero casi. La idea es que será necesario un cable para transmitir y otro para recibir (podría ser uno, pero vamos a utilizar una comunicación simplex). Luego aparecerán unos cuantos más, pero esa seria la base de todo. Esto es porque la comunicación es simplex. No, no me he equivocado, se llama así. Se llama así simplemente porque cada cable transmite o recibe, se llevan las informaciones en separado.

Como puedes imaginar, un cable no sabe lo que lleva el otro ni si la información es correcta ni el estado en el que se encuentra la comunicación, es por eso por lo que se suelen usar las comunicaciones half duplex (los datos van en ambas direcciones pero solo temporalmente, luego las líneas se cambian) duplex (los datos van en ambas direcciones a la vez sin problemas de choques ni similares), que transmiten y reciben por uno o dos cables. Pero bueno, no es nuestro caso… nosotros simplex, que Arduino funciona como si fuera viejuno.

Los parámetros del RS-232

Como puedes intuir, ambos lados de la comunicación deben de ser iguales, tanto en número de cables como en forma de comunicarse. Y eso nos lleva a la velocidad. La velocidad es cómo de rápido se envía la información y la medimos en baudios. Los baudios no son más que el número de bits por segundo que se transmiten. Entonces cada una de las partes de la comunicación espera enviar y recibir la información con la misma velocidad. Sino… puede ser un lío…

Una velocidad bastante común es la de 9600 baudios o 9600bps (bits per second). ¿Te suena? Es la típica velocidad utilizada en la librería Serial de Arduino. Algo parecido a esto:

  Serial.begin(9600);

Además, para la comunicación también hay que establecer otras cosas. Lo primero es la longitud que se va a pasar. Cuántos bits formarán cada paquete de comunicación. Lo normal son 8 bits pero podrían utilizarse 5 o 7. Después de conocer el número de bits tenemos que conocer el número de bits de parada.

Son los bits que indicarán cuando se termina la comunicación. Esto es porque cada elemento de la comunicación tiene su reloj y puede que un reloj se haya encendido unos milisegundos antes que el otro, por lo que no están sincronizados. No van a la par los relojes y eso es un problema de los gordos. Es por esto que se envía un bit de parada. Pero claro, podemos hacer una comunicación con 1.5 o 2 bits de parada si creemos que los relojes están muy descompensados. Así les das más tiempo para que se compensen.

Digo compensar porque nunca se van a sincronizar. Simplemente se adecuan los tiempos entre ellos. Eso sí, a más bits de parada más lentitud de comunicación.

Por último, queda la paridad. La paridad se utiliza para saber si hay errores en la transmisión. Yo no suelo utilizar ninguna ya que no envío información de máxima catástrofe mundial. Pero entiendo que se utilice si estás manejando algún instrumento o aparato que lleve información importante. Con importante me refiero a que el aparato pueda hacer algo que pueda ser peligroso en algún caso.

Dentro de la paridad está la paridad par, la impar, la marcada y la espaciada. La paridad par es simplemente que sumando el número de unos del mensaje, éste debe de ser par. Por esto, si el número es par se enviará después del mensaje un 0 y sino se mandará un 1 (para que se envíe un número de unos par). Con la paridad impar pasa lo contrario, el número de unos debe ser impar por lo que si ya es impar se le añadirá un 0 y si es par se transmitirá un 1 después del mensaje en sí.

En cuanto a la paridad marcada lo que hace es añadir siempre un 1 al final y la paridad espaciada siempre añadir un 0. Parece una tontería pero así se sabe qué esperar en cada momento. Si no llega un 1 o un 0 como esperábamos en esa posición es que algo anda mal.

Opt In Image

El conector DB-9, la piedra filosofal de la comunicación…

Para la comunicación por RS-232 es común encontrarse con esto (Imagen de Wikimedia con licencia Creative Commons, su autor es Mike1024)  :

Conector DB-9 macho

Este conector tiene nueve pines y yo solamente te he hablado de dos. Vamos a destripar los pines de un conector DB-9 macho (puedes seguir esta imagen, es muy útil):

  • Pin 1 – Data Carrier Detect (DCD): Se utiliza para saber si está conectado el otro dispositivo al que nos vamos a conectar.
  • Pin 2 – Receive Data (RD): Es el pin por el que recibiremos la información. Hay que conectar este pin al de transmisión del otro elemento para que haya comunicación.
  • Pin 3 – Transmit Data (TD): Por este pin transmitiremos nuestra información. Ten en cuenta que este pin debe conectarse al pin de recepción del otro elemento. Para que puedan comunicarse.
  • Pin 4 – Data Terminal Ready (DTR): Se utiliza para informar de que se está lsito para comunicar.
  • Pin 5 – GND: Es el ground de siempre.
  • Pin 6 – Data Set Ready (DSR): Se está listo para recibir y enviar datos.
  • Pin 7 – Request to Send (RTS): Se pregunta si se pueden enviar datos.
  • Pin 8 – Clear to Send (CTS): Se acepta el envío de datos.
  • Pin 9 – Ringing Indicator (RI): Esto se utilizaba en los módems para detectar que tenías una llamada. Así cortaban la conexión y podías hablar por teléfono. Cosas viejas, lo que ya te voy diciendo desde el principio.

Si te fijas, he dicho DB-9 macho. DB-9 es el conector pero el que sea macho o hembra influye mucho. La razón es porque los pines se cambian de lado. Es decir, el GND es el pin 5 pero en la hembra corresponde a la posición 1. Digo a la posición porque vienen los números para ayudarte a ver que el orden está alterado. Pero bueno… para que seas consciente 😉

Estos pines, como puedes ver, son muchos para lo que muchas veces se utilizan. Los que sí son imprescindibles son el de recepción, el de transmisión y el de GND. Con solamente esos tres puedes montar una comunicación rudimentaria. De hecho, lo puedes hacer con tu propio Arduino. Los pines 0 y 1 son los de transmisión y recepción (TX y RX), así que unidos a un GND puedes comunicarte con tu propio PC.

Para ello necesitarás un conversor de DB-9 a USB y así podrás leer lo que envíes  por ahí. Ten cuidado al usar los pines 0 y 1 porque cuando quieras subir un programa, si estos están conectados no te dejará subirlo correctamente ya que por USB también hay conexión Serial para Arduino. Y llevar a las dos comunicaciones a la vez parece que es una cosa ardua para la pequeña placa verde-azulada.

Uy, ¡Pero si es San Valentín!

Bueno, antes de irme tengo que decirte algo. Si quieres ver y enviar mensajes a tu Arduino con el conversor, necesitarás del algún programa para Serial o comunicación serie. Para Linux yo utilizo el gtkterm y para Windows el RealTerm o Putty. Son unos entre los muchos que hay, pero estos me van bien porque son muy simples.

En cuanto a la comunicación serie, espero que hayas podido entender algo porque esto de las comunicaciones es un lío de los buenos. Pero bueno, tal vez con que te suene ya te servirá para indagar por tu cuenta los huecos que yo me haya dejado en el aire. ¡Nos vemos pronto!

P.D. Por cierto, qué crueldad hablar sobre las comunicaciones en el día de San Valentín, ¿no? ¿Por qué soy así? ¿Por qué meto el dedo en ese cajón que nadie quiere abrir? 😉

[Total:3    Promedio:4/5]

Déjame un comentario que en el fondo soy buen chaval

  1. Antonio Capel

    Responder

    • Responder

      • Antonio Capel

        Responder

        • Responder

  2. Ivan

    Responder

    • Responder

Deja un comentario