El conocido como puerto serie es usado en gran cantidad de dispositivos como microcontroladores o FPGA para transmitir tramas sencillas de datos.

En realidad, el término puerto serie no hace referencia exclusivamente a este tipo de comunicación pero con el paso del tiempo se ha terminado asociando a ella.

Está definido como una forma de comunicaciones punto a punto, es decir, una forma de conectar dos dispositivos entre sí, no más.

El puerto serie en la placa

En el puerto serie tenemos dos líneas, Tx y Rx. Estas líneas se deben cruzar para comunicar dos dispositivos, es decir, el Tx del dispositivo 1 debe conectarse al Rx del dispositivo 2. El Tx del dispositivo 2 debe conectarse al Rx del dispositivo 1. Además ambos dispositivos deben compartir una masa común.

En ocasiones podemos encontrar dispositivos en los que solo existe el Tx. Esto puede ser debido a que ese dispositivo sólo envía datos, no necesita recibir. Un ejemplo puede ser un sensor o un receptor GPS.

La UART

Para enviar los datos a las líneas debemos usar un hardware que esté diseñado para llevar a cabo esa tarea y en este caso lo llamamos UART. Esta se encargará de leer datos cuando llegan, generar y gestionar interrupciones, enviar datos y gestionar los tiempos de bit. En general la UART se encarga de hacer todo el trabajo por nosotros.

SI usamos un microcontrolador, es muy posible que no necesitemos hacer nada especial ya que la UART estará integrada en el propio microcontrolador. Si usamos una FPGA o similar es posible que tengamos que diseñar el hardware de la UART o usar un diseño ya existente.

El funcionamiento de la UART es el mismo en todos los dispositivos ya que sino fuera así, no se podrían comunicar entre sí.


Como funciona el Puerto Serie

Preparando los datos y la trama

Supón que quieres enviar un dato por el puerto serie, ¿cómo lo haces?

La realidad es que  en muchas ocasiones usamos librerías que nos permiten subir de nivel y no tener que bajar tan abajo al usar microcontroladores. Sin embargo es posible que en otras ocasiones si toque.

Imagina que queremos enviar el caracter “a” a través del puerto serie. Lo primero será buscar en la tabla ASCII cual es el número asociado al caracter, en este caso el 97.

Si convertimos el número 97 a binario obtenemos que la letra “a” se representa con 01100001.

Esto es lo que realmente tenemos que enviar a través del puerto serie, esta combinación de ceros y unos, pero lo debemos hacer de una manera un tanto especial. Debemos incluirlos dentro de una trama.

Lo primero que debemos hacer es invertir el orden de los bits, es decir, el primero pasa a ser el último y último pasa a ser el primero. Esto es debido a que en este protocolo primero se envía el bit menos significativo.

La línea de transmisión siempre que está en reposo estará en nivel alto.

Para iniciar la comunicación debemos enviar un bit de start, que siempre será un 0 y lo mantendremos durante un tiempo que llamamos tiempo de bit.

Pasado el tiempo de bit empezaremos a enviar los datos. Un 1, luego cuatro 0, dos 1 y por último un 0.

Puerto serie, caracter a
Puerto serie, caracter a

Cada bit lo mantendremos en la línea de datos durante el tiempo de bit del que habíamos hablado antes.

Ya hemos enviado los datos, ahora tenemos que liberar la línea e indicar que ya hemos terminado y esto lo hacemos enviando un bit de stop. Que no es otra cosa que enviar un 1 durante el tiempo de bit. Tras enviarlo la línea se  quedará en espera y por tanto se quedará en nivel alto.

Es decir, que para enviar los datos que normalmente van a ser 8 bits, primero enviamos el bit de start, luego los 8 bits empezando por el menos significativo y por último enviamos un bit de stop.

Tiempo de bit

El tiempo de bit no es otra cosa que el tiempo que mantenemos un bit en la línea de transmisión.

Su cálculo es bastante sencillo ya que está relacionado con el baudrate. Este último es el que nos indica el número de bits que podemos enviar en un segundo.

Por ejemplo, una comunicación serie puede ser a 9600 baudios, es decir que se pueden transmitir hasta 9600 bits en un segundo.

El calculo del tiempo de bit es sencillo ya que es el inverso del baudrate.

(1)    \begin{equation*} T_b \ = \ \frac{1}{baudrate} \end{equation*} \begin{equation*} T_b \ = \ \frac{1}{9600} \ = \ 104.2 \mu S \end{equation*}

Es clave que ambos dispositivos que se encuentran conectados por medio de un puerto serie, usen el mismo baudrate, en caso contrario no se entenderán y no se podrá llevar a cabo la comunicación.

Capa física en TTL

