Felix Maocho

Para quien le interese lo que a nosotros nos interesa

Curso de Arduino – Comunicaciones asincronas

Por Félix Maocho
24/4/2017

.

Objetivo de este capítulo

Conocimientos básicos sobre comunicaciones asíncronas, que son, codificación ASCII Unicode, codificación binaria, velocidad de conexión y forma de realizar la comunicación asíncrona y utilidad del módulo UART del procesador.

Utilización de los pines TX y RX (marcados como 0 y 1), como puerto de comunicaciones asíncronas Que es un puerto serie y comunicaciones entre dispositivos.

Velocidades de conexión a las que funciona Arduino

Material necesario

Esta es una clase de teoría por tanto no precisa material

Cómo comunicar la tarjeta Arduino con otros aparatos

Por mucho que nos parezcan suficientes los 20 pines de nuestra Tarjeta Arduino Uno, la realidad nos demostrará que son insuficientes para cualquier tarea de mediana complejidad. Por ejemplo, un brazo robótico sencillo. como el que muestro en la imagen de comienzo, precisa al menos tres motores, uno en cada eje, para situar la mano en cualquier punto a su alcance, y lógicamente al menos uno mas, para que la mano haga algo, ya sea agarrar, atornillar, ,,,

Pues bien, nuestra Tarjeta Uno solo tiene seis salidas PWM y se necesitan dos por motor para hacerlo girar a derechas o a izquierdas. Por tanto las seis salidas PWM nos serán insuficientes para manejar cuatro motores.

Esto no supone mayor problema, porque podemos utilizar dos tarjetas, una tarjeta para controlar el movimiento del brazo y otra para controlar el movimiento de la mano. Sin embargo, supone que tendremos que establecer algún tipo de conversación entre las tarjetas, para que se informen unas a otras de lo que hacen y cuando deben entrar en acción.

Hay diferentes formas de hacerlo, por ejemplo, podemos destinar un pin digital en OUPUT de una tarjetas, para emitir o no voltajes en “HIGH” o “LOW” y desde un pin digital en INPUT de la otra tarjeta, averiguar cuando ese circuito esta en alto o no. También se puede hacer, de forma mas compleja, con pines analógicos, por ejemplo emitiendo luz con mas o menos intensidad y detectando la luminosidad con un fotómetro, lo que nos permite unas respuestas mas variadas, en función de la intensidad del pulso emitido.

Comunicación asíncrona

Sin embargo, hay prevista una forma estandar para la comunicación de la tarjeta, con otros aparatos capaces de entrar en comunicación con ella, que es la comunicación asíncrona. Esta comunicación permite poner en contacto dos aparatos, que sean capaces de emitir y recibir este tipo de comunicaciones, para enviarse mensajes entre ellos. La Tarjeta Arduino UNO posee  dos pines digitales, el “0” y el “1” que tienen a su lado otra marca RX← el pin 0 y TX→ el pin 1 destinado a este fin,,

¿Que significan esas marcas?

Al igual que ocurre en los pines marcados con el símbolo ~, que aparte de ser pines digitales normales y corrientes, pueden configurarse como pines capaces de producir ondas de pulsos con modulación, PWM (Pulse width modulation), los pines 0 y 1, además de ser pines digitales, con las misma capacidad de entrada y salida de cualquier otro pin digital, pueden configurarse para un uso diferente. En este caso, están preparados para transmitir, (TX) y recibir (RX), comunicaciones a otros aparatos, que por su parte tienen que ser capaces de recibir y enviar el mismo tipo de comunicaciones.

Además y con igual tipo de comunicaciones, la tarjeta se comunica por el cable USB con el ordenador. Habremos visto cundo “subimos” un programa que se produce un parpadeo en dos leds que tiene la tarjeta que se macan precisamente como TX y RX, eso indica que en ese momento se esta comunicando la Tarjeta con el PC, pues en efecto es así como recibe los sketch que hemos escrito en el ordenador y se traspasan a la Tarjeta.

Estos leds parapadearan siempre te la tarjeta se comunique con otro equipo, sea un Pc por el cable USB o por los pines TX y RX, y de igual forma que se carga el programa y por el mismo cable, la tarjeta puede comunicarse con el ordenador cundo se lo ordenen los mandatos convenientes del Sketch.

