You are on page 1of 17

TUTORIAL PARA PROGRAMAR UN ATMEGA8

Este tutorial est diseado para las personas que nunca han utilizado un microcontrolador de Atmel, y quieren empezar a desarrollar sus proyectos con esta tecnologa. Para este caso utilizaremos un Atmega8 para ilustrar todo el proceso, que es exactamente el mismo para los dems micros. Primero cabe resaltar algunas de las ventajas que encontramos al utilizar esta clase de micro controladores, entre las que se encuentran: El software para la programacin es totalmente gratuito y se puede descargar desde la pgina principal de Atmel, incluyendo las herramientas para programar en C o C++. Se pueden programar con tan solo un cable paralelo y 4 resistencias, sin gastar en programadores excesivamente costosos. Incluye un cristal interno programable, lo cual permite ahorrar en componentes y simplifica los montajes. Y la mejor ventaja que se tiene, es que puede simularse en PROTEUS junto con muchos de los dispositivos que se utilizan comnmente, permitiendo ajustar el diseo sin tener que estar reprogramando el micro una infinidad de veces.

ANTES DE EMPEZAR
Lo primero que se necesita para programa un ATMEGA8 es el software para escribir el cdigo, el cual lo distribuye ATMEL completamente gratis y se puede descargar de: http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725 De aqu se debe descargar la ltima versin del AVRStudio, incluyendo el Service Pack ms actualizado. Para este tutorial vamos a trabajar con el AVR Studio Versin 4.13. Ahora, si lo que queremos es programar nuestro micro en C o C++, es necesario instalar el WINAVR, el cual se puede descargar de: http://winavr.sourceforge.net/ Para la simulacin se puede utilizar el mismo AVRStudio, sin embargo lo ms recomendable y prctico es utilizar el PROTEUS de VSM (http://www.ieeproteus.com/), el cual lamentablemente no es gratis, pero se puede conseguir (bajo la responsabilidad de cada uno) en el Emule o en: http://elakt.mforos.com/1426006/6725101-proteus/ Finalmente, para quemar el programa en el micro, es necesario tener el PONYPROG, el cual puede descargarse de: http://www.lancos.com/ppwin95.html Y el plano del quemador: http://elakt.mforos.com/1426006/6722430-plano-quemador-atmega/

ELAKT

En resumen, antes de empezar lo ms recomendable es tener: AVRStudio con Service Pack http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725 o WinAVR o http://winavr.sourceforge.net/ PROTEUS o http://elakt.mforos.com/1426006/6725101-proteus/ PonyProg o http://www.lancos.com/ppwin95.html Quemador del micro o http://elakt.mforos.com/1426006/6722430-plano-quemador-atmega/

CREANDO UN NUEVO PROYECTO


Para ilustrar como es el proceso de crear un primer proyecto en un ATmega8, se va a ilustrar paso a paso un sencillo programa que se encargar de hacer titilar un LED, con un segundo de espera entre el encendido y el apagado. Se va a mostrar en primer lugar el proceso para hacer el proyecto en assembler, y despus se mirarn los cambios necesarios en el caso del programa en C.

Assembler
En primer lugar se abre el AVRStudio, que es el programa en donde vamos a escribir el cdigo del proyecto y hacer la primera simulacin del mismo. Lo primero que se ve al abrir el programa es algo como la imagen, donde le damos click en New Project.

Una vez aqu se tienen las opciones de generar un proyecto en Assembler o C. Para este caso se escoge la opcin de Assembler y le damos como nombre Led. Aqu pregunta en donde se quiere guardar el proyecto, ELAKT

y da la opcin de crear una nueva carpeta que lo contenga, con el mismo nombre, que es lo ms recomendable para organizar todos los proyectos que se vayan a hacer.

Finalmente se debe escoger la herramienta que vamos a usar para la depuracin en el caso de tener alguna tarjeta de desarrollo. Como este no es el caso, se escoge la opcin de simulador (AVR Simulator), y se escoge el micro que se va a programar (ATmega8).

ELAKT

Ahora, una vez creado el proyecto se va a encontrar una pantalla como la siguiente:

