Depurando Sistemas Microcontrolados con el Puerto USB de la PC
Cuando se trabaja con sistemas microcontrolados, contar con herramientas adecuadas para la depuración de código es muy importante. Herramientas sofisticadas como: osciloscopios, analizadores lógicos y debuggers no siempre son económicamente factibles para muchos, especialmente para los estudiantes y aficionados. Muchos empiezan utilizando simplemente LEDs para visualizar los datos del programa y verificar el comportamiento de los algoritmos; una mejora significativa es usar una pantalla LCD de caracteres alfanuméricos.
En este tutorial se da un paso más delante mostrando un sistema sencillo para la depuración de sistemas microcontrolados, el cual permite usar el puerto USB de una computadora personal para visualizar datos de un sistema microcontrolado. La técnica básica no es nueva y tiene décadas de antiguedad, sin embargo aún hoy se la sigue usando donde sea conveniente por su sencillez y bajo costo.
Cómo Funciona el Sistema
El sistema se basa en el intercambio serial de información entre el microcontrolador y la computadora personal (PC), solo que en este caso en vez de usar el puerto serial RS-232 de la PC, se utiliza un puerto USB que funciona como Puerto Serial Virtual. Un driver de Puerto Serial Virtual para dispositivo USB permite que la PC maneje el dispositivo USB como si fuera un puerto serial del tipo RS-232, permitiendo de este modo usar el mismo protocolo de comunicación serial asíncrona (UART RS-232), a través de un puerto USB, en vez de tener que usar el protocolo USB como tal. Esto posibilita usar el sistema no sólo con una PC de escritorio sino también con computadoras portátiles, las cuales actualmente solo vienen con puertos USB y no con puerto serial RS-232. Por otra parte, muy pocos microcontroladores cuentan con un módulo de comunicación USB para conectarse directamente con una PC, pero la comunicación serial puede lograrse fácilmente hasta con los microcontroladores más pequeños que no incluyen módulo de comunicación USB.La idea es simple; consiste básicamente en enviar los datos desde el microcontrolador, a través de su módulo UART a un circuito interfaz UART a USB, y de este circuito interfaz, a la PC mediante uno de sus puertos USB. Si el microcontrolador no posee un módulo UART en hardware, se puede utilizar un pin digital de salida que esté libre e implementar con él la comunicación serial mediante software con el método conocido como "bit banging" (generación manual de las señales); lo cual no es díficil de lograr con el uso de librerías gratuitas que vienen incluidas con los compiladores de lenguaje C para microcontroladores, o librerías disponibles en Internet. Con dos pines libres en el microcontrolador es posible realizar una comunicación bidireccional entre el sistema microcontrolado y la PC.
Para el circuito de interfaz UART a USB en este tutorial utilizamos el chip FT232RL Puente USB a UART, el cual se encarga de toda la conversión de señales del protocolo UART a USB y viceversa; el circuito es muy simple como se verá más adelante.
Para la visualización de los datos en la PC utilizamos el programa Hyperterminal, una "terminal virtual de teletipo" (TTY) que posibilita el envio y recepción de caracteres ASCII entre la PC y cualquier dispositivo externo con puerto serial UART. Otros programas similares que pertenecen a la misma categoría y que también pueden usarse son Teraterm, Realterm, Putty y otros.
Placa de Interfaz USB a UART
Como ya se dijo, par que un microcontrolador (con su puerto UART) pueda comunciarse con una PC (a traves de su puerto USB), se necesita una interfaz que convierta las señales de comunicación de UART a USB y viceversa. El circuito para lograr esto es muy simple y está basado en el chip FT232RL:
Debido a que el chip FT232RL viene en un empaque SSOP se hace un tanto dificil preparar y soldar la placa de interfaz, más aún si uno no tiene experiencia previa soldando componentes en empaque SMD (Surface Mount Device o Dispositivo de Montaje Superficial). Para quien no quiere, o tiene la posibilidad de fabricar su propia plaquita, es posible comprar una placa prefabricada de conversión de empaque SSOP a DIP, la cual permite incluso su conexión al breadboard.
Placa SSOP a DIP 28 Pines | Chip FT232RL USB a UART |
Otra opción más costosa, pero que no requiere emsamblaje adicional es comprar directamente una placa de desglose con todos los componentes incluidos: el chip FT232RL, el conector USB, capacitores, LEDs indicadores y todo lo necesario.
Interfaz USB a UART Completa |
Instalación de los Drivers USB Para la Interfaz
Para que la interfaz sea reconocida por la PC como un dispositivo USB válido y funcional, es necesario instalar los drivers USB para el chip FT232RL. Típicamente la instalación es automática si se siguen estos pasos:Importante: Los siguientes pasos presuponen que el circuito de la interfaz USB a UART esté correctamente soldado o conectado; es muy recomedable cerciorarse de ello las veces que sean necesarias.1. Cerciorarse de que La PC en la cual se va a instalar los drivers esté conectada a Internet.
2. Conectar la placa de interfaz a la PC mediante un cable USB.
3. Una vez que la PC detecta la conexión de la interfaz, comienza la instalación automática de los drivers. El sistema operativo busca y baja de Internet de manera automática los archivos necesarios para la instalación de los drivers; simplemente se deben seguir los pasos que se indican en la pantalla mediante las ventanas emergentes de instalación.
La instalación de los drivers se asemeja bastante a la instalación de otros dispositivos USB como impresoras o cámaras digitales; quienes hayan instalado antes este tipo de dispositivos no tendrán mayores problemas para instalar los drivers de la placa interfaz.
Verificación de la Instalación de los Drivers
Junto con el driver USB para el chip FT232RL, se instala un segundo driver de Puerto Virtual COM (Virtual COM Port) para el mismo chip; esto permite que la interfaz sea reconocida por el sistema operativo de la PC como un puerto serial virtual COM (similar al puerto RS-232 de la PC). De este modo, para la PC, la interfaz es simplemente otro dispositivo serial a través del cual puede comunicarse mediante el protocolo serial asíncrono (UART).
Una vez instalados los drivers, el dispositivo aparece listado como un puerto serial (virtual) con un número de puerto asignado al mismo, el cual varía de una PC a otra (COM 4, COM 10, COM 22, etc.)
Para verificar el número de puerto asignado ir a:
Mi PC -> Propiedades del Sistema -> Administrador de Dispositivos -> Puertos (COM & LPT)
Ahí debe aparecer listado como "USB Serial Port (COMx)" o "Puerto Serial USB (COMx)" en español. En este caso "x" es el número de puerto asignado por el sistema operativo, el cual varía de una máquina a otra.
Software Terminal
Los programas como Hyperterminal emulan las antiguas terminales seriales TTY usadas para enviar comandos y recibir datos de las computadoras "mainframe" de décadas atrás. Con una terminal emulada como Hyperterminal es posible comunicarse desde la PC con otros dispositivos externos que cuenten con un puerto serial, mediante caracteres de texto ASCII. Si podemos desde el microcontrolador enviar, recibir e interpretar caracteres ASCII, podremos entablar la comunicación entre la PC y el sistema microcontrolado.Ejemplo de Aplicación
El siguiente es solamente un ejemplo de la aplicación de este sistema en un proyecto real. El proyecto que se está depurando implementa la comunicación inalámbrica entre dos nodos inalámbricos de sensores, cada uno formado por un microcontrolador y un tranceptor de radiofrecuencia (en este caso el RFM12B ). Por las características del proyecto no es dificil entender por qué es importante contar con una forma de visualizar los datos que se transmiten entre ambos nodos para la verificación del funcionamiento del protocolo de comunicación inalámbrica; sin la posibilidad de verificar la información transmitida y recibida, es dificil avanzar en el diseño y la implementación del mismo.
Los detalles específicos del proyecto escapan del enfoque de este tutorial; solamente explicaremos brevemente la parte relacionada con la adquisición y visualización de los datos, como un ejemplo del funcionamiento del sistema de depuración mediante USB.
La siguiente fotografía muestra los prototipos en desarrollo; un breadboard en el cual están armados ambos nodos inalámbricos. Uno de ellos está conectado al cabezal de la intefaz USB a UART mediante dos cables (transmisión y tierra). A su vez, la interfaz está conectada a la PC mediante su cable USB respectivo.
Las siguientes líneas de código ejemplifican la manera en la que se está enviando la información pertinente desde el microcontrolador. La información que se desea monitorear en este caso consiste básicamente de un paquete de datos del protocolo de comunicación inalámbrica contenido en un buffer:
En este caso se ha elegido una velocidad de 9600 baudios para la transmisión serial, 8 bits de datos, 1 bit de inicio, 1 bit de stop y sin paridad. Esta misma configuración debe planterase en la terminal virtual antes de abrir el puerto respectivo (veremos esto más adelante).
La siguiente porción de código pertenece a la función mostrar_debug () usado para el envío de los datos a la PC:
La función itoa(); se encarga de la conversión de los números enteros (bytes del paquete) a cadena de caracteres; dicha cadena a su vez es almacenada en el buffer provisional buf[3] (3 caracteres como máximo para enteros de 8 bits sin signo, en el rango de 0 a 255). Esta función es estándar en el lenguaje C y debería encontrarse incluida en las librerías de cada compilador.
La funcion PutByte() de transmisión serial UART que se encarga de enviar un caracter de texto a la vez al puerto serial del microcontrolador; es también una función estándar de librería contenida en el compilador; sin embargo el nombre de la función puede variar de una librería a otra.
La función outst() manda varios caracteres contenidos en un buffer,de una sola vez a través del puerto UART del microcontrolador:
Para comenzar a monitorear la información en la PC seguimos los siguientes pasos:
1. Conectar el prototipo a la interfaz USB a UART.
2. Conectar la Interfaz USB a UART al puerto USB de la PC.
3. Abrir Hyperterminal y configurar apropiadamente el puerto.
En Hyperterminal elegir el Puerto Virtual COM asignado a la interfaz USB a UART:
Para que la comunicación serial con el microcontrolador sea correcta, debe elegirse la misma configuración definida en el microcontrolador: Velocidad de 9600 baudios, 8 bits de datos, 1 bit de inicio, 1 bit de stop y sin paridad. Como ya se mencionó, el número de Puerto Virtual COM elegido en la configuración debe coincidir con el número asignado por el sistema operativo de la PC al momento de la instalación de los drivers (ver más arriba la sección de instalación de drivers).
4. Abrir el puerto de comunicación.
5. Energizar o activar (recién en este punto) el prototipo o circuito que se desea monitorear.
La siguiente imagen muestra la ventana del programa Hyperterminal visualizando los datos del buffer de comunicación inalámbrica en el microcontrolador:
Ventajas del Sistema
- Es económico.
- Es mucho más versátil que la utilización de LEDs o un display LCD.
- Solamente requiere de 1 pin para la comunicación con la PC; 2 pines para una comunciación bidireccional.
- El hecho de usar el protocolo serial asíncrono (UART) mediante el puerto USB, en vez del protocolo USB como tal, posibilita usarlo con microcontroladores que no cuentan con un módulo de comunicación USB incorporado.
- Puede ser usado con cualquier microcontrolador, incluso con los más pequeños que no cuentan con módulo UART en hardware, mediante la implementación del protocolo serial asíncrono en software.
- Como se usa el puerto USB, esto posibilita el uso de computadoras portátiles para el monitoreo y la depuración de los sistemas embebidos.
Desventajas del Sistema
- Introduce un retardo que puede ser considerable (dependiendo de la velocidad de transmisión elegida y la cantidad de información transmitida), lo cual debe tomarse muy encuenta a fin de no entorpecer el correcto funcionamiento de los algoritmos principales de la aplicación, sobre todo de los que requieren precisión de tiempo.
- El método requiere añadir a la aplicación todo el código necesario para la comunicación serial, aunque solo momentáneamente y durante todo el periodo de depuración y pruebas; cuando ya se no se lo necesite, se puede borrar este código provisional, ó dejarlo incorporado en el sistema para futuro mantenimiento. Si la comunicación se la realiza usando un módulo UART en el microcontrolador, el código necesario es más pequeño, pero si se lo implementa mediante software (bit banging), el código es un poco más extenso.
Adquisición de Datos Mediante el Puerto USB de la PC
Con toda la información hasta aquí desarrollada, no es difícil imaginar la posibilidad de usar también este mismo sistema para la adquisición de datos en la PC, mediante una conexión serial cableada o desde un sistema remoto mediante una conexión serial inalámbrica (ver el artículo: Comunicación Serial Mediante Radiofrecuencia).
Usando Hyperterminal u otro programa similar se podría por ejemplo, imprimirse primeramente un menú simple en la pantalla de la PC, y recibir mediante el teclado los comandos para cada opción del menú. Si eso no es suficiente se podría crear una interfaz gráfica personalizada para la PC, desarrollando un programa "a medida" en algún lenguaje visual como Visual C++, Visual Basic, Visual C#, el lenguaje Tcl/Tk, la plataforma LabView u otra herramienta similar.
El puerto paralelo (LPT) tan popular años atrás para interconectar a la PC con el mundo real, ya ha caído en desuso, salvo para mantenimiento de retro-compatibilidad con sistemas antíguos; para diseños nuevos ya casi nadie contempla el uso de un puerto paralelo para la adquisición de datos en la PC. El uso de puertos USB es hoy por hoy la alternativa principal para la interconexión de sistemas embebidos con la PC que no necesiten mayor sofisticación; sin embargo llama mucho la atención cómo hasta hoy en día en universidades latinoamericanas, a los estudiantes de electrónica o ciencias de la computación sólo se les enseña a trabajar con el puerto paralelo de la PC, en desmedro de enfoques más modernos (para nada complicados, sino todo lo contrario) como el uso de puertos USB o incluso Bluetooth.
FT232RL: Chip Multiuso
Quienes leyeron nuestro artículo titulado "Arduino Simple y de Bajo Costo: Breadbo-Arduino" ya habrán notado que la interfaz usada en ese artículo es exactamente la misma que en el artículo referente a Arduino.
Resulta que el chip FT232RL incluso tiene muchos más usos; básicamente se lo puede usar en cualquier aplicación que necesite una interconexión de señales seriales UART con un puerto USB de la PC.
Esta misma interfaz puede ser usada para programar, configurar e interconectar con la PC los módulos inalábricos XBee y Synapse, ambos de tecnología ZigBee. En un futuro artículo veremos de qué manera esto es posible.
Conclusión
Para desarrollar exitosamente un proyecto embebido es imprescindible contar con algún sistema para la depuración del código, que nos permita visualizar la información interna del microcontrolador a fin de verificar el correcto funcionamiento del programa. Contar con herramientas profesionales propias está fuera de discusión para muchos estudiantes y aficionados a la electrónica debido al elevado costo de los mismos; de ahí que usar esta simple interfaz USB a UART sea una opción muy conveniente para quienes no cuentan con mucho presupuesto.
Si eres estudiante o aficionado a la electrónica y todavía estás usando LEDs y displays LCD para hacer tu depuración, éste sistema aportará grandes mejoras a tu metodología de desarrollo y depuración de sistemas microcontrolados. Lo digo por propia experiencia.
Raúl Alvarez Torrico
www.TecBolivia.com
Deseo recibir noticias de nuevos proyectos, artículos, materiales y promociones especiales.
Productos Relacionados en Nuestra Tienda Virtual
{product_snapshot:id=77|113|135|78|64}