Conviene por ello acostumbrase a no usar como digitales los pines “0” y “1” al igual que no conviene hacerlo con los pines PWM o con los que se utilizan para entrada analógica, pues debemos reservarlos para otros usos, salvo en caso de necesidad, pues frecuentemente vamos a utilizar las comunicaciones asíncronas unas veces por el cable USB y otras para comunicar la Tarjeta Arduino con otros aparatos compatibles, como puede ser otra tarjeta. Sin embargo si nos faltan pines y no vamos a tener comunicaciones asíncronas podemos utilizarles normalmente sin problema.

¿Qué es un puerto serie?

Convenientemente configurados al principio del programa, (en la función “setup”), estos pines pueden actuar como un puerto serie. “Puerto serie” es el nombre que se da a los lugares, o “puertos”, que permiten enviar y recibir comunicaciones entre dos dispositivos. El funcionamiento de estos puertos es similar a la forma de comunicación del antiguo telégrafo de Morse, un aparato donde un texto se transforma en impulsos eléctricos que transportan una codificación, que el aparato receptor puede decodificar grabar en un soporte de papel, que alguien traduce a texto, y a su vez, el receptor puede mandar al origen, otras comunicaciones, estableciéndose así el diálogo entre ambos puntos.

Igual que en el aparato de Morse, podemos trasformar un texto, en vez de puntos y rayas como en el Morse, en subidas y bajadas de tensión, que se transmiten por el pin TX (transmitir), por un cable hasta otro aparato que las recibe en un pin RX (recibir), y utilizar esas subidas y bajadas de tensión para grabar “ceros” o “unos” en una memoria que llamamos “bufer de recepción”, que posteriormente se leen y transforman nuevamente en el mensaje de texto que se envió.

Para que se pueda entenderse el mensaje trasmitido, aparte de estar conectados los aparatos capaces de enviar y recibir los impulsos, hay que guardar una serie de convenciones diferentes, es decir debe existir una norma de comunicación común.

  • La primera, es ponerse de acuerdo en saber cuando se inicia el mensaje y cuando se acaba, en el Morse se sabe, porque hay en el papel del telegrama, un largo espacio en blanco, tanto al inicio, como al fin.
  • La segunda, es que este sincronizada la velocidad de emisión y recepción. Si no fuera así, en el Morse, la distancia entre puntos y rayas, sería o muy amplia, con lo que se confundiría con los blancos de inicio y fin, o por el contrario, tan pequeña que el papel registre una linea continua. Ambos aparatos han de funcionar con una velocidad conocida y similar.
  • La tercera, es que la codificación de las letras en impulsos sea conocida de modo que si se quiere escribir SOS uno escriba “… — … “y el receptor sepa que se decodifica como SOS

Al pasar la comunicación del Morse al mundo digital, difieren los medio utilizados pero no por ello cambian los problemas básicos. Hay que declarar de alguna forma cual es el comienzo y el final de los textos, aquí serán impulsos vacíos al inicio y a final de cada ocho ondas de voltaje que se manden, luego no ocuparan ocho ondas sino diez.

Hay que ponerse de acuerdo a que velocidad se transmite y recibe, la velocidad se mide aquí en baudios o bytes por segundo.

Hay que ponerse de acuerdo en la codificación y genialmente sera la codificación ASCII Unicode que tiene un determinado octeto de bytes, (8 unos o ceros), para codificar, no solo letras y números, sino otros muchos caracteres como estos ¿ ^ ) & y también caracteres cirílicos, griegos, árabes, chinos, procedentes de la alquimia , la astrología, o como ◘♀♪ Todos estos caracteres tiene un octeto o sea una mezcla de ocho unos y ceros especifica. Si quieren más informacion sobre los caracteres ASCII pueden encontrarla en la Wikipedia

