Tercer Congreso Virtual, Microcontroladores y sus Aplicaciones
Congreso 2014, Pgina 1
Interfase serie de adquisicin para la enseanza de la programacin de microcontroladores.
Walter Gemin - Juana Fernndez - Miguel Revuelta - Ral Rivera - Roberto Hidalgo Laboratorio de Procesos y Mediciones de Seales Universidad Nacional de Mar del Plata Argentina Correo-e: geminw@hotmail.com Abstract. En este trabajo se describe una interfase de adquisicin serie que es utilizada para la enseanza de la programaxcin de microcontroladores. Este tipo de prctica se presenta como un proyecto que los alumnos deben desarrollar, en un orden creciente de dificultad, aplicando los conceptos tericos-prcticos que van incorporando en el curso. Finalizado el curso, los alumnos habrn diseado un sistema de adquisicin con distintas funcionalidades, tales como, digitalizacin de varios canales para la lectura de sensores, alarmas, controlador de un proceso industrial, o un osciloscopio digital de dos canales. El proyecto comprende desde el punto de vista circuital la construccin de una placa de adquisicin serie compatible RS232 y USB basada en un microcontrolador PIC y el desarrollo del firmware basado en comandos. En este trabajo se presenta la placa utilizada, el mtodo de carga y actualizacin del firmware y el intrprete de comandos.
1 Introduccin En el trabajo descripto, el alumno debe armar y poner en funcionamiento un sistema de adquisicin compuesto de una interfase serie basada en un microcontrolador PIC18F2550, que se conecta a una computadora personal (PC) mediante puertos de comunicacin RS232 o USB. Ref. [1], [2]. Adems el alumno debe desarrollar el firmware del microcontrolador para cumplir los requisitos propuestos en una gua de trabajos prcticos. El firmware del microcontrolador se desarrolla en lenguaje C, mediante el compilador cruzado PICC para implementar la atencin a comandos similares a los conocidos comandos AT por parte de la interfase. Al finalizar el curso, los alumnos disponen de una placa de adquisicin verstil y econmica, desarrollada ntegramente por ellos, de la cual conocen en detalle el hardware y firmware que la componen. Esto les permite alcanzar un conocimiento avanzado y experiencias prcticas en el diseo y configuracin de sistemas basados en microcontroladores. Ref. [3] 2. Interfases de Entrada/Salida Un aspecto de especial inters para el desarrollador de circuitos basados en microcontroladores son las interfases de entrada/salida. A travs de los pines del chip asociados a las interfases de entrada/salida el microcontrolador puede interactuar con otros circuitos externos enviandoles seales de comando o recibiendo estmulos correspondientes a variables externas. Por lo general varios pines de datos son bidireccionales, es decir pueden configurarse como entradas o salidas. Cuando son entradas, pueden adquirir datos interpretando el valor de voltaje como un valor lgico 0 o 1, mientras que cuando son salidas pueden entregar una seal binaria de voltaje cuya magnitud depender del valor lgico 0 o 1. Monitoreando el valor de las entradas, el microcontrolador puede responder a eventos externos y realizar una cierta accin, como variar las seales de salida de acuerdo al valor en las entradas. Las caractersticas de entrada/salida utilizadas son: -Puertos paralelos como entradas o salidas digitlaes y puerto series (UARTs, Universal Asynchronous Receiver/Transmitter) y USB. - Conversores Analogicos-Digitales (A/D, analog- to-digital) para convertir un nivel de voltaje en un cierto pin a un valor digital manipulable por el programa del microcontrolador. - Moduladores por Ancho de Pulso (PWM, Pulse- Width Modulation): para generar ondas cuadradas de frecuencia fija pero con ancho de pulso
2 modificable. La alta integracin de subsistemas que componen un microcontrolador reduce el nmero de chips, la cantidad de pistas y espacio que se requerira en un circuito impreso si se implementase un sistema equivalente usando chips separados. - Interrupciones: para responder a eventos externos, los micrcontroladores cuentan con un recurso conocido como interrupciones. Las interrupciones son seales que se generan externa o internamente al microcontrolador que detienen la ejecucin normal del programa para ejecutar alguna subrutina de respuesta al evento. Una vez ejecutada la subrutina de interrupcin la ejecucin del programa contina en el punto en que se encontraba antes de generarse la interrupcin. Un ejemplo tpico es el de un botn pulsador conectado a un pin de entrada. Una vez pulsado, se genera una seal de interrupcin que iniciar la ejecucin de la subrutina de interrupcin, que por ejemplo podra activar un pin de salida para encender un led. En este Proyecto se utilizan una serie de interrupciones que permiten configurar el comportamiento del microcontrolador por eventos, dado que mantiene ejecutando el lazo principal del programa y atiende al puerto de entrada/salida cuando este lo requiere. Las interrupciones programadas en esta interfase son las de finalizacin de una conversin A/D, al arribo de un carcter al puerto serie o el cumplimiento de un periodo de tiempo fijado por un timer o temporizador. 3. Diagrama de la Interfase La Fig. 1 muestra la distribucin de pines de entrada/salida del microcontrolador. La Fig. 2 muestra el circuito de la placa propuesta. La Fig. 3 muestra un ejemplo de una placa armada por un grupo de alumnos. En la ltima figura se observan la distribucin de puertos utilizada, entradas digitales B0 y B1, salidas digitales B2 y B3 y entradas analgicas A0, A1 y A2. Figura 1: Distribucin de pines del microcontrolador Fig. 2: Diagrama esquemtico de la placa Figura 3: Imagen de la placa 4. Control Basado en Comandos Los comandos AT son instrucciones codificadas que conforman un lenguaje de comunicacin entre una PC y un Terminal MODEM, como un protocolo de comunicacin para configurarlo y proporcionarle instrucciones, tales como marcar un nmero de telfono. Muchos otros dispositivos perifricos adoptaron esta serie de comandos de comunicacin con algunas adaptaciones tales como la telefona mvil GSM. Dentro del computador la comunicacin de la CPU con cada interfase tambien adopta la modalidad de comandos que asegura compatibilidad entre la interfase y el sistema operativo, independientemente del fabricante de la misma. Los comandos consisten en una secuencia de caracteres ASCII que sintetizan el significado de la Tercer Congreso Virtual, Microcontroladores y sus Aplicaciones Congreso 2014, Pgina 3
operacin que se quiere ejecutar. De esta forma asignando un comando a cada operacin del repertorio que soporta la interfase, se puede armar un lenguaje de comunicacin que el microcontrolador interpreta y ejecuta devolviendo la informacin requerida o actuando sobre el entorno. El resultado de establecer un estandar para los comandos, como el propuesto en este trabajo, permite independizar el manejo de la interfase del firmware de la misma, es decir que las placas de todos los grupos de alumnos son compatibles entre si. Esto le otorga a la programacin de las interfases hardware y software, un nivel de abstraccin que facilita el desarrollo de sus aplicaciones. La Tabla 1, muestra el nombre, formato y descripcin de los comandos ASCII de la interfase. Tabla 1 Comando Formato Descripcin NCAN NCAN2\n Selecciona nmero de canal analgico entre 0 y 2. RDAS RDAS\n Lee el conversor de aproximaciones sucesivas. Devuelve el resultado por RS232 en formato ASCII WRDO WRDO1\n Escribe las salidas digitales. El valor a escribir puede variar entre 0 y 2 RDDI RDDI\n Lee las entradas digitales. Los valores los enva por RS232 en formato carcter y puede variar entre 0 y 2. SCAN SCAN12\n Escaneo automtico de canales. 1: Canal de Inicio, 2: Canal fin. INIL INIL12345\n INIL12345\n Inicia la adquisicin contnua. 12345 corresponde al valor numrico en milisegundos del tiempo entre muestras. DETA DETA\n Detiene la adquisicin contnua. IDEN IDEN\n Identificacin de la placa.
5. Programacin de la Interfase 5.1 Proceso de Desarrollo El proceso de desarrollo del firmware de un microcontrolador se puede dividir en las siguientes etapas principales. Ref [4]: 5.2 Desarrollo del software. Consiste en escribir y compilar/ensamblar el programa que determinar las acciones del micrcontrolador y su funcionamiento. Existen distintas maneras de desarrollar el programa, dependiendo del lenguaje inicial que se utiliza para escribir el programa: Lenguaje Assembly - Lenguaje de Mquina/Cdigo Objeto (.asm) ensamblador (.hex, .o, .bin, .coff) Lenguaje de Alto Nivel - Lenguaje Assembly - Lenguaje de Mquina/Cdigo Objeto (.c, .cpp) compilador (.asm) ensamblador (.hex, .o, .bin, .coff) La Fig. 4 muestra las dos alternativas tpicas que tiene el desarrollador para generar el cdigo de mquina que es entendido por el microcontrolador. La programacin en compiladores cruzados C para el desarrollo del firmware de los microcontroladores propuesto en el desarrollo de este proyecto, tiene la ventaja de ofrecer las librerias avanzadas requeridas en los algoritmos de clculo y comunicacin entre dispositivos mediante USB, Ethernet, WIFI y Xbee. Figura 4: Alternativas de programacin
4 5.3 Programacin del Microntrolador. Este proceso corresponde a utilizar un programa en la PC que toma el cdigo ensamblado (.hex, .o, .bin, .coff) para el microcontrolador especfico, y lo enva mediante algn puerto (serie, paralelo, USB, etc.) a un dispositivo que lo escribe en la memoria del mismo. Se acostumbra denominar programador tanto al sofware como al hardware involucrado para este propsito, lo cual puede prestarse a confusin. El software programador a veces recibe tambin el nombre de downloader, ya que su propsito es descargar o transferir desde la PC al microcontrolador el cdigo ensamblado. La Fig. 5 muestra las componentes involucradas en el proceso de programacin. 5.4 Tcnicas Avanzadas: Programacin Mediante Bootloaders. El Bootloader es un pequeo programa que se descarga en el microcontrolador y tiene por finalidad simplificar el desarrollo de programas ya que actuan como un programa residente que tiene por finalidad obtener via el puerto serie el cdigo del programa que se requiere ejecutar, grabandolo en la memoria de programa. Para desarrollar programas usando Bootloaders, por puerto serie RS232, los pasos bsicos son: Grabar el cdigo del Bootloader en la memoria del microcontrolador empleando un programador estndar. Armar un circuito con un conversor serie RS-232 a TTL como el circuito integrado MAX232. Compilar/ensamblar el cdigo de la aplicacin desarrollado con algn compilador/ensamblador. Colocar el circuito con el microcontrolador en modo de comunicacin serie y descargar el cdigo binario .hex usando el software Bootloader. Figura 5: Proceso de grabacin
Reiniciar el circuito con el microcontrolador en modo normal para que se ejecute el programa descargado a travs del Bootloader. La ventaja de utilizar esta tcnica es que permite muy facilmente hacer actualizaciones del cdigo firmware, sin necesidad de extraerlo del circuito para colocarlo en un programador estndar. En este mtodo el programador de microcontroladores se emplea solo una vez para descargar el Bootloader al microcontrolador. 6. Interprete de Comandos
En la Tabla 1, se observa que cada comando est compuesto por una secuencia de cuatro caracteres en mayscula que lo identifican, seguido desde cero hasta cinco caracteres, que representan los parmetros de la accin completa que deber ejecutarse. Finaliza siempre en un caracter especial (\n) de nueva lnea, que sirve para indicar el fn del comando, cualquiera sea su extensin.
El cdigo que atiende los comandos utiliza la interrupcin del puerto serie, que se ejecuta cuando arriba un caracter. El Listado 1, muestra un sencillo ejemplo de interprete, con las lneas de programa mnimas que deber tener.
Basicamente se arma un vector (buffer[ ]) de n elementos, donde se almacena la secuencia de caracteres leidos con la instruccin getch(). Sobre cada caracter recibido se verifica la presencia del ASCII hexadecimal (0A) que representa el fin de lnea (\n), con el cual se indica el final del comando, concluyendo la lectura. Cuando esto ltimo se cumple se analiza el contenido del vector comparandolo con los comandos establecidos para la interfase. Para esto se asigna a la variable comando el nombre del comando que se quiere evaluar, en este ejemplo NCAN, y se ejecuta la funcin comparar_comandos() para evaluar si ocurri este comando. Si es as se cumple en la lnea if (comparar_comandos()==1) y se ejecuta dentro del if el comando solicitado, si esto no ocurre, se evalua otro, almacenandolo en la variable comando y repitiendo el procedimiento descripto. En este ejemplo el cuarto elemento del comando es el nmero de canal que se desea seleccionar, para esto se ejecuta la lnea canal[0]=buffer[4], luego se convierte ese valor de ASCII a entero i=atoi(canal) y por ltimo se selecciona el canal en el multiplexor del microcontrolador mediante set_adc_channel(i). La lnea siguiente printf("Canal = %u\n\r",i), enva un mensaje de retorno a la PC confirmando la ejecuacin del comando solicitado.
Tercer Congreso Virtual, Microcontroladores y sus Aplicaciones Congreso 2014, Pgina 5
Listado 1 #int_RDA void RDA_isr(void) { int8 i; char canal[1]; int16 dato; buffer[next_in] = getc(); next_in++; if (buffer[next_in-1]==0x0A) { next_in=0; strcpy(comando,"NCAN"); if (comparar_comandos()==1) { canal[0]=buffer[4]; i=atoi(canal); set_adc_channel(i); printf("Canal = %u\n\r",i); } // Fin del interprete de comando } } // Fin de la interrupcin
7. Conclusiones Lo necesario para llevar adelante este diseo requiere un mnimo de equipamiento y espacio fsico y permite intensificar las experiencias prcticas con microcontroladores, que relacionan los problemas de ndole terico con situaciones reales. La modalidad de trabajo propuesta requiere una PC con el software de desarrollo instalado compuesto del compilador cruzado PICC y la interfase de comunicacin Hyperterminal para prueba y depuracin de comandos que ejecuta el microcontrolador, adems del armado de un circuito sencillo que conforma la interfase. Las caractersticas de esta interfase y el entorno de desarrollo utilizado, permite transformar fcilmente el mismo repertorio de comandos de serie RS2323 a USB, mediante la modalidad de puerto serie virtual. Esto ltimo permite hacer pruebas de funcionamiento, desde una aplicacin de terminal (Hyperterminal) para cualquiera de los dos tipos de comunicacin serie. Referencias [1] Antonio R. Tafarena, Teora y Diseos con Microcontroladores PIC, UTN Mendoza. 2005. [2] Microchip Data Sheet, PIC 18F2550. [3] Angulo J.M.,: Microntroladores PIC. Diseo prctico de aplicaciones. Mc Graw-Hill. 1999 [4] Sanchez Julio, Canton Maria: Microcontroler Programming. Microchip PIC, CRC Press, Taylor and Francis Group, 2007.
Copyright 2014. Walter A. Gemin: El autor delega a la Organizacin del Tercer Congreso Virtual de Microcontroladores la licencia para reproducir este documento para los fines del Congreso ya sea que este artculo se publique en el sitio web del congreso, en un CD o en un documento impreso de las ponencias del Segundo Congreso Virtual de Microcontroladores.