Donde se tiene: 1. Los archivos que tiene nuestro proyecto. En este caso solo se muestra el archivo Led.asm, dado que an no se ha compilado nada. 2. Espacio para escribir el cdigo que se va a programar en el micro. 3. Los puertos que dispone el microcontrolador, cada uno con su nombre y su direccin de memoria, lo cual es muy til a la hora de hacer el cdigo y de la simulacin, como se ver ms adelante. 4. El panel de mensajes, que se usa principalmente para mostrar los errores y las advertencias que se tengan con respecto al cdigo escrito. Teniendo esto en cuenta, el siguiente paso es copiar el cdigo que se da a continuacin y compilarlo. Cdigo .include m8def.inc .def temp=r16 .def cero=r17 .def tiempo=r18 .def tiempo1=r19 .def tiempo2=r20 .org 0x0000 rjmp reset reset: ldi R25,LOW(ramend) out SPL,R25 ldi R25,HIGH(ramend) out SPH,R25 ELAKT

inicio:

Delay: For: For1: For2:

ldi ldi ldi dec

ser temp out DDRD,temp ;Puerto D como salida ldi cero,$00 com temp ;Inicia bit0 prendido out Portd,temp rcall Delay rjmp inicio tiempo,100 ;Nmero de milisegundos tiempo1,10 ;Simulamos un ciclo for que tiempo2,249 ;demora1000 ciclos(1ms) tiempo2 cpse tiempo2,cero rjmp For2 dec tiempo1 cpse tiempo1,cero rjmp For1 dec tiempo cpse tiempo,cero rjmp For ret

Bsicamente este cdigo define el puerto D como salida, y hace que cambie el nivel lgico de todo el puerto despus de una rutina de espera Delay, programado para durar aproximadamente un segundo. Para entender mejor el cdigo debe mirarse la hoja de datos del micro donde vienen todas las instrucciones explicadas y se muestra el manejo de todos los registros, lo cual se sale del alcance de este tutorial. Una vez copiado el cdigo, para compilar se puede ir al menu Build Build, darle click en el cono que se muestra en la imagen, o simplemente presionar F7.

Una vez hecho esto, vemos la informacin que se muestra en la parte inferior, donde, como no existe ningn error en la compilacin, se tiene el espacio que este cdigo genera en cada uno de los bloques de memoria del microcontrolador, que en este caso queda ocupado tan solo en un 0.6%. Tambin puede observarse los nuevos archivos que nos muestra y que se generan al compilar el cdigo, todos relacionados con el proyecto que se est trabajando.

ELAKT

En este punto ya hemos completado nuestro proyecto, ya que al compilar el cdigo se genera en archivo .hex, que es el que utiliza el PonyProg para quemar el micro; sin embargo vamos a ver la opcin de simulacin que nos da el AVRStudio.

SIMULACIN
AVRStudio
Vamos a ver en primera instancia, la simulacin utilizando el AVRStudio, el cual tiene la ventaja de permitir ver que pasa individualmente con cada registro del micro, adems del contador de programa y el contador de ciclos para aplicaciones en las cuales el control del tiempo resulta crucial. Para tener habilitada la opcin del contador de ciclos y de programa, hay que activar la opcin en View Toolbars Processor, lo cual va a abrir una nueva pestaa como se muestra en la figura. Para iniciar la simulacin se puede acceder a Build Build and Run o darle click al cono nmero 1 de la figura, o presionar Ctrl + F7. Una vez hecho esto vemos como aparece una flecha en el campo del cdigo, la cual indica la lnea que se est ejecutando en cada momento de la simulacin.

Una vez aqu, se tienen varias opciones para controlar la forma en la cual se va mirar el flujo del programa, ya sea lnea por lnea utilizando el cono 2, ejecutando el programa hasta donde tengamos el cursor utilizando el cono 3, dejando que se ejecute sin ninguna restriccin, utilizado breakpoints etc. Para visualizar los valores que va manejando el micro, se tiene en primer lugar la lista de registros en la parte derecha, donde se muestra el valor que va tomando cada registro en el punto del programa en el que nos encontremos. Para las variables, se abre la ventana Watch en el men View Watch, en la cual escribiendo el nombre de cada variable tenemos acceso a su respectivo valor en cada instante de la simulacin. Ahora, vamos a utilizar la simulacin para mirar el tiempo que demora la rutina Delay utilizando el contador de ciclos de la ventana processor.

ELAKT

Para esto, se debe ir haciendo click en el cono 2 (Step into) o presionando F11 hasta que el cursor se site en la rutina Delay. Mientras se va corriendo dentro del programa, se puede ir viendo como se van actualizando los valores de los registros y de los contadores de programa.

Entonces, para ver cunto tiempo utiliza la rutina Delay, vamos a poner en 0 el contador de ciclos y el reloj haciendo click derecho en la ventana processor como en la figura.

Una vez hecho esto llevamos el cursor al final de la rutina haciendo click en la lnea de cdigo ret. ELAKT

Luego le damos click al cono Run to cursor, con el fin de que se ejecute el programa automticamente hasta el punto donde se encuentra el cursor, que es el final de la rutina en este caso. Dado la cantidad de pasos que tiene que hacer el programa para llegar a este punto, se debe esperar algunos segundos antes de que se tenga acceso de nuevo a la simulacin. Si se da el caso en el que la ejecucin se quede en algn ciclo infinito o tome demasiado tiempo en terminar, se debe darle Stop para poder retomar la simulacin.

ELAKT

Finalmente podemos ver el tiempo que demor la ejecucin de la rutina, que como se quera es de un segundo, con un pequeo desfase de 400us, que no va a ser relevante para este proyecto dado que el ojo no va a lograr percibirlo.

Proteus
Proteus es una herramienta de simulacin muy poderosa, la cual va a permitir un anlisis del circuito completo del diseo, enfocado hacia todos los componentes del montaje y no solo lo que sucede con el microcontrolador. Lo primero que se va a hacer para empezar con la simulacin es buscar los componentes que necesitamos. Para esto, se debe tener en cuenta que este seleccionado el cono que se muestra en la figura con una flecha (que aparece por defecto cuando abrimos el proteus), o el cono que est debajo de este (Componentes). Una vez se tiene seleccionado, hay que hacer click en la P (Pick Devices) para abrir el cuadro de dilogo que muestra todos los componentes disponibles.

Una vez aqu, se escribe ATmega8 (o el micro que se est utilizando) en el cuadro Keywords, lo cual automticamente muestra que el componente puede simularse y permite verificar la posicin de los pines. Finalmente al darle click en OK, se ve como el componente aparece ahora listado en el panel de Devices (Esto siempre y cuando se est trabajando con el cono Components, de lo contrario se mostrarn otras opciones en la lista).

ELAKT

Ahora, para colocar el componente en la hoja de simulacin, simplemente se selecciona de la lista Devices y se le da click donde se quiera colocar.

Para el Led se sigue el mismo procedimiento que para buscar el ATmega, pero ahora en Keywords se escribe Led blue (puede escribirse Led, pero para ser un poco ms especficos se va a buscar uno azul), le damos click en LED BLUE y OK. Y de la misma forma que antes lo colocamos en la hoja de simulacin.

ELAKT

Una vez tenemos ambos componentes, para hacer el cableado hay que acercar el mouse a uno de los pines del puerto D del micro, hasta que el apuntador del mouse que se ve en forma de lpiz cambie a un color verde y salga un cuadro rojo bordeando la punta del pin del micro. En este punto se hace click, y se vuelve a hacer click en el otro punto que se desea conectar, en este caso el pin del nodo del Led.

Ahora falta conectar la tierra del circuito. Para esto hay que activar el cono Terminals Mode (el que se ve en la figura), selccionar GROUND y colocarlo en la hoja como cualquier componente. Hecho esto, se conecta la tierra al ctodo del Led para completar el montaje.

ELAKT

Nota: Hay que tener en cuenta que este montaje no debe implementarse fsicamente, dado que sin una resistencia en serie con el Led se produce un corto y puede causarle daos al microcontrolador. Para efectos de simulacin esto no es importante, pero cuando se vaya a montar el circuito se debe colocar una resistencia tpicamente de 220ohm o de mayor valor.

Una vez se tiene ubicado todo el circuito, hay que cargar el programa del micro. Para esto se le da doble click al microcontrolador en la hoja de simulacin, lo cual abre un cuadro de dilogo donde se pueden ver y modificar las caractersticas con las que se va a simular el micro. Dado que el programa lo hicimos con un reloj de 1MHz (que viene por defecto tanto en el micro, como en el AVR y el proteus) dejamos esta opcin como esta y le damos click en el cono de Program File.

ELAKT

Se busca el archivo .hex en la carpeta del proyecto, que es el archivo que genera el AVRStudio una vez que hemos compilado satisfactoriamente el programa, se carga y click en OK.

Ya con el programa cargado, solo resta comenzar con la simulacin.

ELAKT

Para la simulacin se pueden resaltar cuatro puntos importantes: 1. Botn de play para iniciar la simulacin. 2. Cada pin del microcontrolador tiene un indicador que muestra su nivel lgico en cada instante de la simulacin. Se puede como va cambiando con la ejecucin del programa, asi como el Led del circuito. 3. El reloj de la simulacin. Es muy importante tener en cuenta que la velocidad a la cual se simula el programa no es exactamente la velocidad real del circuito, es as que puede parecer que el parpadeo del Led es un poco lento en el programa, pero al mirar el reloj de la simulacin se puede ver como efectivamente cambia su estado cada segundo.

ELAKT

Finalmente otra de las opciones ms interesantes del Proteus es el osciloscopio, el cual permite ver las seales que se manejan en el circuito junto con la simulacin. Esta y otras opciones interesantes se pueden ver en el cono Virtual Instruments Mode.

PROGRAMACIN
Una vez se tiene el proyecto diseado y simulado satisfactoriamente, el ltimo paso es la programacin fsica del micro. Para esto vamos a usar el PonyProg (Version 2.06f Beta para este caso). Una vez que abrimos el programa, lo primero es definir el micro que vamos a utilizar, ATmega8 en este caso, como se muestra en la figura.

Una vez hecho esto, debemos definir el tipo de programador para que se ajuste al del plano que tenemos. Para esto se entra en Setup Interface Setup, y dar click en las opciones Parallel Port, Avr ISP I/O y puerto LPT1. Ahora, se debe CONECTAR el quemador y se le da la opcin Probe, la cual verifica que el computador tenga acceso correcto al puerto y el quemador este bien montado. En caso que la prueba de un resultado negativo, se debe revisar el cableado del quemador y los permisos del puerto que tenga el Windows XP.

ELAKT

Una vez se tiene configurado el quemador de manera adecuada, se carga el archivo del programa que generamos Led.hex, accediendo a File Open Device File, o haciendo click en el cono de la carpeta amarilla. Haciendo esto se muestra inmediatamente en el programa el contenido que va a ser programado en la memoria del micro, que corresponde al cdigo que se hizo.

Finalmente queda solo tener acceso fsico al micro, para lo cual debemos tener el quemador junto con el microcontrolador alimentado de manera adecuada conectados al PC (Para esto se debe revisar el datasheet del micro utilizado para alimentar los pines de Vcc y de Gnd).

ELAKT

Lo primero que se debe hacer es borrar el contenido del micro, haciendo click en el cono 1 de la figura o accediendo a Command Erase, para eliminar cualquier informacin que tuviere, y para comprobar que se tiene bien configurado el acceso al microcontrolador. En caso de recibir un error en este punto se deben revisar las conexiones y el microcontrolador. Una vez se ha borrado la informacin del micro, se le da click en el cono 2 de la figura, o accediendo a Command Write Program (FLASH), para finalmente terminar con la programacin de nuestro primer proyecto en un micro de ATMEL. Ya despus lo nico que resta es hacer el montaje con el LED (sin olvidar una resistencia en serie, normalmente de 220 ohm o ms, para evitar cortos y daos en el micro) y verlo titilar.

ELAKT

You might also like