Yo creo que con esto tiene suficiente teoría de lo que es una comunicación asíncrona, aunque claro está, la cosa en la realidad tiene mas complicación, pues puede haber ruidos parásitos en la linea y hay sistemas de control, que garantizan que la información que se ha recibida es correcta, para eso con cada octeto se envía una cifra de paridad parecida a la letra final del DNI, que es el resultado de una ecuación con los unos y ceros enviados, de modo que si donde había un “1” se recibió “0” o se bailó un par de números se detecte como erróneo, en cuyo caso se vuelve a solicitar nuevamente el envío del octeto y otras normas parecidas que indican el principio y final del mensaje, pero que como son afortunadamente son absolutamente trasparentes a su uso, lo vamos a dejar para los Ingenieros de telecomunicaciones que son los que tienen que lidiar ese toro.

Así pues pensemos que enviar un octeto es solo algo parecido al gráfico que pongo a continuación que es lo que se mandaría para enviar el octeto “11010011” que según esta página  es “Latin capital letter O with acute” o sea la ”O” mayúscula y acentuada aguda “Ó”

La linea del reloj indica la velocidad en baudios, como ven cada cero y uno modifican dos semiperiodos de la frecuencia, y a parte hay otros semiperiodos que se destinan a otros usos como es el comienzo y final u el bit de paridad o control de la calidad de lo recibido  y como es la misma para cada aparato cada onda corresponde a la transmisión de un byte como ven hace falta bastantes mas de 8 ondas para mandar un octeto de bites, lo que produce una merma superior al 20% de la cantidfad teót rica que se pudiera mandar  imprescindibles para sincronizar los equipos y confirmar la calidad de los envíos etc.. Como digo la realidad es bastante compleja, pero afortunadamente lo que es preciso que nosotros comprendamos es bastante sencillo, pues de todo se encarga el procesador automáticamente sin nuestra intervención.

Pero para que se comuniquen en los dos sentidos los dos aparatos se necesitan dos pines, uno definido como de salida o OUPUT que envía sus señales a otro pin en el otro aparato definido de entrada o INPUT y viceversa, El pin definido como INPUT capaz de “escuchar” los impulsos que se le manden desde el transmisor, es el pin “0”, o “RX”. Es el pin Receptor y el “1”, o TX, será el Transmisor, y lógicamente el cable que los une ira cruzado de la TX a la RX y viceversa.

Las tierras pueden esta unidas entre si o cada una unida a una tierra diferente eso no afecta, lo que eso muy importante para las comunicaciones asíncronas es que el cable que parte de TX de un aparato acabe en el RX del otro y viceversa.

¿Que es UART?

Como hemos dicho, afortunadamente de los complejos protocolos de la comunicación se ocupa el procesador, Para ello tiene unos circuitos especializados que en conjunto se conocen como lal UART, La UART (Universally Asynchronous Receiver/Transmitter) es la parte del procesador, especializada, por un lado  en la codificación de los datos, en una secuencia de bits, por otra en la transmision por el puerto serie, y análogamente la recepción y lectura de la comunicacion y la decodificacion final de los bits para mostrar los datos iniciales. A los efectos, sustituyen a los viejos telegrafista, que transformaba las letras en puntos y rayas para que otro telegrafista las interpretara, solo que ahora lo que hace es transformarla en unos y ceros. Tu les entregas tu mensaje y ellos te lo devuelven en le lugar donde lo querías mandar. Lo que hace, afortunadamente,  tan sencillo utilizar las comunicaciones asincronas como escribir un telegrama.

Todas las tarjetas Arduino actuales tiene un módulo UART, por tanto pueden procesar sin dificultad los datos en secuencia de bits y viceversa liberándonos así de muchas molestias. Arduino UNO solo tiene un módulo UART lo que indica que solo puede mandar el mismo mensaje por el cable USB y los pines “0” y “1” por tanto en puridad solo puede comunicarse con otro aparato, Lo que si puede es comunicarse con varios aparatos por ejemplo conectar el pin TX con varios pins RX de otra tarjetas y mandar a todas el mismo mensaje., Sera trabajo de cada aparato saber si el mensaje es para el o para otro