La trama del puerto serie puede ser enviada mediante muchos standares, entre ellos RS232 o RS485 o RS422. Sin embargo, a la salida de un microcontrolador o de una FPGA casi siempre tendremos los conocidos como niveles TTL.

Un nivel TTL significa que los 0 lógicos se representan con 0 voltios y los 1 lógicos se representan con 5v o 3.3v.

Pasar de TTL a RS232 o RS485 es un proceso sencillo para el cual se suelen usar distintos tipos de transductores como el MAX485 o el MAX232.

Puedes aprender a usar un módulo basado en el MAX485 en este tutorial.

Enrique Gómez

Ingeniero Electrónico Industrial y Automático, amante de la comunicación audiovisual y de la divulgación ingenieril y científica. Friki de Star Wars, cuenta más de lo que parece. Puedes saber más sobre mi y sobre mis trabajos en www.enriquegomez.me
Suscribete
Notificame
guest
18 Comments
Nuevos
Antiguos Más votados
Inline Feedbacks
View all comments
Jere cruz
Jere cruz
2 años hace tiempo

Hola, Enrique. Si quiero comunicar varios sensores a través de rs485 entonces necesito muchos puertos series?. Que placa de desarrollo me conviene usar?, por lo general las de arduino no tienen más de 4, o se podría con un solo puerto armar un bus de rs485?

Santy
2 años hace tiempo

Hola Enrique, magnifica introducción. Estoy intentado hacer un localizador para mi mascota con el módulo GY-GPS6MV2, normalmente se conecta a una Arduino y demas, solo que me parece demasiado colgarle a la mascota un Arduino con el modulo y la bateria, quisiera saber si sería posible que este modulo trabaje de manera independiente a la Arduino. El mismo contiene 4 pines V+, v-, Rx y Tx, Supongo que me haría falta un Modulo UART para gestionar la recepción y envío de datos a un móvil son su debida aplicación. ¿Podrías ayudarme en lo que respecta al hardware? Soy programador de… Leer más »

Moises Jaramillo
Moises Jaramillo
3 años hace tiempo

me estoy iniciando en electrónica tengo 74 años, soy medico y quiero hacer un proyecto generador de campos pulsantes y vi internamente un equipo y trae 2 placas arduino uno, un transformador, una bobina como inductor pero lo mas abusivo de todo lo dan carisimo, vi tu vídeo de las conexiones de pwm y me parece que es una solución,actualmente también estudio arduino, por favor si alguien me puede ayudar se los agradeceré infinitamente.

Silvio Molina
Silvio Molina
3 años hace tiempo

la verdad q nadie me habia explicado esto nunca, te admiro y agradezco este aporte

Jairo
Jairo
3 años hace tiempo

Que gran informacion, realmente lo entendi todo, excelente explicacion y la captura del osciloscopio genial!

Jeamphier Hernandez
Jeamphier Hernandez
3 años hace tiempo

Algun libro free que ayude aprender comunicaciones desde el micro hasta la pc, como establecer ese lazo paso a paso. Me encuentro haciendo tesis y necesito conocer sobre eso

Luis Lule
Luis Lule
3 años hace tiempo

Que tal Enrique, oye tengo algunas dudas no se si me puedas ayudar, use un transductor MAX232 para pasar las señales de TTL a RS232 de una Raspberry 3 p+ para establecer una comunicación con un PC, por las pruebas que realice funciona de manera correcta, pero solo me funciona con una conexión directa me refiero a (tx > tx, rx > rx y gnd -gnd) , pero al realizar una conexión cruzada de (tx > rx, rx > tx y gnd -gnd) no funciona, lo que pasa es que el software de la PC con el que se esta… Leer más »

Emiliano Nunez
Emiliano Nunez
3 años hace tiempo

Y como sabe el receptor que el bit de parada es realmente el bit de parada y no un bit mas de datos?

Diego Iraburu
Diego Iraburu
3 años hace tiempo

Hola Enrique, tengo un proyecto con micropython que consiste en un maestro que manda b’a’ y el esclavo que lo lee. El problema es que mi esclavo lee b’\xfc’ y aunque cambie el carácter mandado por el maestro, el esclavo lee lo mismo, b’\xfc’.
No entiendo porque pasa esto ni cómo puedo solucionarlo.
Gracias

ismael
ismael
5 años hace tiempo

Hola,
Que niveles lógicos de tensión trabaja el puerto serial??
La lógica es positiva o negativa?

ismael
ismael
Reply to  Enrique Gómez
5 años hace tiempo

Tengo entendido que trabajan con tensiones lógicas de unos 9 voltios con lógica negativa y que para trabajar con TTL necesitas un conversor.

Un saludo

ismael
ismael
Reply to  Enrique Gómez
5 años hace tiempo

Ok gracias!!!
Un saludo