Vous êtes sur la page 1sur 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
Desarrollo............................................................................................................................................53
Práctica : Conversor Análogo a Digital...................................................................................................54
Objetivo...............................................................................................................................................54
Resumen..............................................................................................................................................54
Introducción.........................................................................................................................................55
Bibliografía..............................................................................................................................................57
Índice de Figuras
Figura 1: Inicio de la instalación del AVRStudio......................................................................................7
Figura 2: Licencia de uso de AVRStudio..................................................................................................7
Figura 3: Directorio de instalación.............................................................................................................7
Figura 4: Driver para AVRDragon............................................................................................................7
Figura 5: Inicia proceso de Instalación......................................................................................................8
Figura 6: Copia de archivos de AVRStudio...............................................................................................8
Figura 7: Fin de la copia de archivo...........................................................................................................8
Figura 8: Instalación completa del AVRStudio.........................................................................................8
Figura 9: Página web de WinAVR en sourceforge.net............................................................................10
Figura 10: Instalador de WinAVR...........................................................................................................10
Figura 11: Elegir idioma de la instalación...............................................................................................10
Figura 12: Inicio de la instalción de WinAVR.........................................................................................10
Figura 13: Acuerdo de licencia de WinAVR...........................................................................................11
Figura 14: Elegir carpeta destino de la instalación..................................................................................11
Figura 15: Configuración de la instalación de WinAVR.........................................................................12
Figura 16: Vista detallada del proceso de instalación de WinAVR.........................................................12
Figura 17: Instalación finalizada..............................................................................................................13
Figura 18: Manual de Usuario de WinAVR............................................................................................13
Figura 19: Esquema del uso de bibliotecas de usuario............................................................................16
Figura 20: Ventana de Bienvenida AVRStudio.......................................................................................17
Figura 21: Tipo de proyecto nuevo..........................................................................................................17
Figura 22: Selección de dispositivo y plataforma....................................................................................18
Figura 23: Aspecto de un proyecto iniciado en AVRStudio....................................................................18
Figura 24: Toolbar STK500.....................................................................................................................19
Figura 25: Selección del programador en AVRStudio............................................................................19
Figura 26: Toolbar AVRGCCPLUGIN...................................................................................................19
Figura 27: Icono de la aplicación Mfile...................................................................................................20
Figura 28: Elección del microcontrolador en el MFile............................................................................20
Figura 29: Elección del programador en el Mfile....................................................................................21
Figura 30: Elección del puerto de comunicación con la tarjeta programadora........................................21
Figura 31: Icono de la aplicación Programmers Notepad........................................................................22
Figura 32: Creación de un proyecto en WinAVR....................................................................................22
Figura 33: Agregar archivos al proyecto en WinAVR.............................................................................23
Figura 34: Aspecto general de un proyecto iniciado en WinAVR...........................................................23
Figura 35: Compilación de proyecto en WinAVR...................................................................................24
Figura 36: Programación del microcontrolador desde WinAVR.............................................................24
Figura 37: STK500 con microcontrolador y conectores..........................................................................26
Figura 38: Vista superior de la tarjeta AVRDragon.................................................................................27
Figura 39: Terminales de programación y alimentación..........................................................................27
Figura 40: Diagrama Esquemático Programadora usada con AVRDragon.............................................28
Figura 41: Cable programador por ISP para AVRDragon.......................................................................29
Figura 42: Protoboard y cable programador ISP.....................................................................................29
Figura 43: AVRDragon encontrada por Windows XP............................................................................32
Figura 44: Asistente de instalación de AVRDragon................................................................................32
Figura 45: Busqueda de controladores para AVRDragon........................................................................33
Figura 46: Controladores instalados exitosamente..................................................................................33
Figura 47: AVRDragon aparece en el administrador de dispositivos......................................................34
Figura 48: Secuencia para descargar un programa al microcontrolador..................................................36
Figura 49: Registros del puerto digital A.................................................................................................38
Figura 50: LCD 2x16 ordinario...............................................................................................................40
Figura 51: Esquema de la estructura interna de un LCD (cortesía de http://es.wikipedia.org/)..............41
Figura 52: Mapa de memoria para LCD de una línea..............................................................................42
Figura 53: Mapa de memoria para LCD de dos líneas.............................................................................42
Figura 54: Mapa de memoria para LCD de cuatro líneas........................................................................43
Figura 55: Definiciones de configuración para LCD...............................................................................43
Figura 56: Configuraciones generales para LCD.....................................................................................44
Figura 57: Registros de configuración de las interrupciones externas.....................................................46
Figura 58: Tipos de sensibilidad de la INT0............................................................................................46
Figura 59: Tipos de sensibilidad de la INT1............................................................................................47
Figura 60: Fuentes de interrupción para el ATMega32...........................................................................47
Figura 61: Teclado Matricial 4x4.............................................................................................................49
Figura 62: Registro de configuración de velocidad de la USART...........................................................52
Figura 63: Registro de estado de la USART............................................................................................52
Figura 64: Registro general de configuración la USART........................................................................52
Figura 65: Registro particular de configuración la USART....................................................................53
Figura 66: Registro de selección de canal del ADC................................................................................55
Figura 67: Registro de configuración general del ADC...........................................................................55
Figura 68: Registro de configuración de disparo del ADC......................................................................55
Figura 69: Fuentes de disparo automático del ADC................................................................................56
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
Prefacio

Propósito de este manual.

Guía básica para la programación de micros AVR de ATMEL


Uso de diversas tarjetas programadoras

Cómo iniciar un proyecto en WinAVR


Cómo iniciar un proyecto en AVRstudio
Aspectos avanzados de programación
Como 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.
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.

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


AVRStudio

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


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.

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

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


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].
Instalación de WinAVR
Antes 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.

Figura 9: Página web de WinAVR en


sourceforge.net Figura 10: Instalador de WinAVR

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 11: Elegir idioma de la instalación Figura 12: Inicio de la instalción de WinAVR
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].

Figura 13: Acuerdo de licencia de WinAVR

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 14: Elegir carpeta destino de la instalación


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].

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

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 16: Vista detallada del proceso de instalación de WinAVR


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.

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

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.
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:

Sección de bibliotecas
#include <avr/io.h> Necesaria para compilar a un AVR.
#include<avr/interrupt.h> Sólo si se utilizan interrupciones.
#include “<ubicación>/my_biblioteca.h” Para utilizarse con bibliotecas del usuario.

Sección de variables globales


Conjunto de variables globales. Se siguen las
char aux;
reglas de ANSI C, tipo de variable, nombre de
tipo nombre=valor; variable y ,opcionalmente, valor inicial.

Sección prototipos de funciones


El prototipo de una función de usuario, es una
void config_int(void); descripción breve del tipo de datos que devuelve,
tipo nombreFuncion(tipo,tipo....tipo); el nombre de la función y los tipos de datos de los
parámetros que recibe.

Sección vectores de interrupción


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

int main(void){ Sección función principal o main


//Variables locales A partir de esta función es que se comienza a
ejecutar nuestro programa. Dentro de esta función
tipo nombre=valor;
pueden existir variables, denominadas locales, y
llamadas a funciones creadas por el usuario.
//Función definida por el ususario...
config_int();
//Cuando se usan interrupcioines... Cuando se van a utilizar interrupciones, se
sei(); requiere habilitar la característica de atención a la
interrupción. Para esto, es la linea sei().
//Obligado si función main es de tipo int
return 0; Para cerrar este bloque, se escribe la línea return
}//Fin de la función main. 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 usuario


Al final del programa, se definen y detallan las
void config_int(void){ funciones del usuario. En general, se debe indicar
//Código de la función de usuario, en este caso el tipo de datos que devuelve la función, el
//no hay instrucción de return 0, debido a que la nombre de la función, y entre paréntesis, los tipos
//función es de tipo void 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
tipo nombre(tipo var1,tipo var2....tipo varX){ una instrucción de return.
//Codigo del ususario
}

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.
tipo func1(void); #include <avr/io.h>
tipo func2(void); #include “biblioteca.c”
#include “others.c”
biblioteca.h #include “biblioteca.h”
int main(void){
tipo func1(void){ //Hacer algo
//Hacer algo... func1();
} func2();
tipo func2(void){ return 0;
//Hacer algo... }
}
main.c
biblioteca.c
Figura 19: Esquema del uso de bibliotecas de usuario

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); (1) Sección de Bibliotecas

(2) Sección de Variables Globales


( ) #include “num_primo.h”
(3) Sección de Prototipos de Funciones

( ) int main(void); (4) Sección Vectores de Interrupción

(5) Sección Función Principal


( ) char algo(char x){//do something... }
(6) Sección Funciones del Usuario

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

( ) sei();

( ) #include <avr/interrupt.h>

( ) return 0;

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


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.

Figura 20: Ventana de Bienvenida 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 21: Tipo de proyecto nuevo


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.

Figura 22: Selección de dispositivo y plataforma

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

Figura 23: Aspecto de un proyecto iniciado en AVRStudio


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.

Figura 24: Toolbar STK500

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.

Figura 25: Selección del programador en AVRStudio

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.

Figura 26: Toolbar AVRGCCPLUGIN

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.
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]

Figura 27: Icono de la aplicación Mfile


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 28: Elección del microcontrolador en el MFile


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.

Figura 29: Elección del programador en el Mfile

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 30: Elección del puerto de comunicación con la tarjeta programadora


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]”.

Figura 31: Icono de la aplicación Programmers Notepad

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 32: Creación de un proyecto en WinAVR


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.

Figura 33: Agregar archivos al proyecto en WinAVR

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 34: Aspecto general de un proyecto iniciado en WinAVR


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

Figura 35: Compilación de proyecto en WinAVR

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.

Figura 36: Programación del microcontrolador desde WinAVR

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.
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


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.

Figura 37: STK500 con microcontrolador y conectores

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.
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.

Figura 38: Vista superior de la tarjeta AVRDragon

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.

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

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.
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 AVRDragon


Terminales de Microcontrolador Terminales AVRDragon
Pin 6 MOSI Pin 4 MOSI
Pin 7 MISO Pin 1 MISO
Pin 8 SCK Pin 3 SCK
Pin 9 Reset Pin 5 Reset
Pin 10 VTG Pin 2 VTG
Pin 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.

Figura 40: Diagrama Esquemático Programadora usada con AVRDragon

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
Tabla 2: Listado de partes de programadora usada con AVRDragon
Part 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.

Tira sencilla de 6 pines


6 – MOSI
Conector
Cable plano de 6 hilos 7 – MISO
1 – MISO
1 2 8 – SCK
2 – VCC
3 9 – Reset
3 – SCK 4
10 – VCC
4 – MOSI 5 6 11 – GND
5 – Reset Microcontrolador
6 – GND
Figura 41: Cable programador por ISP para AVRDragon

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 42: Protoboard y cable programador ISP


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.
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.

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.

Figura 43: AVRDragon encontrada por Windows XP

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].

Figura 44: Asistente de instalación de AVRDragon

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.
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 AVRDragon


2. 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 PC
4. No conecte el cable ISP ni alimente ningún circuito con la AVRDragon hasta no instalarla
5. Si el led rojo centellea y cambia intermitentemente a color naranja puede existir un problema
grave con su AVRDragon.

Figura 45: Busqueda de controladores para 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 46: Controladores instalados exitosamente


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


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.
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


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.
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.

Figura 49: Registros del puerto digital A

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 hexadecimal


GICR=(1<<INT0); //Utilizando nombres de bit
DDRC=255; //Formato decimal

Desarrollo
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.
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

Figura 50: LCD 2x16 ordinario

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 51: Esquema de la estructura interna de un LCD (cortesía de
http://es.wikipedia.org/)

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 LCD


Terminal 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.
Selección del registro de control/registro de
datos:
4 RS
RS=0 Selección registro de control
RS=1 Selección registro de datos
Señal de lectura/escritura:
5 R/W R/W=0 Escritura (Write)
R/W=1 Lectura (Read)
Habilitación del modulo:
6 E E=0 Módulo desconectado
E=1 Módulo conectado
7 a 14 D0-D7 Bus de datos bidireccional.
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.

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

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.

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

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 54: Mapa de memoria para LCD de cuatro líneas

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 55: Definiciones de configuración para LCD


Figura 56: Configuraciones generales para LCD

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
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.
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.

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

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 58: Tipos de sensibilidad de la INT0


Figura 59: Tipos de sensibilidad de la INT1

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 60: Fuentes de interrupción para el ATMega32


Desarrollo
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.

Figura 61: Teclado Matricial 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
Práctica 6: Calculadora Básica

Objetivo

Resumen

Introducción
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.
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.

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

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.

Figura 63: Registro de estado de la USART

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.

Figura 64: Registro general de configuración la USART

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 65: Registro particular de configuración la USART

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
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.
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.

Figura 66: Registro de selección de canal 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.

Figura 67: Registro de configuración general del ADC

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.

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

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 69: Fuentes de disparo automático del ADC

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.
Bibliografía

[1] “AVR Studio User Guide”. Manual de AVRStudio. Rev. 1019A-A–01/98 ; Disponible desde
http://avr.myinvent.net/download/doc1019.pdf;
[2] "El lenguaje de programación C", 2ª Edición. Kernighan B. W., Ritchie D. M. Pearson, 1991
ISBN 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

Vous aimerez peut-être aussi