Por ejemplo podemos codificar que si el octeto comienza por “111” es para un equipa y si es comienza por “110” es para otro y que si recibo un mensaje que comienza por “101” es respuesta del “111” y si comienza por “011” es respuesta del otro y aun nos quedarían la combinación de cinco bytes para enviar distintas instrucciones. Pero para trabajar en redes se suelen utilizar tarjetas que tiene varias UART de modo que pueden comunicar con varios equipos sin tanta complicación.Por ejemplo la Tarjeta Arduino MEGA, tiene 4 UART diferentes lo quele permite realizar comunicaciones por al cable USB y los pines o (TX) y 1 (RX) igual que la tarjeta UNO, pero además por los pines 14 (TX) y15 (RX), 16 (TX) y 17 (RX), 18 (TX) y 19 (RX). Lo que da idea de la importancia que tiene las comunicaciones en los grandes proyectos.

¿Que es comunicación asíncrona?

Esta forma de comunicación se llama “comunicación asíncrona”, pues no hace falta que ambos equipos estén simultáneamente alerta, aunque si conectados y encendidos. Como pasa en el Morse, en el que el telegrafista que recibe el telegrama, no hace falta que lo lea según llega, ni siquiera hace falta que esté en ese momento, porque lo puede leer después del papel donde queda escrito.

Como una Tarjeta Arduino, realiza una transmisiones asíncronas, si por ejemplo transmite un mensaje cuando así se lo indique en alguno punto del sketch en la función “loop”. El mensaje generado en la UART parte y se graba en “bufer de recepción” del destino, exactamente igual que ocurría en el Morse donde el papel hace de “buffer de recepción” y cuando en la tarjeta de llegada, el “loop” de su sketch indique que es el momento adecuado de leer esa memoria, su UART leerá el contenido grabado y en otro momento el “loop”, si procede, mandara su respuesta, que el otro aparato leerá cuando se lo tenga previsto en su programa.

La comunicación es por ello “asíncrona”, a diferencia de otras que son “síncronas” (o sincrónicas) y que exigen que el receptor este atento a interpretar el mensaje según le llega como ocurre en el teléfono. Si no hay alguien escuchado cuando el mensaje llega se pierde la comunicación porque el telefono es un sistema sincrono de comunicación..

Así pues y esto es importante, para poner en comunicación dos aparatos se precisa que ambos trabajen de la misma forma de comunicación e incluso que funcionen con unas normas comunes para ambos, la velocidad de transmisión, el uso de la codificación ASCII Unicode, las convicciones de inicio y final de octeto, así cono otra muy importante que voltaje indica 0 y que voltaje indica 1. Todas esas normas condicionan las instrucciones que se dan al puerto de comunicación, pero no es necesario que en el mismo instante ambos aparatos emisor y receptor estén en estado de escribir y leer el mensaje.

Como ya he comentado al hablar del telégrafo y el teléfono, la principal diferencia entre una comunicación sincronía y una asíncrona, es que la primera exige tener “en directo“ emisor y receptor, es decir que estén sincronizados ambos aparatos y la segunda no lo necesita. La comunicación asíncrona es más económica en medios, (y lógicamente más barato el equipo que precisa). La comunicación sincrónica, precisa de mas medios, pero admite mayor flujo de datos.

Para muchas cosas, la comunicación asíncrona será suficientemente rápida, pero para otras será insuficiente. Para enviar unas pocas cifras, por ejemplo, el peso que detecta una balanza, es más que suficiente, pero si lo que pretendemos comunicar, es una imagen, o un sonido, quizá no tenga la suficiente velocidad para ser práctica.

Cables sincronos y paralelos

Como cada vez los PC son mas rápidos y tiene un reloj interno capaz de generar ondas con mas baudios. conlo que aumenta la velocidad de las comunicaciones asíncronas, que poco a poco, van sustituyendo a las síncronas. Por ejemplo, lo que ven a la izquierda, es el cable que antes usaban las impresoras para conectarse a un PC . Cables gordos de muchos hilos y enchufes con muchos pines muy voluminosos, pues la conexión de la impresora con el PC era antes síncronas, mientras que hoy, gracias al aumento de velocidad de los equipos, generalmente se conectan con un cable USB, que solo tiene en su interior cuatro cables, es decir hoy se conectan asíncronamente.

Sin embargo para algunos usos, sigue siendo aun necesario conectar los aparatos con gruesas cintas de cables en paralelo porque aun necesitan una conexión asíncrona.

