17
ELAKT TUTORIAL PARA PROGRAMAR UN ATMEGA8 Este tutorial está diseñado para las personas que nunca han utilizado un microcontrolador de Atmel, y quieren empezar a desarrollar sus proyectos con esta tecnología. Para este caso utilizaremos un Atmega8 para ilustrar todo el proceso, que es exactamente el mismo para los demás 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 programación es totalmente gratuito y se puede descargar desde la página 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 comúnmente, permitiendo ajustar el diseño 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 código, 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 versión del AVRStudio, incluyendo el Service Pack más actualizado. Para este tutorial vamos a trabajar con el AVR Studio Versión 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 simulación se puede utilizar el mismo AVRStudio, sin embargo lo más recomendable y práctico 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/

TUTORIAL PARA PROGRAMAR UN ATMEGA8 · PDF fileEste tutorial está diseñado para las personas que nunca han utilizado un microcontrolador de Atmel, y quieren empezar a desarrollar

Embed Size (px)

Citation preview

Page 1: TUTORIAL PARA PROGRAMAR UN ATMEGA8 · PDF fileEste tutorial está diseñado para las personas que nunca han utilizado un microcontrolador de Atmel, y quieren empezar a desarrollar

ELAKT

TUTORIAL PARA PROGRAMAR UN

ATMEGA8

Este tutorial está diseñado para las personas que nunca han utilizado un microcontrolador de Atmel, y

quieren empezar a desarrollar sus proyectos con esta tecnología. Para este caso utilizaremos un Atmega8

para ilustrar todo el proceso, que es exactamente el mismo para los demás 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 programación es totalmente gratuito y se puede descargar desde la página

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 comúnmente, permitiendo ajustar el diseño 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 código, 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 versión del AVRStudio, incluyendo el Service Pack más actualizado. Para

este tutorial vamos a trabajar con el AVR Studio Versión 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 simulación se puede utilizar el mismo AVRStudio, sin embargo lo más recomendable y práctico 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/

Page 2: TUTORIAL PARA PROGRAMAR UN ATMEGA8 · PDF fileEste tutorial está diseñado para las personas que nunca han utilizado un microcontrolador de Atmel, y quieren empezar a desarrollar

ELAKT

En resumen, antes de empezar lo más recomendable es tener:

• AVRStudio con Service Pack

o • http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725

• 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 después se mirarán 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 código del proyecto

y hacer la primera simulación 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

opción de Assembler y le damos como nombre Led. Aquí pregunta en donde se quiere guardar el proyecto,

Page 3: TUTORIAL PARA PROGRAMAR UN ATMEGA8 · PDF fileEste tutorial está diseñado para las personas que nunca han utilizado un microcontrolador de Atmel, y quieren empezar a desarrollar

ELAKT

y da la opción de crear una nueva carpeta que lo contenga, con el mismo nombre, que es lo más

recomendable para organizar todos los proyectos que se vayan a hacer.

Finalmente se debe escoger la herramienta que vamos a usar para la depuración en el caso de tener alguna

tarjeta de desarrollo. Como este no es el caso, se escoge la opción de simulador (AVR Simulator), y se

escoge el micro que se va a programar (ATmega8).

Page 4: TUTORIAL PARA PROGRAMAR UN ATMEGA8 · PDF fileEste tutorial está diseñado para las personas que nunca han utilizado un microcontrolador de Atmel, y quieren empezar a desarrollar

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

aún no se ha compilado nada.

2. Espacio para escribir el código que se va a programar en el micro.

3. Los puertos que dispone el microcontrolador, cada uno con su nombre y su dirección de memoria,

lo cual es muy útil a la hora de hacer el código y de la simulación, como se verá más adelante.

4. El panel de mensajes, que se usa principalmente para mostrar los errores y las advertencias que se

tengan con respecto al código escrito.

Teniendo esto en cuenta, el siguiente paso es copiar el código que se da a continuación y compilarlo.

Código

.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

Page 5: TUTORIAL PARA PROGRAMAR UN ATMEGA8 · PDF fileEste tutorial está diseñado para las personas que nunca han utilizado un microcontrolador de Atmel, y quieren empezar a desarrollar

ELAKT

ser temp

out DDRD,temp ;Puerto D como salida

ldi cero,$00

inicio: com temp ;Inicia bit0 prendido

out Portd,temp

rcall Delay

rjmp inicio

Delay: ldi tiempo,100 ;Número de milisegundos

For: ldi tiempo1,10 ;Simulamos un ciclo for que

For1: ldi tiempo2,249 ;demora1000 ciclos(1ms)

For2: dec tiempo2

cpse tiempo2,cero

rjmp For2

dec tiempo1

cpse tiempo1,cero

rjmp For1

dec tiempo

cpse tiempo,cero

rjmp For

ret

Básicamente este código define el puerto D como salida, y hace que cambie el nivel lógico de todo el

puerto después de una rutina de espera Delay, programado para durar aproximadamente un segundo. Para

entender mejor el código 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 código, 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 información que se muestra en la parte inferior, donde, como no existe

ningún error en la compilación, se tiene el espacio que este código genera en cada uno de los bloques de

memoria del microcontrolador, que en este caso queda ocupado tan solo en un 0.6%.

También puede observarse los nuevos archivos que nos muestra y que se generan al compilar el código,

todos relacionados con el proyecto que se está trabajando.

Page 6: TUTORIAL PARA PROGRAMAR UN ATMEGA8 · PDF fileEste tutorial está diseñado para las personas que nunca han utilizado un microcontrolador de Atmel, y quieren empezar a desarrollar

ELAKT

En este punto ya hemos completado nuestro proyecto, ya que al compilar el código se genera en archivo

.hex, que es el que utiliza el PonyProg para quemar el micro; sin embargo vamos a ver la opción de

simulación que nos da el AVRStudio.

SIMULACIÓN

AVRStudio

Vamos a ver en primera instancia, la simulación utilizando el AVRStudio, el cual tiene la ventaja de permitir

ver que pasa individualmente con cada registro del micro, además del contador de programa y el contador

de ciclos para aplicaciones en las cuales el control del tiempo resulta crucial.

Para tener habilitada la opción del contador de ciclos y de programa, hay que activar la opción en View –

Toolbars – Processor, lo cual va a abrir una nueva pestaña como se muestra en la figura.

Para iniciar la simulación se puede acceder a Build – Build and Run o darle click al ícono número 1 de la

figura, o presionar Ctrl + F7. Una vez hecho esto vemos como aparece una flecha en el campo del código, la

cual indica la línea que se está ejecutando en cada momento de la simulación.

Una vez aquí, se tienen varias opciones para controlar la forma en la cual se va mirar el flujo del programa,

ya sea línea por línea utilizando el ícono 2, ejecutando el programa hasta donde tengamos el cursor

utilizando el ícono 3, dejando que se ejecute sin ninguna restricción, 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

simulación.

Ahora, vamos a utilizar la simulación para mirar el tiempo que demora la rutina Delay utilizando el contador

de ciclos de la ventana processor.

Page 7: TUTORIAL PARA PROGRAMAR UN ATMEGA8 · PDF fileEste tutorial está diseñado para las personas que nunca han utilizado un microcontrolador de Atmel, y quieren empezar a desarrollar

ELAKT

Para esto, se debe ir haciendo click en el ícono 2 (Step into) o presionando F11 hasta que el cursor se sitúe

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 cuánto 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 línea de código ret.

Page 8: TUTORIAL PARA PROGRAMAR UN ATMEGA8 · PDF fileEste tutorial está diseñado para las personas que nunca han utilizado un microcontrolador de Atmel, y quieren empezar a desarrollar

ELAKT

Luego le damos click al ícono Run to cursor, con el fin de que se ejecute el programa automáticamente

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 simulación. Si se da el caso en el que la ejecución se quede en algún ciclo

infinito o tome demasiado tiempo en terminar, se debe darle Stop para poder retomar la simulación.

Page 9: TUTORIAL PARA PROGRAMAR UN ATMEGA8 · PDF fileEste tutorial está diseñado para las personas que nunca han utilizado un microcontrolador de Atmel, y quieren empezar a desarrollar

ELAKT

Finalmente podemos ver el tiempo que demoró la ejecución de la rutina, que como se quería es de un

segundo, con un pequeño 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 simulación muy poderosa, la cual va a permitir un análisis del circuito

completo del diseño, 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 simulación 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 diálogo 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

automáticamente muestra que el componente puede simularse y permite verificar la posición 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 mostrarán otras

opciones en la lista).

Page 10: TUTORIAL PARA PROGRAMAR UN ATMEGA8 · PDF fileEste tutorial está diseñado para las personas que nunca han utilizado un microcontrolador de Atmel, y quieren empezar a desarrollar

ELAKT

Ahora, para colocar el componente en la hoja de simulación, 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 más específicos 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 simulación.

Page 11: TUTORIAL PARA PROGRAMAR UN ATMEGA8 · PDF fileEste tutorial está diseñado para las personas que nunca han utilizado un microcontrolador de Atmel, y quieren empezar a desarrollar

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 lápiz 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 cátodo del Led para completar el montaje.

Page 12: TUTORIAL PARA PROGRAMAR UN ATMEGA8 · PDF fileEste tutorial está diseñado para las personas que nunca han utilizado un microcontrolador de Atmel, y quieren empezar a desarrollar

ELAKT

Nota: Hay que tener en cuenta que este montaje no debe implementarse físicamente, dado que sin una

resistencia en serie con el Led se produce un corto y puede causarle daños al microcontrolador. Para

efectos de simulación esto no es importante, pero cuando se vaya a montar el circuito se debe colocar una

resistencia típicamente 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 simulación, lo cual abre un cuadro de diálogo donde se pueden ver

y modificar las características 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 opción

como esta y le damos click en el ícono de Program File.

Page 13: TUTORIAL PARA PROGRAMAR UN ATMEGA8 · PDF fileEste tutorial está diseñado para las personas que nunca han utilizado un microcontrolador de Atmel, y quieren empezar a desarrollar

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

Page 14: TUTORIAL PARA PROGRAMAR UN ATMEGA8 · PDF fileEste tutorial está diseñado para las personas que nunca han utilizado un microcontrolador de Atmel, y quieren empezar a desarrollar

ELAKT

Para la simulación se pueden resaltar cuatro puntos importantes:

1. Botón de play para iniciar la simulación.

2. Cada pin del microcontrolador tiene un indicador que muestra su nivel lógico en cada instante de la

simulación. Se puede como va cambiando con la ejecución del programa, asi como el Led del

circuito.

3. El reloj de la simulación. 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 simulación se puede

ver como efectivamente cambia su estado cada segundo.

Page 15: TUTORIAL PARA PROGRAMAR UN ATMEGA8 · PDF fileEste tutorial está diseñado para las personas que nunca han utilizado un microcontrolador de Atmel, y quieren empezar a desarrollar

ELAKT

Finalmente otra de las opciones más interesantes del Proteus es el osciloscopio, el cual permite ver las

señales que se manejan en el circuito junto con la simulación. Esta y otras opciones interesantes se pueden

ver en el ícono Virtual Instruments Mode.

PROGRAMACIÓN

Una vez se tiene el proyecto diseñado y simulado satisfactoriamente, el último paso es la programación

física 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 opción 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.

Page 16: TUTORIAL PARA PROGRAMAR UN ATMEGA8 · PDF fileEste tutorial está diseñado para las personas que nunca han utilizado un microcontrolador de Atmel, y quieren empezar a desarrollar

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 código que se hizo.

Finalmente queda solo tener acceso físico 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).

Page 17: TUTORIAL PARA PROGRAMAR UN ATMEGA8 · PDF fileEste tutorial está diseñado para las personas que nunca han utilizado un microcontrolador de Atmel, y quieren empezar a desarrollar

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 información 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 información 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 programación de nuestro primer

proyecto en un micro de ATMEL. Ya después lo único que resta es hacer el montaje con el LED (sin olvidar

una resistencia en serie, normalmente de 220 ohm o más, para evitar cortos y daños en el micro) y verlo

titilar.