LABORATORIO DE SISTEMAS MICROPROCESADOS PRACTICA No. 3 Conocimiento del software de desarrollo ATMEL Studio 6
OBJETIVO: Aprender a utilizar una de las herramientas existentes para el desarrollo de sistemas basados en los microntroladores AVR, específicamente específicamente el ATMEL Studio 6.
MARCO TEÓRICO: ATMEL Studio 6 es la evolución más reciente de las herramientas de software que ofrece ATMEL.
El AVRStudio 4 es un ambiente integrado de desarrollo (IDE) para los microcontroladores AVR de 8 bits, al que se añade las funcionalidades de AVR Toolchain y WinAVR. Con AVR Toolchain se pueden escribir los programas en Assembler y para escribir en Lenguaje C se necesita instalar WinAVR. El AVR Studio 5 tiene las mismas características que el AVR Studio 4 para los microcontroladores AVR de 8 y 32 bits, no necesita encadenarse a otras herramientas debido a que tiene incorporado el compilador de Lenguaje C/C++. También, incluye el AVR Software Framework que consiste en una colección de códigos fuentes que pueden ser consultados por medio de Internet en el servidor del fabricante, para luego l uego incorporar a los proyectos del usuario. El ATMEL Studio 6, que actualmente es el software que se encuentra en la página web del fabricante, es el IDE para los microcontroladores ATMEL de las arquitecturas AVR y ARM Cortex-M. Estos paquetes contienen tres herramientas para la creación, actualización y depuración de programas para microcontroladores ATMEL, escritos en Lenguaje Ensamblador o Assembler, que son: el EDITOR, el ENSAMBLADOR y el SIMULADOR. permite crear y modificar los Módulos Módulos Fuentes de los programas, que son El EDITOR permite archivos con extensión .asm, donde se encuentran textos planos conformados por líneas que contiene: Instrucciones del programa Comentarios Directivas del ensamblador Controles para el ensamblador • • • •
Una instrucción de programa es el mnemónico o código simbólico que se transforma en lenguaje de máquina, mediante el ensamblador, para luego ser grabado en la memoria del programa. Los comentarios son textos que el programador utiliza para documentar los programas y que el ensamblador no toma en cuenta. Las directivas del ensamblador se usan para comprender la estructura del programa y facilitar modificaciones posteriores, estos códigos no generan instrucciones y algunos permiten crear tablas de datos, mensajes, etc. Los controles para el ensamblador son acciones que el programador define para realizar el proceso de ensamblado en forma adecuada. Muchos programas son demasiado largos y complejos para escribirlos como una solo archivo. Las soluciones se vuelven más simples cuando el código se divide en varios módulos o subprogramas que pueden ocupan varios archivos. Los beneficios de este tipo de programación son:
Desarrollo eficiente de programas: La programación ocupa menos tiempo, debido a que los subprogramas son fáciles de estructurar, escribir y comprobar, en comparación con los que se realizan en un solo módulo. Una vez que se han definido las entradas y salidas de cada módulo, el programador proporciona la información requerida y verifica la exactitud de cada módulo examinando los resultados. Terminadas estas pruebas, los módulos separados se unen y son ensamblados como un solo programa ejecutable, que finalmente puede ser sometido a las últimas pruebas. Uso múltiple de subprogramas: El código escrito para un programa es a menudo útil para otras soluciones y la programación modular permite guardar bloques de instrucciones para ser utilizadas en el futuro. Un nuevo código puede utilizar otros módulos que estén previamente creados y que cumplan con los requisitos de entrada y salida. También se tiene la facilidad de guardar rutinas que son usadas con ciertos programas; es decir, que no estén disponibles para todos los casos. Facilidad de depuración y modificación: Los programas modulares son por lo general más fáciles de depurar que otro tipo de programas, debido a que las entradas y salidas para cada módulo están bien definidas, por lo que se pueden aislar los problemas que presentan cada módulo en forma individual. El ENSAMBLADOR Es la herramienta de software que simplifica la tarea de traducir las instrucciones que se encuentran en el Módulo Fuente escritas en código simbólico o Assembler en un código ejecutable o Lenguaje de Máquina, generando el Módulo Objeto que sirve luego para grabar el programa en la memoria del microcontrolador para su ejecución. Únicamente cuando el ensamblado es exitoso, el resultado se almacena en un archivo de extensión .hex, mediante textos de números hexadecimales siguiendo un formato bien definido. También se almacena en otro archivo de extensión .obj en código binario, que no se puede abrir como texto. Un tercer archivo de extensión .lss se genera y contiene al
Módulo Fuente y al Módulo Objeto juntos, es un archivo de texto que sirve para visualizar el proceso de ensamblado. Todos estos archivos tienen el mismo nombre, diferenciándose únicamente en la extensión y que al agruparlos en una sola carpeta juntos con otros archivos se forma el Proyecto de Solución. Cuando el ensamblador no puede obtener el código de máquina de todo el programa, debido a errores en el Módulo Fuente, no se genera ninguno de los archivos antes mencionados y se debe atender los mensajes emitidos para corregir mediante el Editor.
El SIMULADOR Una vez obtenido el Módulo Objeto se puede grabar el programa en el microcontrolador para comprobar su funcionamiento en algunas de las herramientas disponibles, entre ellas se puede utilizar un Simulador. El Simulador que viene incorporado en el ATMEL Studio 6, es un simulador que mediante ventanas de textos muestra los cambios que se producen en los contenidos de los Registros, Memorias y Pórticos del microcontrolador, a medida que se ejecuta el programa. Las ejecuciones pueden ser de una sola vez, paso a paso o con puntos de parada, estas últimas que permiten detectar fallas en la implementación del algoritmo del programa para ser corregidas mediante el Editor.
Breve descripción del entorno ATMEL Studio 6 Una vez invocado el entorno se despliega la Página Inicial, donde se puede escoger entre crear un Nuevo Proyecto, abrir Ejemplos de Proyectos o Proyectos Elaborados, cuyo listado más reciente también se muestra. Además, existen enlaces a las diferentes ayudas que el programador necesita.
Nuevo Proyecto Ejemplos de Proyectos Proyectos Elaborados
AYUDAS Listado
Al escoger la creación de un nuevo proyecto ( New Project… ), en la ventana que se despliega para proyectos en Assembler, llenar el nombre del archivo de extensión .asm y de la carpeta del proyecto (que se puede rellenar automáticamente). También se debe escoger la ubicación en donde se van a crear la carpeta. Luego pulsar OK .
Nombre del Archivo
Ubicación donde se crean
Nombre de la Carpeta
En la ventana Device Selection se escoge al microcontrolador con el cual se desarrolla el proyecto, ejemplo el ATmega164P. Antes de confirmar se muestran enlaces sobre información del dispositivo y de las herramientas de deputación.
Hoja de Datos
Herramientas para Depuración
A partir de aquí el entorno está operativo. Se abre la ventana donde se edita el programa y otras dos situadas a la derecha donde se puede navegar por los componentes de la solución y las respectivas propiedades. En la parte inferior se encuentra la ventana de salida de resultados al realizar el ensamblado.
Ventana del EDITOR
Componentes de la Solución
Propiedades de los Archivos
Los textos se escriben con mayúsculas o minúsculas que el ensamblador no diferencia. Se recomienda que sea una instrucción por línea respetando el formato de las columnas de: Etiqueta, Código de la Operación, Operandos y Comentarios. Que con la ayuda de los colores que se generan automáticamente se puede leer los programas con facilidad.
Texto del PROGRAMA
Al momento de invocar el ensamblado del programa, se encadena automáticamente con el archivo m164pdef.inc, que es un archivo de texto suministrado por el fabricante con las direcciones de todos los registros de Entrada y Salida del ATmega164P, asignadas a unas etiquetas que corresponden a los nombres de los registros que Atmel utiliza en su documentación. De esta forma, es fácil elaborar el programa con el nombre del registro en lugar de la dirección que ocupa. Así mismo, se puede asignar nombres a los registros r0 - r31 mediante la directiva .def .
Resultado del Ensamblado, se puede desplegar la lista de Errores
Una vez ensamblado el programa con Build -> Build Solution, los errores se los ubica para ser corregidos, mediante dos clicks sobre las líneas que se encuentran la lista de la ventana inferior. Este proceso se repite hasta obtener completo el código de máquina.
Ventana del Procesador
Ventana para las Variables
Ventana de Memorias
Con Debug -> Step Into activamos la simulación. Se podrá interactuar con el programa mediante los elementos que aparecen en las ventanas del Procesador, de las Variables y de las Memorias que se despliegan en lugar de las ventanas anteriores.
TRABAJO PREPARATORIO 1. Enumere los dispositivos compatibles (SUPPORTED DEVICES) que pueden conectar con el paquete ATMEL Studio 6, para trabajar con el ATmega164P. 2. Presente la descripción y el ejemplo de cinco Operadores (OPERATORS) que se pueden utilizar con el ensamblador del ATMEL Studio 6. 3. Traer el siguiente programa como un archivo de texto.
;*************************************************************************** ;* ;* "div8u" - 8/8 Bit Unsigned Division ;* ;* This subroutine divides the two register variables "DD8U" (dividend) and ;* "DV8U" (divisor). The result is placed in "DRES8U" and the remainder in ;* "DREM8U". ;* ;* Number of words: 14 ;* Number of cycles: 97 ;* Low registers used: 1 (DREM8U) ;* High registers used : 3 (DRES8U/DD8U, DV8U,DCNT8U) ;* ;*************************************************************************** ;***** Subroutine Register Variables .def drem8u = r15 ; remainder .def dres8u = r16 ; result .def dd8u = r16 ; dividend .def dv8u = r17 ; divisor .def dcnt8u = r18 ; loop counter ;***** code .ORG LDI org 0x00 ldi dd8u,76 DREM8U ld dv8u,24 div8u: sub dremu,drem8u ; clear remainder and carry ROL ldi dcnt8u,9 ; init loop counter d8u_1: role dd8u ; shift left dividend dec dcnt8u ; decrement counter BRNE brn d8u_2 ; if done rjmp fin ; return d8u_2: rol drem8u ; shift dividend into remainder sub drem8u,dv8u ; remainder = remainder - divisor brcc d8u_3 ; if result nega tive add drem8u,dv8u ; restore remainder sec ; clear carry to be shifted into result rjmp d8u_1 ; else d8u_3: sec ; set carry to be shifted into result rjmp d8u_1 fin rjmp fin FIN:
PARTE PRÁCTICA 1. Con la ayuda del instructor crear un nuevo proyecto que contenga como programa el texto realizado como parte del trabajo preparatorio, corrija los errores cometidos para generar el archivo de salida en formato .hex. 2. Comprobar el funcionamiento adecuado del programa, utilizando para ello el simulador incluido en ATMEL Studio 6. Corrija el error al implementar el algoritmo del programa para que funcione correctamente. INFORME Repetir la simulación con otros cuatro conjuntos de datos y presentar los resultados mediante capturas de pantallas.