Cables USB

El cable USB lleva solo cuatro cables,

  • 1, – De color rojo que lleva 5V para dar energía si lo precisa al otro equipo, Es el que alimenta de corriente eletrica del PC a la tarjeta Arduino,
  • 2 y 3. – De colores blanco y verde, son los cables para la comunicación asíncrona se cruzan en el interior del cable de modo que el RX conecta por el otro extremo con el TX y viceversa.
  • 4 – es el cable de tierra o masa que suministra un equipo a otro en caso de necesidad como pasaba con el 5.V, los conectores son de varios tipos pero estandarizados, pues poco a poco se construyen cada vez mas pequeños. .

En el mundo del PC, hay varias normas de comunicacion, Arduino y el PC utilizan las indicadas para los puertos USB, por eso el PC puede cargar el programa en Arduino y esas son las mismas que se utilizan en los pines RX y TX que es el uso del ASCII Unicode, los voltajes que significan cero y uno, son 0 y 5V y la velocidad de transferencia es una entre varias posibles, pero hay otros equipos que utilizan otras normas que son diferentes a las USB

Los más conocidos aparte de las USB que utiliza Arduino, son las RS-232 que utilizaban antiguamente los ratones del PC que se conectaban con enchufes de 9 pines, como el de la imagen. el RS-485, I2C, SPI, Serial Ata, Pcie Express, Ethernet o FireWire, entre otras y las de comunicaciones inalámbricos bluetooth, wifi, infrarrojos etc. Especial estos últimos sistemas de comunicación inalambricos muy utilizados en proyectos con Arduino por ser muy adecuados para comunicaciones en robótica, domótica o IOT (Internet de las cosas).

Como es lógico, sólo pueden ponerse en comunicación directa equipos que utilizan protocolos iguales y habrá que arbitrar la forma de traducir un protocolo a otro si son diferentes mediante algún sistema intermedio que los traduzca. Por ejemplo hay componentes especiales que traducen las comunicaciones asíncronas en infrarrojas, para poder controlar un robot hecho con Arduino, con un mando parecido a los de la televisión.

Velocidad de las comunicaciones asíncronas

La diferentes velocidades en que se puede operar con las normas USB son 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, y 115200 baudios/segundo. Lo habitual para conectar con el PC son 9600, velocidad media que no suele dar problemas como las muy rápidas y que salvo excepciones, que lo justifiquen es la que se acostumbra a utilizar, aunque la tendencia a futuro es aumentar la velocidad a medida que los equipos sean mas eficientes para así mandar más información en menos tiempo. Sin embargo mientras utilicemos las actuales Tarjetas UNO que son muy económicas no podemos utilizar con seguridad velocidades muy altas por lo que en lo posible mantener una velocidad de 9600 que es la habitual o menos si conectáis con equipos aun mas pobres y solo subir de estas velocidades si es imprescindible.

En un próximo ejercicio indicaremos como se realizan en un sketch en envío y recepcion de mensajes.

Repaso

Como repaso final te diré lo que has aprendido hoy

  • Identificar cuales son los pins RX y TX capaces de comunicarse con otros aparatos
  • Saber que el parpadeo de los leds TX y RX indican que la tarjeta se esta comunicando,
  • Conocer que existen unas normas de comunicacion.
  • Que son los códigos ASCII
  • Que es un puerto serie.
  • Saber como conectar dos dispositivos por su puerto serie
  • Qué es el módulo UART y su importancia
  • Que son comunicaciones asíncronas y síncronas, y cual es su diferencia fundamental, sus ventajas y sus inconvenientes
  • Como es un cable USB.
  • Otras normas de comunicació diferentes a las comunicaciones asincronas
  • Velocidades de las comunicaciones asincronas y cual elegir

Félix Maocho

indice

Anuncios

24 abril 2017 - Posted by | Curso de Arduino, Robotica | , ,

2 comentarios »

  1. esta bueno esta no me la sabia

    Comentario por azrael2 | 26 abril 2017 | Responder

  2. Reblogueó esto en tomtom_max.

    Comentario por tomtom_max | 7 mayo 2017 | Responder


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: