Manual de Programación de Microcontroladores AVR

57
Manual de Programación de Microcontroladores AVR Contenido Notación utilizada...................................................................................................................................... 5 Prefacio...................................................................................................................................................... 6 Instalación de AVRStudio......................................................................................................................... 7 Instalación de WinAVR........................................................................................................................... 10 Lenguaje C para AVR..............................................................................................................................14 Programación en AVRStudio..............................................................................................................17 Programación en WinAVR................................................................................................................. 20 Programación del microcontrolador.........................................................................................................25 STK 200 y compatibles....................................................................................................................... 25 STK 500.............................................................................................................................................. 26 AVRDragon.........................................................................................................................................27 Práctica 1: Descargar un programa.......................................................................................................... 31 Objetivo...............................................................................................................................................31 Resumen.............................................................................................................................................. 31 Introducción.........................................................................................................................................32 Desarrollo............................................................................................................................................ 35 Práctica 2: Puertos Digitales.................................................................................................................... 37 Objetivo...............................................................................................................................................37 Resumen.............................................................................................................................................. 37 Introducción.........................................................................................................................................38 Desarrollo............................................................................................................................................ 38 Práctica 3: Manejo de un LCD.................................................................................................................39 Objetivo...............................................................................................................................................39 Resumen.............................................................................................................................................. 39 Introducción.........................................................................................................................................40 Desarrollo............................................................................................................................................ 44 Práctica 4. Interrupciones Externas..........................................................................................................45 Objetivo...............................................................................................................................................45 Resumen.............................................................................................................................................. 45 Introducción.........................................................................................................................................46 Desarrollo............................................................................................................................................ 48 Práctica 5: Teclado Matricial................................................................................................................... 49 Objetivo...............................................................................................................................................49 Resumen.............................................................................................................................................. 49 Introducción.........................................................................................................................................49 Desarrollo............................................................................................................................................ 49 Práctica 6: Calculadora Básica.................................................................................................................50 Objetivo...............................................................................................................................................50 Resumen.............................................................................................................................................. 50 Introducción.........................................................................................................................................50 Práctica : Comunicación Serial Asíncrona...............................................................................................51 Objetivo...............................................................................................................................................51 Resumen.............................................................................................................................................. 51 Introducción.........................................................................................................................................52

Transcript of Manual de Programación de Microcontroladores AVR

Page 1: Manual de Programación de Microcontroladores AVR

Manual de Programación de Microcontroladores AVR

ContenidoNotación utilizada......................................................................................................................................5Prefacio......................................................................................................................................................6Instalación de AVRStudio.........................................................................................................................7Instalación de WinAVR...........................................................................................................................10Lenguaje C para AVR..............................................................................................................................14

Programación en AVRStudio..............................................................................................................17Programación en WinAVR.................................................................................................................20

Programación del microcontrolador.........................................................................................................25STK 200 y compatibles.......................................................................................................................25STK 500..............................................................................................................................................26AVRDragon.........................................................................................................................................27

Práctica 1: Descargar un programa..........................................................................................................31Objetivo...............................................................................................................................................31Resumen..............................................................................................................................................31Introducción.........................................................................................................................................32Desarrollo............................................................................................................................................35

Práctica 2: Puertos Digitales....................................................................................................................37Objetivo...............................................................................................................................................37Resumen..............................................................................................................................................37Introducción.........................................................................................................................................38Desarrollo............................................................................................................................................38

Práctica 3: Manejo de un LCD.................................................................................................................39Objetivo...............................................................................................................................................39Resumen..............................................................................................................................................39Introducción.........................................................................................................................................40Desarrollo............................................................................................................................................44

Práctica 4. Interrupciones Externas..........................................................................................................45Objetivo...............................................................................................................................................45Resumen..............................................................................................................................................45Introducción.........................................................................................................................................46Desarrollo............................................................................................................................................48

Práctica 5: Teclado Matricial...................................................................................................................49Objetivo...............................................................................................................................................49Resumen..............................................................................................................................................49Introducción.........................................................................................................................................49Desarrollo............................................................................................................................................49

Práctica 6: Calculadora Básica.................................................................................................................50Objetivo...............................................................................................................................................50Resumen..............................................................................................................................................50Introducción.........................................................................................................................................50

Práctica : Comunicación Serial Asíncrona...............................................................................................51Objetivo...............................................................................................................................................51Resumen..............................................................................................................................................51Introducción.........................................................................................................................................52

Page 2: Manual de Programación de Microcontroladores AVR

Desarrollo............................................................................................................................................53Práctica : Conversor Análogo a Digital...................................................................................................54

Objetivo...............................................................................................................................................54Resumen..............................................................................................................................................54Introducción.........................................................................................................................................55

Bibliografía..............................................................................................................................................57

Page 3: Manual de Programación de Microcontroladores AVR

Índice de FigurasFigura 1: Inicio de la instalación del AVRStudio......................................................................................7Figura 2: Licencia de uso de AVRStudio..................................................................................................7Figura 3: Directorio de instalación.............................................................................................................7Figura 4: Driver para AVRDragon............................................................................................................7Figura 5: Inicia proceso de Instalación......................................................................................................8Figura 6: Copia de archivos de AVRStudio...............................................................................................8Figura 7: Fin de la copia de archivo...........................................................................................................8Figura 8: Instalación completa del AVRStudio.........................................................................................8Figura 9: Página web de WinAVR en sourceforge.net............................................................................10Figura 10: Instalador de WinAVR...........................................................................................................10Figura 11: Elegir idioma de la instalación...............................................................................................10Figura 12: Inicio de la instalción de WinAVR.........................................................................................10Figura 13: Acuerdo de licencia de WinAVR...........................................................................................11Figura 14: Elegir carpeta destino de la instalación..................................................................................11Figura 15: Configuración de la instalación de WinAVR.........................................................................12Figura 16: Vista detallada del proceso de instalación de WinAVR.........................................................12Figura 17: Instalación finalizada..............................................................................................................13Figura 18: Manual de Usuario de WinAVR............................................................................................13Figura 19: Esquema del uso de bibliotecas de usuario............................................................................16Figura 20: Ventana de Bienvenida AVRStudio.......................................................................................17Figura 21: Tipo de proyecto nuevo..........................................................................................................17Figura 22: Selección de dispositivo y plataforma....................................................................................18Figura 23: Aspecto de un proyecto iniciado en AVRStudio....................................................................18Figura 24: Toolbar STK500.....................................................................................................................19Figura 25: Selección del programador en AVRStudio............................................................................19Figura 26: Toolbar AVRGCCPLUGIN...................................................................................................19Figura 27: Icono de la aplicación Mfile...................................................................................................20Figura 28: Elección del microcontrolador en el MFile............................................................................20Figura 29: Elección del programador en el Mfile....................................................................................21Figura 30: Elección del puerto de comunicación con la tarjeta programadora........................................21Figura 31: Icono de la aplicación Programmers Notepad........................................................................22Figura 32: Creación de un proyecto en WinAVR....................................................................................22Figura 33: Agregar archivos al proyecto en WinAVR.............................................................................23Figura 34: Aspecto general de un proyecto iniciado en WinAVR...........................................................23Figura 35: Compilación de proyecto en WinAVR...................................................................................24Figura 36: Programación del microcontrolador desde WinAVR.............................................................24Figura 37: STK500 con microcontrolador y conectores..........................................................................26Figura 38: Vista superior de la tarjeta AVRDragon.................................................................................27Figura 39: Terminales de programación y alimentación..........................................................................27Figura 40: Diagrama Esquemático Programadora usada con AVRDragon.............................................28Figura 41: Cable programador por ISP para AVRDragon.......................................................................29Figura 42: Protoboard y cable programador ISP.....................................................................................29Figura 43: AVRDragon encontrada por Windows XP............................................................................32Figura 44: Asistente de instalación de AVRDragon................................................................................32Figura 45: Busqueda de controladores para AVRDragon........................................................................33Figura 46: Controladores instalados exitosamente..................................................................................33Figura 47: AVRDragon aparece en el administrador de dispositivos......................................................34

Page 4: Manual de Programación de Microcontroladores AVR

Figura 48: Secuencia para descargar un programa al microcontrolador..................................................36Figura 49: Registros del puerto digital A.................................................................................................38Figura 50: LCD 2x16 ordinario...............................................................................................................40Figura 51: Esquema de la estructura interna de un LCD (cortesía de http://es.wikipedia.org/)..............41Figura 52: Mapa de memoria para LCD de una línea..............................................................................42Figura 53: Mapa de memoria para LCD de dos líneas.............................................................................42Figura 54: Mapa de memoria para LCD de cuatro líneas........................................................................43Figura 55: Definiciones de configuración para LCD...............................................................................43Figura 56: Configuraciones generales para LCD.....................................................................................44Figura 57: Registros de configuración de las interrupciones externas.....................................................46Figura 58: Tipos de sensibilidad de la INT0............................................................................................46Figura 59: Tipos de sensibilidad de la INT1............................................................................................47Figura 60: Fuentes de interrupción para el ATMega32...........................................................................47Figura 61: Teclado Matricial 4x4.............................................................................................................49Figura 62: Registro de configuración de velocidad de la USART...........................................................52Figura 63: Registro de estado de la USART............................................................................................52Figura 64: Registro general de configuración la USART........................................................................52Figura 65: Registro particular de configuración la USART....................................................................53Figura 66: Registro de selección de canal del ADC................................................................................55Figura 67: Registro de configuración general del ADC...........................................................................55Figura 68: Registro de configuración de disparo del ADC......................................................................55Figura 69: Fuentes de disparo automático del ADC................................................................................56

Page 5: Manual de Programación de Microcontroladores AVR

Notación utilizada

[Aceptar] Nombre de botón. Texto en Itálicas entre corchetes cuadrados tipografía Times New Roman.

[1] Referencia Bibliográfica. Número entre corchetes cuadrados tipografía Times New Roman.

{Ventana} Título o nombre de ventaja. Texto entre llaves tipografía Times New Roman

Inicio ­> Programas Ruta o nombre de opción en menú. Tipografía Courier 10 puntos.

“Programa/Archivo” Nombre de programa o de archivo. Texto entre comillas en tipografía Times New Roman.

#include<avr/io.h> Segmento de código, terminal o salida de programa. Texto en Itálicas en tipografía FreeMono

Page 6: Manual de Programación de Microcontroladores AVR

Prefacio

Propósito de este manual.

Guía básica para la programación de micros AVR de ATMELUso de diversas tarjetas programadoras

Cómo iniciar un proyecto en WinAVRCómo iniciar un proyecto en AVRstudioAspectos avanzados de programaciónComo programar micros en Linux

Los programas que acompañan este documento se entregan “tal cual” sin ninguna garantía de ninguna índole. El autor no se responsabiliza explicita o implícitamente de mal funcionamiento, pérdida de datos, y/o cualquier daño que pueda sufrir directa o indirectamente por el uso de estos programas.

Page 7: Manual de Programación de Microcontroladores AVR

Instalación de AVRStudio

Recomendamos instalar primero el AVRStudio, antes de realizar la instalación del WinAVR, pues para el caso de la AVRDragon, es el AVRStudio quien instala los manejadores para esta tarjeta. Primero, deberá descargar el instalador desde el sitio web del fabricante localizado en:

http://www.atmel.com/forms/software_download.asp?family_id=607&fn=dl_AvrStudio4Setup.exe.

También encontrará actualizaciones como la SP1 y la SP2, las cuales es recomendable que también descargue. Para poder obtener el software, Atmel exige el llenado de un formulario donde recaba datos generales. Una vez que ha obtenido el programa de instalación, deberá hacer doble clic sobre el instalador y, dependiendo de las configuraciones de seguridad de su sistema operativo, le advertirá acerca de los riesgos de ejecutar software de desconocidos. Podrá observar que comienza a desempaquetar el software y al final obtendrá una ventana como la que se muestra en la figura 1.

Deberemos pulsar sobre el botón [Next], y abrirá una ventana como se ve en la figura 2. En esta ventana es necesario aceptar los términos de la licencia marcando la opción “I accept the terms of the license agreement”. Una vez marcada esta opción deberá pulsar el botón [Next].

Figura 3: Directorio de instalación Figura 4: Driver para AVRDragon

Figura 2: Licencia de uso de AVRStudioFigura 1: Inicio de la instalación del AVRStudio

Page 8: Manual de Programación de Microcontroladores AVR

Ahora nos muestra una ventana que nos pide seleccionar la carpeta en donde se almacenarán los archivos de la instalación de AVRStudio, podemos utilizar la carpeta que se sugiere por omisión, o bien elegir otra pulsando sobre el botón [Change...], que aparece en la esquina superior derecha. Todo esto se aprecia en la figura 3. Una vez que hemos seleccionado la carpeta destino, pulsar el botón [Next] y nos remitirá a la ventana de la figura 4.

En esta nueva ventana, se nos permite elegir entre instalar/actualizar o no el manejador para la tarjeta AVRDragon. Recomendamos dejar siempre seleccionada esta característica para mantener actualizado el firmware de la AVRDragon. Pulsamos sobre el botón [Next] para continuar el proceso de instalación.

El programa de instalación nos pide confirmación para guardar los archivos necesarios en nuestro equipo, como se muestra en la figura 5. Pulsando sobre el botón [Install], inicia el proceso de instalación propiamente dicho, mostrando una barra de progreso de la copia de archivos, tal como se puede apreciar en la figura b). En esta parte del proceso se instalan los driver para la AVRDragon, por lo que aparecerá brevemente una ventana de msdos.

En la figura 7 se puede apreciar el momento en que la copia de archivos de instalación de AVRStudio ha concluido satisfactoriamente. Y en la figura 8 deberá pulsar el botón [Finish] para concluir.

Figura 7: Fin de la copia de archivo Figura 8: Instalación completa del AVRStudio

Figura 5: Inicia proceso de Instalación Figura 6: Copia de archivos de AVRStudio

Page 9: Manual de Programación de Microcontroladores AVR

Ahora en el menú inicio se ha creado una nueva categoría de programas llamada {Atmel AVR Tools}, y dentro de esta se encuentra el acceso directo hacia el AVRStudio. Este es un entorno de desarrollo integrado (IDE, por sus siglas en inglés) con una extensa lista de dispositivos soportados. Y cada vez que hay un mejora o se agregan nuevos dispositivos, se lanza un Service Pack (SP), al momento de escribir esto existen dos SP en la página de Atmel.

El proceso de instalación de estos SP no presenta mayor problema de ir pulsando sobre los botones de continuar o instalar, según sea el caso, y se instalarán en la carpeta correspondiente a la instalación del AVRStudio. Para una guía completa del uso de AVRStudio, recomendamos consulte [1].

Page 10: Manual de Programación de Microcontroladores AVR

Instalación de WinAVRAntes de proceder a la instalación de WinAVR, se recomienda que el usuario inicie la sesión utilizando una cuenta con privilegios de administrador. Esto es debido a que el programa instalador requiere agregar algunas variables de entorno.

Descargar el archivo “WinAVR-20100110-install.exe” desde la página web del proyecto localizada en http://sourceforge.net/projects/winavr/files/ y guardarlo en la carpeta de su preferencia, como se aprecia en las figuras 9 y 10.

El archivo completo llega a pesar 28.8 MB, por lo que si se descarga desde internet en una conexión lenta puede llegar a demorar demasiado. Lo recomendable en estos casos es, o utilizar una conexión rápida, o pedirlo de alguien que ya lo tenga. Haciendo doble clic sobre el archivo ejecutable (extensión .EXE), inicia el proceso de instalación. Elegir idioma y pulsar sobre el botón [Siguiente], como se ve en la figura 11 y 12.

Figura 9: Página web de WinAVR en sourceforge.net Figura 10: Instalador de WinAVR

Figura 11: Elegir idioma de la instalación Figura 12: Inicio de la instalción de WinAVR

Page 11: Manual de Programación de Microcontroladores AVR

A continuación se muestra en la figura 13 el acuerdo de licencia, GNU GPL. Para poder continuar se requiere aceptar las condiciones pulsando sobre el botón [Acepto].

Entre otra cosas, una licencia de tipo GNU GPL proporciona al usuario final el código fuente de la aplicación, así como la facilidad de copiar, modificar, distribuir, etc. sin cargo extra. La única condición es que se mantenga el mismo tipo de licencia y se den los créditos al autor original. Para más detalles puedes consultar http://www.gnu.org/home.es.html o bien http://es.wikipedia.org/wiki/GPL.

Posteriormente, y tal como se ilustra en la figura 14, deberá indicar el directorio en donde se instalará la aplicación.

Figura 13: Acuerdo de licencia de WinAVR

Figura 14: Elegir carpeta destino de la instalación

Page 12: Manual de Programación de Microcontroladores AVR

Una vez seleccionado el directorio en donde se desea instalar el programa, aparece una ventana para personalizar la instalación, como se muestra en la figura 15. Recomendamos dejar las opciones seleccionadas tal como aparecen por defecto y pulsar en el botón [Instalar].

El proceso de instalación inicia. Se copian los archivos necesarios en el directorio seleccionado previamente. Para ver los detalles de la instalación puede pulsar en el botón [Ver detalles] y se desplegará una pantalla como la que se muestra en la figura 16.

Figura 15: Configuración de la instalación de WinAVR

Figura 16: Vista detallada del proceso de instalación de WinAVR

Page 13: Manual de Programación de Microcontroladores AVR

Tan pronto como finaliza la instalación, una ventana indicando que el proceso se ha completado aparece, véase figura 17. Cuando se pulsa sobre el botón [Terminar], el programa de instalación lanza la aplicación del explorador de internet que se tenga por omisión, mostrando una página web con el “WinAVR User Manual”, como se muestra en la figura 18.

En este punto, se puede cerrar la ventana del navegador web. El usuario notará que en el escritorio se crean una serie de iconos. Puede borrarlos, si gusta, y el funcionamiento del programa no se afecta.

Figura 17: Instalación finalizada Figura 18: Manual de Usuario de WinAVR

Page 14: Manual de Programación de Microcontroladores AVR

Lenguaje C para AVR

Esta sección no tienen la intención de repasar los detalles básicos del lenguaje C, ni sus estructuras de control, de decisión, tipos y definición de variables, funciones, apuntadores y demás temas sobre los que existe abundante literatura. Para una revisión detallada de estos temas básicos de la programación en lenguaje C recomendamos [2],[3] y [4].

La intención de esta sección es proponer una estructura básica para la elaboración de programas en C para microcontroladores AVR, misma que se muestra en el siguiente esquema:

#include <avr/io.h>#include<avr/interrupt.h>#include “<ubicación>/my_biblioteca.h”

char aux;tipo nombre=valor;

void config_int(void);tipo nombreFuncion(tipo,tipo....tipo);

ISR(ADC_vect){//Variables locales{tipo nombre=valor;}//El codigo va aquí}ISR(ORIGEN_vect)

int main(void){//Variables localestipo nombre=valor;

//Función definida por el ususario...config_int();

Sección de bibliotecasNecesaria para compilar a un AVR.Sólo si se utilizan interrupciones.Para utilizarse con bibliotecas del usuario.

Sección de variables globalesConjunto de variables globales. Se siguen las reglas de ANSI C, tipo de variable, nombre de variable y ,opcionalmente, valor inicial.

Sección prototipos de funcionesEl prototipo de una función de usuario, es una descripción breve del tipo de datos que devuelve, el nombre de la función y los tipos de datos de los parámetros que recibe.

Sección vectores de interrupciónCuando se utilizan interrupciones, en esta parte se escriben las rutinas que atienden a tales interrupciones. El esquema se muestra entre llaves {}; consiste de la palabra reservada ISR, entre parentesis () el nombre del vector u origen de la interrupción que se va a atender, por ejemplo, ADC, seguido de la palabra reservada _vect. La tabla completa de interrupciones se puede consultar en “avr-libc-user-manual”, sección 5.25.

Sección función principal o mainA partir de esta función es que se comienza a ejecutar nuestro programa. Dentro de esta función pueden existir variables, denominadas locales, y llamadas a funciones creadas por el usuario.

Page 15: Manual de Programación de Microcontroladores AVR

//Cuando se usan interrupcioines...sei();

//Obligado si función main es de tipo intreturn 0;}//Fin de la función main.

void config_int(void){//Código de la función de usuario, en este caso//no hay instrucción de return 0, debido a que la //función es de tipo void}

tipo nombre(tipo var1,tipo var2....tipo varX){//Codigo del ususario}

Cuando se van a utilizar interrupciones, se requiere habilitar la característica de atención a la interrupción. Para esto, es la linea sei().

Para cerrar este bloque, se escribe la línea return 0, que indica que el bloque se ejecuta sin errores. Esta línea es obligatoria cada vez que la función main se defina como de tipo int.

Sección funciones del usuarioAl final del programa, se definen y detallan las funciones del usuario. En general, se debe indicar el tipo de datos que devuelve la función, el nombre de la función, y entre paréntesis, los tipos y nombres de las variables que se pasan como parámetros. No olvidar que si el tipo de la función es distinto a void, se debe de cerrar la función con una instrucción de return.

El programa escrito bajo este este esquema, se guarda con extensión “.c”. Se distingue de aquellos con extensión “.h” por tener una función llamada main.

Para el caso en que se desee generar una biblioteca, o colección de funciones definidas por el usuario, se sigue el esquema antes descrito, con la excepción de que no debe existir ninguna función con el nombre main. Este archivo se guarda con una extensión “.h”.

Para hacer uso de una biblioteca de usuario, se agrega en la sección de bibliotecas del programa principal. La sintaxis es:

#include “unidad:\ruta\archivo.h”

y con esto desde el programa principal se pueden invocar las funciones almacenadas en la biblioteca del usuario

Una precaución adicional es la de asegurarse que las variables globales que se definan en el programa principal, el que invoca la biblioteca del usuario y contiene una función main, no utilice variables globales con el mismo nombre, o duplicadas.

Otra alternativa bastante común es que la sección de prototipos de funciones definidas por el usuario se almacena en un archivo tipo “.h”, y la programación de cada una de estas funciones se almacena en otro archivo con extensión “.c”, de esta forma tendríamos un archivo de encabezados, extensión “.h”, y otro archivo de códigos, el de extensión “.c”. El archivo de códigos incluiría al archivo de encabezados y el archivo “main.c” incluiría al archivo de códigos. Para clarificar este esquema, vea la figura 19.

Page 16: Manual de Programación de Microcontroladores AVR

Ejercicios

Relacione ambas columnas. Indique a qué sección, de la columna de la derecha, corresponde cada una de las sentencias mostradas en la columna izquierda.

( ) char ordena(char,char);

( ) #include “num_primo.h”

( ) int main(void);

( ) char algo(char x){//do something... }

( ) ISR(ADC_vect){//do something... }

( ) sei();

( ) #include <avr/interrupt.h>

( ) return 0;

( ) char auxiliar=0; //Fuera de una función

(1) Sección de Bibliotecas

(2) Sección de Variables Globales

(3) Sección de Prototipos de Funciones

(4) Sección Vectores de Interrupción

(5) Sección Función Principal

(6) Sección Funciones del Usuario

Figura 19: Esquema del uso de bibliotecas de usuario

tipo func1(void);tipo func2(void);

biblioteca.h #include “biblioteca.h”

tipo func1(void){//Hacer algo...

}tipo func2(void){

//Hacer algo...}

biblioteca.c

#include <avr/io.h>#include “biblioteca.c”

#include “others.c”

int main(void){//Hacer algo

func1();func2();return 0;

}

main.c

Page 17: Manual de Programación de Microcontroladores AVR

Programación en AVRStudio

Puede iniciarse la aplicación desde la ruta menú inicio ­> Programas ­> Atmel AVR Tools ­> AVR Studio 4, y aparecerá, la primera vez, una ventana de bienvenida. Puede elegir seguir viéndola cada vez que inicie la aplicación o deshabilitarla quitando la marca de la casilla que se encuentra en la parte inferior izquierda y que dice “Show dialog at startup”. Si usted puede ver la ventana de bienvenida de la figura 20, pulse sobre el botón [New Project] para iniciar un nuevo proyecto o el botón [Open] en caso de que ya exista un proyecto y desee abrirlo. Si usted desmarcó la casilla de mostrar el diálogo de bienvenida al iniciar, y desea volver a activarla, lo puede hacer desde el menú Project ­> Project Wizard de la barra de AVRStudio.

Al pulsar el botón que inicia un nuevo proyecto, se lanza la aplicación de asistente de creación de proyecto. Este asistente se muestra en la figura 21, y también puede ser iniciado desde Project ­> New Project en la barra de menú de AVRStudio.

Figura 20: Ventana de Bienvenida AVRStudio

Figura 21: Tipo de proyecto nuevo

Page 18: Manual de Programación de Microcontroladores AVR

En esta nueva ventana, la de la figura 21, deberá elegir la opción AVR GCC, la que aparece con un icono de un ñu, aunque más parecido a una vaca o toro. A continuación, deberá indicar un nombre adecuado y descriptivo para su proyecto y escribirlo en el cuadro de texto del lado superior derecho justo debajo de la etiqueta “Project name”. Marque las opciones “Create initial file” y la opción “Create folder”. Por omisión el asistente nombra el archivo inicial igual a como se denomino el proyecto.

Ahora, deberá elegir la unidad y la ubicación en donde se creará la carpeta del proyecto. Esto lo hace por medio del botón cuadrado localizado al lado derecho del cuadro de texto etiquetado como “Location”. Al pulsar sobre este botón se abrirá una ventana de navegación que le permitirá elegir el punto de creación de la carpeta de proyecto. De un clic sobre el botón [Next] para continuar.

En la figura 22 se muestra la ventana en la que deberá elegir el microcontrolador para el que va destinada la aplicación y la plataforma que usará para realizar la depuración de la aplicación. Si no cuenta con ninguna plataforma de depuración de las listadas, puede elegir la opción de AVR Simulator. Una vez que ha acabado esta etapa de configuración, pulse sobre el botón [Finish], para terminar.

En la figura 23 se muestra el aspecto final al término de la configuración del proyecto.

Figura 22: Selección de dispositivo y plataforma

Figura 23: Aspecto de un proyecto iniciado en AVRStudio

Page 19: Manual de Programación de Microcontroladores AVR

El botón con el texto “Con” que aparece en la figura 24 y que pertenece a la barra de herramientas de la STK500, le permite elegir el programador a emplear, el segundo botón, lanza un cuadro de diálogo con opciones de configuración del dispositivo microcontrolador.

Al pulsar sobre el primer botón se abre el cuadro de diálogo que se muestra en la figura 25. Aquí deberá elegir la plataforma de programación a utilizar para grabar sus códigos en el microcontrolador.

Una vez que ha elegido un programador, deberá pulsar el botón superior derecho llamado [Connect...] para verificar que se encuentra conectado y encendido. Si no existen errores este será su programador por omisión. Si desea cambiar el modelo de programador empleado, repita el proceso de selección de programador.

Para compilar su proyecto y descargarlo al microcontrolador seleccionado, puede usar los dos primeros botones de la barra AVRGCCPLUGIN que se muestra en la figura 26.

El primer botón realiza la compilación del proyecto activo. El segundo, compila el proyecto activo y en caso de no existir errores, inicia el proceso de programación del dispositivo, por lo que deberá tener conectada y encendida la tarjeta programadora. El tercer botón compila únicamente el archivo activo, y los dos últimos están asociados con aspecto particulares de la configuración del proyecto.

Figura 24: Toolbar STK500

Figura 25: Selección del programador en AVRStudio

Figura 26: Toolbar AVRGCCPLUGIN

Page 20: Manual de Programación de Microcontroladores AVR

Programación en WinAVR

WinAVR es un entorno de desarrollo integrado (IDE, por sus siglas en inglés), que cuenta con diversas herramientas de software para la generación, depuración y programación de aplicaciones destinadas a los microcontroladores AVR de Atmel.

Para generar una aplicación, seguir estos pasos:

1. Crear una carpeta. En esta carpeta se almacenarán los archivos de la aplicación.2. En el escritorio aparece un icono similar a una “Lámpara de Aladino”, figura 20. Hacer doble

clic; o bien ir al menú inicio­> Programas ­> WinAvr y seleccionar Mfile[WinAvr]

3. A continuación se debe elegir el tipo de microcontrolador que se va a programar. Esto se hace desde el menú Makefile, y siguiendo la ruta que se muestra en la figura 1.9.

Figura 27: Icono de la aplicación Mfile

Figura 28: Elección del microcontrolador en el MFile

Page 21: Manual de Programación de Microcontroladores AVR

4. Una vez seleccionado el microcontrolador, se debe elegir el programador. Para esto se vuelve a pulsar sobre el menú Makefile y se elige del submenú desplegable como se muestra en la figura 1.10. Para aquellos que usan programador por el puerto paralelo, deberán elegir STK200.

5. Ahora será necesario especificar el puerto de comunicación en donde se conecta el programador. Para el caso de las STK500, se elige un puerto serial; las tarjetas compatibles con STK200 utilizan, típicamente el lpt1, o puerto paralelo 1.

Figura 29: Elección del programador en el Mfile

Figura 30: Elección del puerto de comunicación con la tarjeta programadora

Page 22: Manual de Programación de Microcontroladores AVR

Si se utiliza una AVRDragon para descargar el programa, esta sección de elegir el programador y el puerto de programación se puede dejar tal como vienen por defecto y continuar, puesto que no es posible, hasta el momento de escribir este documento, descargar el programa desde WinAVR utilizando una AVRDragon conectada a un puerto USB. Hasta aquí la configuración básica. Existen otras opciones que, en un primer acercamiento no será necesario modificar.

6. Se guarda este archivo en la carpeta creada en el paso 1. Para guardar este archivo de configuración, utilice el menú File ­> Save As... Asegúrese de que se graba SIN extensión, simplemente como “Makefile”.

7. Ahora, utilice la aplicación “Programmers Notepad[WinAVR]”. Desde el icono en el escritorio o desde la ruta inicio­>   Programas   ­>   WinAvr y seleccionar “Programmers Notepad[WinAvr]”.

8. Lo primero que debe hacer es ir al menú File ­> New ­> Project y dar un nombre a su proyecto, y elegir la carpeta creada en el paso 1, pulsando sobre el botón lateral derecho [...]. Este botón aparece encerrado en color rojo en la figura 1.13, y al ser pulsado despliega una ventana tipo explorador de archivos. En esta se busca la carpeta creada en el paso 1 y se pulsa sobre el botón [Aceptar], y posteriormente sobre el botón [OK] de la ventana {New Project...}

9. En este momento en nuestra carpeta deben existir dos archivos, uno llamado “Makefile” y otro con extensión “*.pnproj”. Esta extensión indica que se trata de un archivo generado por el Programmers Notepad y es de tipo PROJect o proyecto.

Figura 31: Icono de la aplicación Programmers Notepad

Figura 32: Creación de un proyecto en WinAVR

Page 23: Manual de Programación de Microcontroladores AVR

10. El siguiente paso es guardar la hoja en blanco del lado derecho que lleva por título {New}, con el nombre “main.c”. No olvidar la extensión, ni elegir otro nombre, ni usar mayúsculas. Debe ser “main.c”

11. Falta asociar a nuestro proyecto un archivo de inicio. Para lograrlo se da clic derecho o botón secundario del mouse, sobre el nombre de nuestro proyecto y se elige la opción Add Files, como se muestra en la figura 1.14. Aparece una ventana de exploración en la que debe localizar el archivo “main.c” y pulsar dos veces sobre él.

12. Una vez guardado el archivo “main.c”, se puede comenzar a escribir la aplicación. Un ejemplo es el que se muestra en la figura 1.15. En el lado izquierdo está la ventana titulada {Projects}. En esta aparece el nombre de nuestro proyecto y los archivos que lo componen. La ventana lateral derecha es la del archivo “main.c” y es en esta en donde se escribe la aplicación. Las dos ventanas inferiores, {Find Results} y {Output}, sirven para depuración y como salida para el proceso de compilación y programación, respectivamente.

Figura 33: Agregar archivos al proyecto en WinAVR

Figura 34: Aspecto general de un proyecto iniciado en WinAVR

Page 24: Manual de Programación de Microcontroladores AVR

13. Una vez que se escribe el código para la aplicación, hay que compilarlo. Esto se hace desde el menú Tools ­> Make All, como se muestra en la figura 1.16. El usuario notará que en la ventana llamada Output aparecerá información sobre el proceso de compilación. Si no hay errores marcará como salida:

> Process Exit Code: 0> Time Taken: xx:xx

14. Una vez compilada la aplicación, se puede descargar al microcontrolador. Para lograrlo se utiliza Tools ­> Program, como se aprecia en la figura 1.17. Nuevamente, la ventana {Output} proporciona información del proceso de programación. Esta opción no aplica para programar por medio de la AVRDragon.

Hasta este momento hemos descrito el entorno de desarrollo WinAVR. En próximas secciones describiremos a detalle el proceso de escritura de programas en C para AVR y la programación del microcontrolador utilizando la STK500, la AVRDragon y una tarjeta compatible con STK200.

Figura 35: Compilación de proyecto en WinAVR

Figura 36: Programación del microcontrolador desde WinAVR

Page 25: Manual de Programación de Microcontroladores AVR

Programación del microcontrolador

En esta sección describiremos el proceso para descargar un programa hacia un microcontrolador AVR utilizando alguna de las tarjetas existentes para tal fin. La primera que se describe, una STK200, utiliza el puerto paralelo de una computadora personal. La STK500, que es un modelo más reciente que la anterior, emplea el puerto serial para comunicarse y es una de las más completas y recomendables para el desarrollo y depuración de aplicaciones. La última y no menos importante, es la AVRDragon que se distingue por utilizar el puerto USB para comunicarse.

Es responsabilidad del usuario verificar que su equipo de computo cuente con el puerto o los puertos necesarios para cada una de las tarjetas programadoras que aquí se describen. En el caso de la STK500, es posible utilizar un adaptador de USB-Serial para proporcionar un puerto serial a aquellos equipos, como ciertos modelos de laptops, que no cuentan con el puerto adecuado a la tarjeta programadora utilizada. Sin embargo, para el caso de las tarjetas modelo STK200, no se recomienda la adquisición de adaptadores USB pues estos no están diseñados para funcionar como puerto paralelo sino como puerto de impresión.

En este sentido, el adaptador USB-Serial que se utilice deberá incluir su disco de instalación o de drivers para el sistema operativo empleado por el usuario. De igual forma, deberá contar con instrucciones precisas para instalar este adaptador, por lo que no describiremos este proceso de instalación ya que varía entre los fabricantes y en el sistema operativo que se emplee.

STK 200 y compatibles

Page 26: Manual de Programación de Microcontroladores AVR

STK 500

Tal como lo menciona la página web del fabricante, la AVR STK500 es un kit de inicio y un sistema de desarrollo para microcontroladores AVR de Atmel. La STK500 proporciona a los diseñadores un punto de partida para desarrollar código en los AVR junto con características que les permitan utilizar este kit de inicio para desarrollar prototipos y probar los nuevos diseños. La STK500 interactúa con el entorno de desarrollo integrado de Atmel, el AVRStudio, para escribir y depurar código.

También cuenta con tarjetas de expansión para diferentes subfamilias de AVR y dispositivos más grandes. La ayuda en linea de AVRstudio contiene la información más actualizada y una lista completa de los dispositivos soportados. En la figura se muestra una STK500.

La STK500 tiene zócalos de diferentes tamaños para colocar los diversos microcontroladores de la familia AVR, desde los de la subfamilia Tiny de 8 terminales hasta los de 40 terminales de la familia Mega. Cada subgrupo de microcontroladores se distingue por un color en la STK500. Esta clasificación se puede consultar en el manual de la tarjeta [4].

Debe tenerse especial cuidado en no equivocar la colocación del microcontrolador tanto en la orientación como en el zócalo que le corresponda, a fin de evitar daños al dispositivo y a la tarjeta. Otro error común es colocar el cable plano de seis hilos en forma errónea.

También, asegúrese de proporcionar el suministro de energía necesario para que la tarjeta funcione, pues aún cuando los leds indicadores de encendido se activen, puede ocurrir que no se pueda leer o programar adecuadamente el microcontrolador seleccionado.

Figura 37: STK500 con microcontrolador y conectores

Page 27: Manual de Programación de Microcontroladores AVR

AVRDragon

La tarjeta AVRDragon de Atmel, mostrada en la figura 31, ha establecido un nuevo estándar para herramientas de desarrollo de bajo costo. AVRDragon soporta todos los modos de programación para la familia de dispositivos AVR de Atmel. También incluye soporte de emulación completa de dispositivos con 32KB o menos de memoria Flash.

Una de las ventajas de la tarjeta AVRDragon es el soporte en AVRStudio, esto permite que el firmware se actualice fácilmente para soportar los nuevos dispositivos y protocolos. Al conectar la AVRDragon, el AVRStudio comprueba automáticamente el firmware y preguntará al usuario si desea actualizar el programa de la AVRDragon cada vez que una actualización de firmware está disponible. Se recomienda que el usuario actualice cada vez que el AVRStudio se lo sugiera.

AVRDragon es alimentado por el cable USB, y también puede suministrar hasta 300 mA desde la terminal de 5V durante la programación o la depuración. Estas terminales de suministro de energía se muestran en 32.

En la figura 32 se aprecian tres pares de terminales para alimentación, justo al lado de las diez terminales utilizadas para programación de dispositivos por medio del JTAG.

Figura 38: Vista superior de la tarjeta AVRDragon

Figura 39: Terminales de programación y alimentación

Page 28: Manual de Programación de Microcontroladores AVR

Arriba del conector JTAG se localizan las seis terminales utilizadas por la interfaz ISP. La descripción de las terminales de comunicación ISP se muestra en la tabla 1.

Tabla 1: Correspondencia de terminales ISP microcontrolador con AVRDragonTerminales de Microcontrolador Terminales AVRDragon

Pin 6 MOSI Pin 4 MOSIPin 7 MISO Pin 1 MISOPin 8 SCK Pin 3 SCKPin 9 Reset Pin 5 ResetPin 10 VTG Pin 2 VTGPin 11 GND Pin 6 GND

Una de las alternativas para poder programar los microcontroladores por medio de la AVRDragon es a través de una tarjeta externa que proporcione el soporte físico para el dispositivo y se encargue de dirigir las señales de programación hacia las terminales correspondientes. En la figura 40 se muestra un diseño de esta tarjeta programadora.

Este diagrama esquemático fue elaborado en Eagle en su versión 5.10.0 para Linux Edición Light. En la tabla 2 se incluye un listado de los componentes utilizados, para quién desee reproducir este diseño y modificarlo, le sea fácil ubicar los componentes.

Otra alternativa es construir un cable de programación. Esta opción es la idónea si se desea programar el dispositivo cuando este esta ya dentro del sistema final, o cuando el microcontrolador esta en una tablilla para prototipos o protoboard. En la figura 41 se muestra el esquema de construcción

Figura 40: Diagrama Esquemático Programadora usada con AVRDragon

Page 29: Manual de Programación de Microcontroladores AVR

Tabla 2: Listado de partes de programadora usada con AVRDragonPart Value Device Package Library Sheet

ISP ISP MA03-2 MA03-2 con-lstb 1

S SOURCE 22-23-2021 22-23-2021 con-molex 1

ZIF ZIF 240-1280-00-0602J 240-1280-00-0602J con-3m 1

Para la realización de este cable programador por ISP, se requiere un segmento de cable plano de 6 hilos. Este segmento se recomienda no sea mayor a los 50 centímetros. Un conector para cable plano. En caso de no encontrar conector para cable plano de 6 hilos, un conector para cable plano de diez hilos sirve. Y por último una tira de pines sencilla. Del lado del conector el segmento de cable se inserta directamente, alineando el hilo en color rojo con el símbolo de un triangulo que marca la terminal número 1 del conector. Del lado de la tira de pines, es necesario soldar los hilos a la terminal correspondiente así como se ilustra en la figura 41.

Para programar un microcontrolador utilizando este cable, deberá tener la precaución de conectar juntas las líneas de tierra o GND tanto de la AVRDragon como del protoboard, y energizar el microcontrolador por medio de una fuente externa con voltaje de salida no mayor a 5.5 volts. Nunca deberá conectar juntas la terminal de voltaje del microcontrolador con la terminal VCC de la AVRDragon, si utiliza una fuente externa de alimentación.

Por otro lado, también puede utilizar un protoboard como programadora junto con el cable ISP de programación. En este caso, no necesitaría una fuente de voltaje externa pues utilizaría las terminales GND y Vcc de la AVRDragon como fuente de alimentación. Puede utilizar el cable de las bocinas o buzzer interno de una computadora de escritorio que ya no ocupe, o el cable de encendido o de los leds del panel frontal, para proporcionar voltaje desde la AVRDragon al protoboard.

Figura 41: Cable programador por ISP para AVRDragon

6 – MOSI7 – MISO8 – SCK9 – Reset10 – VCC11 – GND

Microcontrolador

Cable plano de 6 hilos

3

1 2

4

5 6

Conector1 – MISO2 – VCC3 – SCK4 – MOSI5 – Reset6 – GND

Tira sencilla de 6 pines

Figura 42: Protoboard y cable programador ISP

Page 30: Manual de Programación de Microcontroladores AVR

No recomendamos utilizar el voltaje de la AVRDragon para alimentar prototipos pues durante el proceso de depuración y corrección de estos puede ocasionarle daños a la AVRDragon, y reiteramos la precaución de no conectar el voltaje de una fuente externa con la terminal VCC de la AVRDragon. Tampoco olvide conectar juntas la terminal GND de la AVRDragon con la linea de referencia o tierra, si ocupa una fuente externa de voltaje.

Page 31: Manual de Programación de Microcontroladores AVR

Práctica 1: Descargar un programa

Objetivo

El alumno utilizará la tarjeta de desarrollo AVRDragon para descargar programas a un microcontrolador ATMega32, desde el entorno de desarrollo integrado AVRStudio

Resumen

• Mostraremos cómo verificar el correcto funcionamiento de una AVRDragon.

• Se probará si un cable de programación por ISP está correctamente elaborado.

• Revisaremos si un microcontrolador está dañado.

• Programaremos un microcontrolador.

• Modificaremos la velocidad del oscilador interno del microcontrolador.

Page 32: Manual de Programación de Microcontroladores AVR

Introducción

La primera vez que se conecta la AVRDragon a la computadora, se enciende un led de color rojo, y en breves instantes notará que un segundo led de color verde comienza a centellear hasta que finalmente se queda encendido, mientras que el sistema operativo envía un mensaje indicando que un nuevo hardware ha sido encontrado mostrando una aviso como el que se ve en la figura 43.

Después de este globo informativo, se le pregunta al usuario el modo de búsqueda de los controladores correspondientes lanzando una ventana como la que se muestra en la figura 44. Para este caso marcaremos la opción “No por el momento”, y deberá pulsar el botón [Siguiente].

Ahora, se nos pregunta la ubicación de los controladores para la AVRDragon, Para poder continuar adecuadamente con la instalación, es necesario haber instalado previamente el AVRStudio, siendo este el caso, marcaremos la primera opción “Instalar automáticamente el software (recomendado)” y pulsaremos nuevamente el botón [Siguiente]. Esta parte del proceso se ilustra con la figura 45.

Durante unos segundos aparece una ventana indicando los archivos que van siendo copiados, y la instalación de los controladores concluye con la ventana mostrada en la figura 46. Tal como se indica en aquella ventana, deberá pulsar el botón [Terminar] para concluir el proceso.

Figura 43: AVRDragon encontrada por Windows XP

Figura 44: Asistente de instalación de AVRDragon

Page 33: Manual de Programación de Microcontroladores AVR

Si el proceso falla en cualquier momento es indicativo de un problema. Revise en el siguiente orden en busca de la solución a tal falla:

1. Instalar AVRStudio antes de conectar la AVRDragon2. Seguir el proceso de instalación que aquí se mostró3. Verificar que no exista falso contacto del cable USB con la AVRDragon o con la PC4. No conecte el cable ISP ni alimente ningún circuito con la AVRDragon hasta no instalarla5. Si el led rojo centellea y cambia intermitentemente a color naranja puede existir un problema

grave con su AVRDragon.

Una vez que ha llegado a la pantalla de la figura 46, puede también verificar el éxito de la instalación en la vista de dispositivos, en donde aparecerá un nuevo dispositivo bajo la categoría “Jungo”. Esto indica que la instalación del controlador de la AVRDragon fue exitoso, tal como se muestra en la figura 47.

Figura 45: Busqueda de controladores para AVRDragon

Figura 46: Controladores instalados exitosamente

Page 34: Manual de Programación de Microcontroladores AVR

Si por alguna razón desea desinstalar la AVRDragon, es en el administrador de dispositivos desde donde podrá hacerlo. Simplemente marque el dispositivo que desea desinstalar y pulse la tecla suprimir. Se le pedirá que confirme la decisión de desinstalar tal dispositivo seleccionado.

Figura 47: AVRDragon aparece en el administrador de dispositivos

Page 35: Manual de Programación de Microcontroladores AVR

Desarrollo

En la figura 1.6 se muestra la conexión entre y la tarjeta de soporte. En la imagen anterior puede apreciarse el uso de un cable plano de diez hilos en conexión uno a uno. Las pistas en la placa de soporte son las encargadas de direccionar las señales provenientes de las terminales de hacia las correspondientes del microcontrolador.

En los siguientes pasos se explicara como configurar la comunicación del microcontrolador por medio de la placa de soporte a la tarjeta AVRDragon, para determinar ciertas características y así el usuario poder configurar el microcontrolador dependiendo sus necesidades:

Verificaremos la comunicación de la tarjeta programadora AVRDragon al Microcontrolador, para esto se hace la conexión mostrada anteriormente en la imagen 1.6.

Abrir el programa AVRStudio, damos cancelar la ventana de bienvenida a AVRStudio, como se muestra en la figura 1.7.Después damos clic en el icono de AVR, aparecerá una ventana que nos muestra una variedad de tarjetas programadoras, en el cuadro de “platform” seleccionar la tarjeta AVRDragon y en el cuadro Port seleccionaremos USB. Después damos clic en connect, como puede observarse en la figura 1.8.

En la figura 1.9 se determina el microcontrolador que usaremos para descargar el programa ya sea el ATMega 16 o 32, para esto damos clic en “Device and Signature Bytes” aquí nos dará la opción de escoger el tipo de microcontrolador a usar que en nuestro caso será el ATMega 32, observamos en el cuadro “Programming Mode And Target Settings” nos indica el tipo de comunicación que se usa, en algunas ocasiones se tiene que poner de forma manual.

Se sugiere elegir una velocidad de comunicación del ISP de 125 KHz máximo. Esta velocidad se puede modificar pulsando sobre el botón “Settings” que en la figura 1.9 se localiza dentro del panel “Programming Mode and Target Settings” en la pestaña Main.

Si la comunicación entre y el microcontrolador no se logra establecer, nos aparece un error, obsérvese la figura 1.10.

En la figura 1.10 podemos observar el error de comunicación entre el microcontrolador y la tarjeta programadora AVRDragon, este error se puede notar ya que nos envía una ventana de un error de “ISP Mode Error”, pero hay que recordar que existen otros factores que pueden originar este error como son: Cable de conexión mal elaborado, alimentación del ISP, errores de la tarjeta no atribuibles al diseño (pistas cortadas, soldadura mal realizada, mal conexión de cable de comunicación, mal conexión del microcontrolador,), microcontrolador defectuoso, cuando el microcontrolador está configurado para usar un cristal externo.

Una vez que no hay errores en la comunicación del microntrolador a la tarjeta programadora AVRDragon lo siguiente descargar un programa al microntrolador, para eso seleccionamos la pestaña “Program”, buscamos el botón para seleccionar el programa que se descargara en el microcontrolador, presionamos el botón [Program] para descargar el programa seleccionado anteriormente al microntrolador.

Page 36: Manual de Programación de Microcontroladores AVR

En la figura 1.11 se muestran los pasos ya mencionados para descargar programas al microntrolador.

Figura 48: Secuencia para descargar un programa al microcontrolador

Page 37: Manual de Programación de Microcontroladores AVR

Práctica 2: Puertos Digitales

Objetivo

El alumno conocerá y utilizará los puertos digitales del microcontrolador para realizar operaciones de lectura y escritura de datos.

Resumen

• El microcontrolador cuenta con cuatro puertos digitales configurables a nivel de terminal.

• Cada uno de los puertos se etiqueta con letras. Desde la A hasta la D.

• Todos los puertos son de ocho bits.

• Se pueden configurar en tiempo de ejecución.

• Es posible definir funcionará cada terminal del puerto, si como entrada o como salida.

• Por cada puerto digital hay tres registros asociados a su configuración y manejo.

• El registro DDRx se utiliza para definir la dirección de cada terminal del puerto.

• El registro PINx se emplea para leer datos del puerto.

• El registro PORTx es utilizado para escribir datos al puerto.

• Por omisión, todos los puertos son de entrada.

Page 38: Manual de Programación de Microcontroladores AVR

Introducción

En la figura 44 se muestran los registros asociados con el manejo del puerto A. De forma similar, hay otros tantos registros para el manejo de los puertos digitales B, C y D.

Estos registros se pueden leer y escribir, tanto en tiempo de diseño como en tiempo de ejecución. Aún cuando los puertos digitales son bidireccionales, son excluyentes. Es decir, una terminal especifica de un puerto digital sólo puede ser de entrada o salida en un instante específico. Una terminal de un puerto digital no puede ser una terminal bidireccional, es decir al mismo tiempo de entrada y de salida.

Se puede escribir en un registro del microcontrolador utilizando valores decimales, hexadecimales, por nombre de bit, por operaciones de desplazamiento, o una combinación de las anteriores. A continuación mostramos algunos ejemplos de escritura a registros del microcontrolador.

PORTA=0x38; //Formato hexadecimalGICR=(1<<INT0); //Utilizando nombres de bitDDRC=255; //Formato decimal

Desarrollo

Figura 49: Registros del puerto digital A

Page 39: Manual de Programación de Microcontroladores AVR

Práctica 3: Manejo de un LCD

Objetivo

El alumno utilizará un display de cristal líquido (LCD) para mostrar datos y como interfaz para interactuar con el usuario de sus sistemas.

Resumen

• Para poder utilizar un LCD se requiere un proceso de inicialización.

• Cada caracter a ser desplegado en el LCD debe ser enviado codificado en ASCII.

• Los LCD tradicionales pueden ser manejados utilizando palabras de 8 o 4 bits, según la configuración inicial del dispositivo.

• Es posible modificar el comportamiento del LCD tanto en tiempo de diseño como en tiempo de ejecución.

• El contraste y la luz de fondo son características de un LCD que no son manipulables directamente desde programación. Requieren hardware adicional.

• Los mapas de memoria de LCD's tradicionales de 1,2 o 4 líneas y 16 o más caracteres, suelen ser similares o estar superpuestos.

• Los LCD gráficos operan de forma distinta de los LCD tradicionales y no son directamente compatibles.

Page 40: Manual de Programación de Microcontroladores AVR

Introducción

El LCD2x16 es un dispositivo controlado de visualización gráfico para la presentación de caracteres, símbolos o incluso dibujos (en algunos modelos), Dispone de 2 filas de 16 caracteres cada una y cada carácter dispone de una matriz de 5x7 puntos (píxeles), aunque se puede encontrar de diferentes número de filas y caracteres.

Este dispositivo está gobernado internamente por un Microcontrolador Hitachi 44780 y regula todos los parámetros de presentación, este modelo es el más comúnmente usado y la información que aquí se presenta se basa en el manejo de este u otro LCD compatible. Características principales:

• Pantalla de caracteres ASCII, además de los caracteres Kan-ji y Griegos.

• Desplazamiento de los caracteres hacia la izquierda o la derecha.

• Proporciona la dirección de la posición absoluta o relativa del carácter.

• Memoria de 16 caracteres por línea de pantalla.

• Movimiento del cursor y cambio de su aspecto.

• Permite que el usuario pueda programar 8 caracteres.

• Conexión a un procesador usando una interfaz de 4 u 8 bits

Cada píxel de un LCD típicamente consiste de una capa de moléculas alineadas entre dos electrodos transparentes, y dos filtros de polarización, los ejes de transmisión de cada uno que están (en la mayoría de los casos) perpendiculares entre sí. Sin cristal líquido entre el filtro polarizante, la luz que pasa por el primer filtro sería bloqueada por el segundo (cruzando) polarizador.

La figura 46 muestra la aplicación de un campo eléctrico, la orientación de las moléculas de cristal líquido está determinada por la adaptación a las superficies. Cuando se aplica un voltaje a través de los electrodos, una fuerza de giro orienta las moléculas de cristal líquido paralelas al campo eléctrico, que distorsiona la estructura helicoidal (esto se puede resistir gracias a las fuerzas elásticas desde que las moléculas están limitadas a las superficies). Esto reduce la rotación de la polarización de la luz incidente, y el dispositivo aparece gris.

Figura 50: LCD 2x16 ordinario

Page 41: Manual de Programación de Microcontroladores AVR

Si la tensión aplicada es lo suficientemente grande, las moléculas de cristal líquido en el centro de la capa son casi completamente desenrolladas y la polarización de la luz incidente no es rotada ya que pasa a través de la capa de cristal líquido. Esta luz será principalmente polarizada perpendicular al segundo filtro, y por eso será bloqueada dado que se mostrara el píxel en negro. Por el control de la tensión aplicada a través de la capa de cristal líquido en cada píxel, la luz se puede permitir pasar a través de distintas cantidades, constituyéndose los diferentes tonos de gris.

En la tabla se describen las 14 terminales de un LCD, algunos módulos tiene 2 terminales adicionales para un led de luz de fondo. En las figuras los registros de configuración relacionados.

Tabla Terminales de un LCDTerminal Nombre Significado

1 Vss Tierra de alimentación o GND.

2 Vdd Alimentación positiva o Vcc.

3 Vo Contraste del cristal líquido 0 a Vcc.

4 RS

Selección del registro de control/registro de datos: RS=0 Selección registro de control RS=1 Selección registro de datos

5 R/WSeñal de lectura/escritura: R/W=0 Escritura (Write) R/W=1 Lectura (Read)

6 EHabilitación del modulo: E=0 Módulo desconectado E=1 Módulo conectado

7 a 14 D0-D7 Bus de datos bidireccional.

Figura 51: Esquema de la estructura interna de un LCD (cortesía de http://es.wikipedia.org/)

Page 42: Manual de Programación de Microcontroladores AVR

En términos generales, la primera posición en un LCD corresponde a la dirección 0x80. La figura 47 muestra el mapa de memoria para un LCD de un renglón y hasta 40 caracteres.

En función de la cantidad de caracteres por línea, o en el caso de LCD multilínea, será la dirección de memoria correspondiente a la posición en el display del caracter que se desee mostrar. En la figura 48 se observa el mapa de memoria de un LCD de dos renglones y hasta 40 caracteres por renglón.

En la figura 2.3 se muestra el mapa de memoria para caracteres correspondiente a un LCD de cuatro líneas por dieciséis caracteres, y el de cuatro líneas por veinte caracteres.

Figura 52: Mapa de memoria para LCD de una línea

Figura 53: Mapa de memoria para LCD de dos líneas

Page 43: Manual de Programación de Microcontroladores AVR

En la figura 50, se presenta la lista de definiciones correspondientes al proceso de configuración e inicialización de un LCD genérico. Estas definiciones se utilizan como bits para construir las palabras de control del LCD. En la figura 51 se muestra su uso y efectos.

Figura 54: Mapa de memoria para LCD de cuatro líneas

Figura 55: Definiciones de configuración para LCD

Page 44: Manual de Programación de Microcontroladores AVR

Como se aprecia en la figura anterior, se pueden tener diversas configuraciones que, dependiendo de las características de la aplicación o el gusto de programador, se podrán emplear.

Desarrollo

Figura 56: Configuraciones generales para LCD

Page 45: Manual de Programación de Microcontroladores AVR

Práctica 4. Interrupciones Externas

Objetivo

El alumno conocerá el manejo de interrupciones por hardware y utilizará las interrupciones externas del microcontrolador.

Resumen

• Existen tres líneas de interrupción externa en el microcontrolador.

• Las líneas de interrupción se etiquetan y enumeran desde la INT0 hasta la INT2.

• Para el manejo de las dos primeras interrupciones existen tres registros asociados.

• El registro GICR define cuál línea de interrupción se utilizará y atenderá en una subrutina de atención a interrupción (ISR).

• El registro GIFR refleja el estado de existencia o no existencia de evento de interrupción en cierta línea del microcontrolador. Es un registro de bandera.

• MCUCR, es un registro de configuración. En él se especifica qué tipo de interrupción habrá de modificar el registro de banderas.

• La configuración de las líneas de interrupción no es mutuamente excluyente.

• Existen al menos dos formas de manejar las interrupciones externas: por subrutina de atención y por interrogación de bandera.

Page 46: Manual de Programación de Microcontroladores AVR

Introducción

En la figura 3.1 se muestran los registros asociados al manejo de interrupciones externas. El primero de ellos se utiliza cuando la interrupción externa será atendida vía vector de interrupción. Es decir, cada vez que se coloca un uno en cualquiera de los bits INTn, se debe escribir la consiguiente subrutina de servicio a la interrupción o ISR(). Esta subrutina recibe como parámetro el vector asociada con la interrupción que ha sido activada.

El segundo registro, el GIFR, es un registro de banderas. Cada vez que ocurre un evento externo y tiene la forma definida en los bits ISCn1-ISCn0, del registro MCUCR, se coloca en alto el bit correspondiente.

El último registro aquí mostrado es el MCUCR. En este se va a definir ante qué tipo de interrupciones se va a actuar. Las posibles combinaciones de valores se muestran en la figura 3.2. y figura 3.3. No es necesario que ambas líneas de interrupción se configuren de la misma forma. Por ejemplo, Mientras una es sensible a los flancos ascendentes de una señal de entrada, la otra podría únicamente atender los flancos descendentes; y viceversa.

Figura 57: Registros de configuración de las interrupciones externas

Figura 58: Tipos de sensibilidad de la INT0

Page 47: Manual de Programación de Microcontroladores AVR

Pero las líneas INT0, INT1 e INT2 no son las únicas fuente de interrupciones en el microcontrolador. En la figura 3.4 se muestran todas las fuentes posibles de interrupción para el ATMega32. Esta tabla no es universal, varía según el modelo de microcontrolador.

La forma como se programa la atención de las interrupciones, es en términos generales la misma: la inclusión de la biblioteca de interrupciones, una subrutina a la que se le pasa como parámetro el vector de la interrupción que se va a atender y una instrucción de habilitación de interrupciones globales. Obviamente, en el programa principal se debe incluir la configuración específica del evento que dispara la interrupción.

Figura 59: Tipos de sensibilidad de la INT1

Figura 60: Fuentes de interrupción para el ATMega32

Page 48: Manual de Programación de Microcontroladores AVR

Desarrollo

Page 49: Manual de Programación de Microcontroladores AVR

Práctica 5: Teclado Matricial

Objetivo

Resumen

Introducción

Un teclado matricial es un arreglo de botones conectados en filas y columnas, de modo que se pueden leer varios botones con el mínimo número de pines. Este dispositivo permite ingresar datos a un sistema microcontrolador. Es, por decirlo de algún modo, la opción inversa al LCD, pues este muestra información proveniente de un microcontrolador, mientras que un teclado matricial permite introducir información a un microcontrolador.

Un teclado matricial se designa por el número de renglones y el número de columnas de que está formado. Por ejemplo, un teclado de 4x4 significa que consta de 4 renglones y de 4 columnas. Un teclado de 5x7 indica un teclado matricial compuesto de 5 renglones y de 7 columnas. El resultado de la multiplicación de renglones por columnas nos indica cuántos botones o teclas tenemos en nuestro teclado matricial. En la figura 3.1 se muestra un teclado matricial de 4x4.

Un teclado matricial 4×4 solamente ocupa 4 líneas de un puerto para las filas y otras 4 líneas para las columnas, de este modo se pueden leer 16 teclas utilizando solamente 8 líneas de un microcontrolador.

Desarrollo

Figura 61: Teclado Matricial 4x4

Page 50: Manual de Programación de Microcontroladores AVR

Práctica 6: Calculadora Básica

Objetivo

Resumen

Introducción

Page 51: Manual de Programación de Microcontroladores AVR

Práctica : Comunicación Serial Asíncrona

Objetivo.

Utilizar la USART del microcontrolador para efectuar comunicación serial asíncrona con otros dispositivos, así como el manejo de las interrupciones producidas por este periférico.

Resumen

• Las terminales 0 y 1 del puerto digital D tienen la doble función de servir como líneas de USART etiquetadas como RXD y TXD.

• Las terminales asociadas a la USART del microcontrolador pueden ser configuradas para recibir, transmitir o ambas cosas.

• Para poder realizar una correcta comunicación serial se requiere que, tanto el emisor como el receptor cumplan con: velocidad de comunicación, longitud de palabra, bits de paridad y paro.

• Existe un vector de interrupción asociado a cada uno de los eventos de la USART como nuevo dato recibido, fin de transmisión y registro de datos vacío.

• La probabilidad de error en una comunicación serial asíncrona en el microcontrolador, es función directa de la velocidad de comunicación elegida, el reloj del sistema y del divisor de frecuencia de la USART.

• Existen otros periféricos de comunicación, como el SPI, que es un modo de comunicación serial síncrono y multimaestro.

• La interfaz de dos hilos (TWI). es utilizada comúnmente para comunicaciones bajo el protocolo I2C.

• La USART también soporta comunicaciones a nueve bits, seriales síncronas, y multi-maestro, entre otras características.

Page 52: Manual de Programación de Microcontroladores AVR

Introducción

Para el caso de la USART, existen cuatro registros asociados a su manejo y configuración. En la figura 4.1, se muestra la estructura del registro UBRR, que funciona como un divisor de reloj.

El registro UBRR define la velocidad de comunicación de datos. Es un registro de 12 bits con el bit más significativo de la parte alta compartido el registro UCSRC. El valor colocado aquí junto con la velocidad de reloj del sistema, definen la velocidad de transferencia de datos de la interfaz, así como el porcentaje de error en la transmisión.

Dependiendo del estado de la comunicación, se colocará en 1 o 0 un cierto bit de este registro. Es decir, el registro mostrado en la figura 4.2 es un registro de banderas. La generación de una interrupción depende tanto de si ha sido habilitada, como del estado de los bits de este registro.

Por su parte el registro UCSRB, mostrado en la figura 4.3, es utilizado para configurar cuáles eventos asociados con la USART, serán atendidos vía vector de interrupción. También se utiliza para configurar el comportamiento de la USART y para las comunicaciones a 9 bits.

El registro mostrado en la figura 4.4, el UCSRC, es el registro encargado de definir las características más específicas del comportamiento de la USART, como lo es el tamaño de la palabra de datos, la cantidad de bits de paro, comunicaciones con o sin bit de paridad, y la polaridad de la señal de reloj, para comunicaciones seriales síncronas.

Figura 62: Registro de configuración de velocidad de la USART

Figura 63: Registro de estado de la USART

Figura 64: Registro general de configuración la USART

Page 53: Manual de Programación de Microcontroladores AVR

Como se ha venido mencionando, la velocidad de transferencia es función directa de la señal de reloj del micro, así como el porcentaje de error. En la figura 4.5 se muestran algunas posibles combinaciones para las velocidades típicas.

Desarrollo

Figura 65: Registro particular de configuración la USART

Page 54: Manual de Programación de Microcontroladores AVR

Práctica : Conversor Análogo a Digital

Objetivo

Utilizar el conversor análogo a digital (ADC) para medir variables físicas. Conocer el manejo de las interrupciones producidas por este periférico.

Resumen

• Las terminales del puerto digital A cumplen una doble función al ser también las líneas de entrada de los ocho canales del ADC del microcontrolador.

• El tamaño de la palabra de conversión es de diez bits, razón por la que se utiliza un registro de dieciséis bits dividido en parte alta y parta baja.

• La velocidad del reloj del ADC es un submúltiplo de la frecuencia del reloj del sistema, y puede ser configurada tanto en tiempo de diseño como en tiempo de ejecución.

• Existe un sólo evento asociado al ADC del microcontrolador capaz de provocar una señal de interrupción: el fin de conversión.

• Es posible modificar la representación de los datos de una conversión, a fin de tener los bits menos significativos juntos en la parte baja del registro de datos del ADC; o bien tener agrupados los bits más significativos en la parte alta del registro de datos de conversor análogo a digital.

• El canal analógico de entrada a ser leído y convertido a una representación numérica binaria, puede ser elegido en tiempo de diseño, y modificado durante la ejecución de la aplicación, dando flexibilidad a este periférico del microcontrolador.

Page 55: Manual de Programación de Microcontroladores AVR

Introducción

En la figura 5.1 se muestra uno de los registro de configuración del ADC. Este se encarga de configurar cuál canal se va a convertir y si lo va a hacer con alguna ganancia. También se define en este registro el origen del voltaje de referencia para las conversiones del ADC.

Por su parte, el registro ADCSRA mostrado en la figura 5.2, es el que se utiliza para definir el comportamiento del ADC. Entre otras características, aquí se define la frecuencia de reloj utilizada por el conversor para efectuar sus operaciones; también se especifíca aquí si el inició de una conversión será cuando lo indique el usuario o programa o una fuente de disparo automático.

Cuando se desea utilizar la interrupción generada por el final de conversión del ADC, se deben modificar los bits ADIF y ADIE, que corresponden a la bandera de interrupción y a la habilitación de atención a la interrupción de fin de conversión.

Por último, los bits ADEN y ADSC son los encargados de encender el ADC y de iniciar una conversión, respectivamente. En particular el bit ADSC se activa una sola vez en el modo de carrera libre. Para un modo no automático, cada vez que se desee iniciar una conversión se deberá de escribir un uno en este bit.

Para el caso que se desee trabajer el ADC en modo de disparo automático, esto se deberá especificar en el registro ADCSRA junto con los valores dados en la figura 5.4 y que corresponden a combinaciones a ser escritas en los bits 5,6 y 7 del registro SFIOR, mismo que se muestra en la figura 5.3.

Figura 68: Registro de configuración de disparo del ADC

Figura 67: Registro de configuración general del ADC

Figura 66: Registro de selección de canal del ADC

Page 56: Manual de Programación de Microcontroladores AVR

Como se puede apreciar en la figura 5.4, es posible sincronizar el inicio de una conversión del ADC, con la ocurrencia de algún evento externo o interno del microcontrolador. De particular interés, puede resultar el disparo por eventos del temporizador, para realizar conversiones periódicas a intervalor regualres y bien definidos de tiempo.

Figura 69: Fuentes de disparo automático del ADC

Page 57: Manual de Programación de Microcontroladores AVR

Bibliografía

[1] “AVR Studio User Guide”. Manual de AVRStudio. Rev. 1019A-A–01/98 ; Disponible desdehttp://avr.myinvent.net/download/doc1019.pdf; [2] "El lenguaje de programación C", 2ª Edición. Kernighan B. W., Ritchie D. M. Pearson, 1991ISBN 968-880-205-0[3] “C Programming for Microcontrollers ”, Pardue , Joe; www.SmileyMicros.com ; 2005; ISBN 0-9766822-0-6 [4] “Embedded C Programming and the Atmel AVR”, Barnett, Richard H., Cox, Sarah, O'Cull, Larry; 2a e dición; Thomson, 2006; ISBN: 978-1-4180-3959-2