Comunicación RS232 a través del USB (parte 1)

Por muchos años las computadoras personales (PC) estuvieron equipadas con al menos un puerto serie, es decir, una interfaz para comunicaciones digitales cuyo funcionamiento se aproximaba al estándar RS-232-C. Estos puertos se usaban, entre otras cosas, para conectar equipos industriales y de laboratorio a las computadoras, y sus capacidades seguirían siendo suficientes para muchas tareas que se implementan con los PIC16. De hecho, se sigue fabricando equipos que cuentan con puertos serie para su configuración, vigilancia, diagnóstico o la totalidad de su comunicación.

Por lo anterior, dedico esta entrada de la bitácora a la implementación de puertos serie en computadoras personales que sólo cuentan con puertos USB, y que trabajan con el sistema operativo Ubuntu.

GtkTerm. El programa que usé en la PC para hacer las pruebas se llama GtkTerm (o Serial port terminal). Como la mayor parte de los programas para Linux, GtkTerm es gratuito y se puede obtener por Internet. Dependiendo de la versión de Ubuntu que tengas, podrás usar al menos una de dos opciones para instalarlo: desde el Centro de software de Ubuntu, y a través de la línea de comandos; en cualquiera de los casos debes trabajar desde una cuenta con permisos de administrador.

INSTALACIÓN DESDE EL Centro de software de Ubuntu. Si al efectuar una búsqueda escribiendo “Terminal por puerto serie” encuentras el paquete, podrás instalarlo con sólo dar algunos clics y escribir tu contraseña de administrador.

La opción de búsqueda del centro de software de Ubuntu 14.04 está en la esquina superior derecha. En este caso obtuve el programa deseado al buscar “Terminal por puerto serie”, otros nombres que podrían llevar al resultado serían “Serial port terminal” y “GtkTerm”.
En mi caso, al seleccionar el único resultado de la búsqueda, se desplegó un botón que decía Más información, al darle clic obtuve la pantalla que se muestra en esta figura. El botón para ordenar la instalación está a la derecha, casi hasta arriba. Una vez que tu estés en este punto y le des clic a Instalar, la PC te solicitará la contraseña de administrador. Poco tiempo después el programa estará instalado y disponible (aunque no funcional) para todos los usuarios de la PC.

INSTALACIÓN DESDE LA LÍNEA DE COMANDOS. En la Terminal (puedes presionar Ctrl + Alt + t para abrir el programa) da la orden sudo apt update para que la computadora verifique el contenido de los repositorios; tendrás que proporcional la contraseña de administrador para continuar. Después da el comando sudo apt install gtkterm; será necesario autorizar el uso del espacio requerido oprimiendo la tecla s. Poco tiempo después el programa estará instalado y disponible (aunque no funcional) para todos los usuarios de la PC.

PREPARAR GtkTerm. Para que los programas tengan acceso a los puertos serie y a sus remplazos USB, es necesario que las cuentas de usuario desde donde se ejecuten pertenezcan al grupo dialout (esto es parte de lo que hace a Ubuntu un sistema operativo seguro).

Incorporar a un usuario (o mejor dicho, una cuenta de usuario) a un grupo se hace mediante el comando addgroup. Así, el comando que hay que teclear se parece a sudo addgroup usuario dialout. El comando sudo se usa para obtener permisos para hacer los cambios, y la palabra usuario se remplaza por el nombre del usuario a incorporar al grupo. Puedes obtener más información del comando addgroup mediante la orden man addgroup.

Para que tenga efecto la incorporación de usuarios a grupos, basta con salir de la cuenta de administrador y entrar a la cuenta del usuario con que se trabajará. Si continuarás trabajando desde la cuenta de administrador, igualmente será necesario cerrar la sesión y abrirla nuevamente para que la incorporación del administrador al grupo tenga efecto, y por lo tanto, tengas acceso a los puertos.

EJECUTAR GtkTerm. Para ejecutar el programa basta con dar clic en el icono con forma de conector DB9.

Si el icono de GtkTerm no está en el lanzador de tu PC, da clic con el botón derecho en el icono Buscar, al aparecer el menú emergente selecciona Aplicaciones, de ser necesario, ordena mostrar N resultados más; busca el icono con forma de conector DB9 y dale clic. Si lo deseas, antes de dar el clic para ejecutar, puedes arrastrar el icono al lanzador.

Cuando ejecutes por primera vez GtkTerm, el programa te avisará que creó una configuración con parámetros por omisión (default) y te indicará dónde la guardó, dale clic a OK después de leer el mensaje. Para hacer las pruebas que describiré más adelante usé:

– Para seleccionar el puerto y la velocidad de trabajo: el menú Configuration, submenú Port, opciones Port y Baudrate.

– Para comprobar la actividad en las líneas Data Terminal Ready y Request to Send: el menú Control signals y las opciones Toggle DTR y Toggle RTS o los atajos F7 y F8.

– Para enviar un carácter de prueba, sólo presioné la tecla U.

– Para almacenar en un archivo la información recibida desde un PIC16: el menú File y la opción Save raw file.

ADAPTADORES Y CIRCUITOS PUENTE. Se usa con mucha frecuencia el término adaptador o convertidor USB – RS232 para designar a los dispositivos que usaremos. Se pueden conseguir en forma de cable para uso temporal en la PC, y como pequeñas tarjetas para incorporar dentro de los diseños. Por otro lado, es frecuente que los comercios que venden los adaptadores NO proporcionen información de como usarlos, simplemente dicen este adaptador es para el procesador A y este otro es para el B, y los precios varían de tal forma que el más caro cuesta unas 10 veces lo que el más barato. Así que compré los cinco que se muestran en las figuras siguientes e inicie la búsqueda de información y las pruebas.

Convertidor USB-RS232 para poner y quitar.
Adaptadores USB-RS232, normalmente para incluir dentro de los prototipos.

PRUEBAS. Realicé las pruebas siguientes en un puerto serie original y los 5 adaptadores mostrados anteriormente:

Inspección visual y búsqueda de información. Revisé los adaptadores para ver que tipo de conectores y señales manejan; también busqué instrucciones de uso, especificaciones y disponibilidad de manejadores (drivers).

Capacidad de la PC para reconocer al dispositivo. En Ubuntu a los puertos serie se les conoce como ttyS0, ttyS1, etc. (ttyS0 corresponde a COM1); a los adaptadores les corresponden los nombres ttyUSB0, ttyUSB1, etc. Así que la prueba sólo consistió en ver a través de GtkTerm si la computadora había reconocido los adaptadores, y usé las versiones 14.04 y 16.04 del Ubuntu para efectuarla; sólo realicé el resto de las pruebas en la versión 14.04.

Funcionalidad de las señales de control. La comunicación más elemental a través de los puertos serie sólo requiere de tres líneas: transmisión, recepción y tensión de referencia. Sin embargo, comenzar a garantizar la integridad de la información recibida puede requerir de las señales de control, es decir: DTR, DCD, RTS y CTS. Así que probé la capacidad de los adaptadores para manejar dos de estas líneas: DTR y RTS.

Transmisión desde la PC de una U a 115200 bps. En hexadecimal el código ascii de la U es 055, así que al usar un osciloscopio para ver la señal que sale del adaptador se observa una oscilación cuadrada (en teoría de 57.6 KHz al considerar que un periodo se forma con un 0 y un 1 consecutivos), y es muy fácil medir la duración y tensión de cada bit.

Recepción de paquetes de información a 9600 y 115200 bps. Utilizando un microcontrolador PIC16 envié paquetes de datos a la PC; cada paquete consistía de 255 cadenas de texto de 27 bytes cada una; con el GtkTerm almacené los paquetes recibidos en archivos, para después contar caracteres perdidos o alterados; para la transmisión a 9600 bps usé el oscilador interno del PIC a 4 MHz, y para minimizar el error al establecer la velocidad de 115200 bps usé un oscilador de 18.432 MHz. Programé al PIC para iniciar la transmisión de un paquete hasta que recibiera un byte desde la PC.

RESULTADOS (Inspección visual y búsqueda de información). Los adaptadores 2 y 5 no tienen terminales para las señales de control, observa las figuras siguientes.

Estos adaptadores no tienen posibilidad de conectar las llamadas señales de control.

Estos adaptadores, al igual que el puerto serie original y el convertidor tipo cable (1), permiten el uso de las señales de control como DTR y RTS.

Los adaptadores 1, 2 y 5 usan un conector USB tipo A (el de mayor tamaño), el adaptador 4 parece usar un conector mini-A (lo conecté con el cable que usan los Pickit) y el adaptador 3 usa un conector micro-B (el menor de los tres que se observan). Por cierto, las terminales para afianzar el conector USB a la placa del adaptador 2 están desoldadas.

En el convertidor tipo cable (1) y el adaptador 3 es visible la marca del fabricante, así que resultó fácil conseguir información; de hecho el convertidor (1) venía acompañado con manejadores (drivers) para diferentes versiones de Windows; nada para Linux, pero no fue necesario, ninguno de los adaptadores requirió manejadores adicionales para trabajar en Ubuntu.

En los cuatro adaptadores numerados del 2 al 5, pude observar que el elemento que hace la mayor parte del trabajo es el que se conoce como circuito puente; algunos ejemplos de puente son el FT232R, el PL2303 y la serie CP2102-9. Así que la hoja de datos de estos elementos (disponibles a través de este sitio) fue la fuente de información para usar los adaptadores; entre los datos más importantes que contiene este material están las tensiones (o voltajes) de trabajo.

Sólo encontré abundante información técnica del adaptador con el numero 3, puedes acceder a ella dando clic aquí, y complementarla con la hoja de datos del circuito CP2104.

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *