1.1 Atmel Studio

avrstudios

Partiendo del anterior tutorial se van a ver las herramientas de Atmel necesarias para hacer un programa en C y grabarlo en el microcontrolador. Se usará Atmel Studio en Windows para crear el programa y un programador de Atmel para grabarlo en el microcontrolador.

Atmel es uno de los pocos fabricantes de microcontroladores que nos proporciona de manera gratuita todas las herramientas software necesarias para poder trabajar con sus microcontroladores.

Estas herramientas (editor, compilador, ensamblador, linker, etc..) las encontramos integradas en Atmel Studio, un entorno de desarrollo profesional y gratuito para los microcontroladores de Atmel que podemos descargar en el siguiente enlace.

Lo primero que tenemos que hacer para preparar nuestro pc para trabajar con los microcontroladores de Atmel es instalar Atmel Studio, una vez instalado vamos a comentar los pasos que se han de seguir para crear un programa en C y descargarlo en el microcontrolador.

Como microcontrolador en este tutorial vamos a usar ecTiny841, una placa de bajo coste para protoboard con un microcontrolador de 8 bits de Atmel.

ecTiny841

ecTiny841

Una vez instalado Atmel Studio lo abrimos y encontramos la siguiente ventana.

Atmel Studio.

Atmel Studio. Click en New Project.

En la ventana anterior pinchamos en New Project para empezar a crear el programa que grabaremos en el microcontrolador, se nos abrirá la siguiente ventana en la que seleccionaremos el tipo de proyecto que vamos a crear.

Click en GCC C Executable Project

Seleccionamos “GCC C Executable Project” y el nombre y carpeta para guardar el proyecto

Vamos a crear un programa en C que defina la tarea a realizar por el microcontrolador dentro del circuito electrónico, para ello en la ventana anterior seleccionamos “GCC C Executable Project” y ponemos el nombre y carpeta donde vamos a guardar el proyecto en nuestro PC. En este caso dejamos el nombre por defecto y le damos a OK, abriendose la ventana donde seleccionamos el microcontrolador que queremos programar.

Seleccionamos ATtiny841

Seleccionamos ATtiny841

Seleccionamos ATtiny841 que es el microcontrolador de Atmel que encontramos en la placa que vamos a usar para realizar este ejemplo. Pinchamos en OK y se nos abre la ventana del proyecto, donde vamos a escribir el programa que se va a grabar y ejecutar en el microcontrolador.

Ventana del proyecto

Ventana del proyecto

Vamos a escribir un programa sencillo que por ejemplo apague y encienda un diodo led una vez por segundo, con el que podamos comprobar que el programa se ha generado y grabado correctamente en el microcontrolador y se está ejecutando en éste de la forma esperada.

Para ello en GccApplication1.c escribimos el siguiente código:

#include <avr/io.h>
#define F_CPU 8000000UL			//clock frequency
#include <util/delay.h>
 
#define ledPin PORTA0
 
int main(void)
{
    DDRA |= (1<<ledPin);		//output pin
 
    while(1)
    {
		PORTA ^= (1<<ledPin);	//Toggle led
		_delay_ms(500);		//Delay 0.5 s
 
    }
}

En este tutorial no hay necesidad de comprender el código anterior, la finalidad de este tutorial es instalar el entorno de desarrollo del microcontrolador en el PC, crear un programa para el microcontrolador y grabarlo en éste para ver que todo funciona correctamente, explicando los pasos necesarios. El código anterior se explicará con detalle en próximos tutoriales.

Código del programa del microcontrolador

Código del programa del microcontrolador

Una vez que hemos escrito el programa del microcontrolador en Atmel Studio debemos generar un archivo a partir de este programa que va a correr en el microcontrolador. Si pulsamos F7 o le damos al botón “Build Solution”, Atmel Studio compila el programa y genera de forma automática el archivo de instrucciones que vamos a grabar en el microcontrolador.

Pulsamos F7 para crear el fichero de programa del microcontrolador.

Pulsamos F7 para crear el fichero de programa del microcontrolador.

En la parte inferior de Atmel Studio encontramos información referente a la generación del fichero de programa del microcontrolador. Podemos ver si el código que hemos escrito se ha compilado correctamente, y el tamaño de memoria de programa (FLASH) y de datos (SRAM) que va a ocupar y necesitar cuando se ejecute en el microcontrolador. No debemos usar más de un 70% de “Data Memory Usage” (SRAM del microcontrolador) ya que superado este porcentaje se pueden tener problemas con el stack del microcontrolador (más sobre esto en próximos tutoriales).

El archivo que debemos grabar en el microcontrolador mediante un programador es un .hex que encontramos en la carpeta del proyecto que hemos creado.

Archivo .hex con el programa para grabar en el microcontrolador.

Archivo .hex con el programa para grabar en el microcontrolador.

Para grabar el archivo anterior en el microcontrolador y que éste realice una tarea debemos usar un programador.

Un programador se conecta entre el PC y el conector de programación del microcontrolador y permite grabar un archivo en las memorias no volátiles del microcontrolador (FLASH y EEPROM), leer el contenido de las memorias de un microcontrolador siempre que éste no esté protegido, y cambiar la configuracion de los fuses.

Programador AVRISP mkii y debugger JTAGICE3 de Atmel

Programador AVRISP mkii y debugger JTAGICE3 de Atmel

Las opciones más asequibles de programadores de Atmel integradas con AVR Studio que podemos comprar a través de los principales distribuidores online de electrónica, o en la página del propio fabricante son:

La diferencia entre el programador y el debugger, es que el debugger además de valer como programador, nos sirve también para ver que valores toman los registros internos del microcontrolador y variables del programa cuando el programa se está ejecutando dentro del microcontrolador. Parar la ejecución del programa en cierto punto y observar el valor de las variables y registros del microcontrolador, ejecutar instrucciones paso a paso, etc..

Cuando hemos cometido un error en el código, y el programa del microcontrolador no funciona como debe funcionar dentro del circuito, el debugger es una de las herramientas más útiles que puede haber para encontrar el error, y que nos puede ahorrar muchas horas de revisar líneas de código. Por la diferencia de precio entre las dos opciones el debugger es la más interesante si se va a trabajar con microcontroladores de Atmel.

El programador o el debugger lo conectaremos al conector de 6 pines de programación de ecTiny841 en la parte superior de la imagen.

ecTiny841. Conector de programación en la parte superior.

ecTiny841. Conector de programación en la parte superior.

El conector de programación suele tener una marca: una raya, un circulo, un número 1, etc.. que indica donde va la marca roja en el cable del conector del programador o debugger.

conector y programador

Marca en el cable alineada con marca en el conector de programación del micro.

Conectamos el programador o debugger al pc y al microcontrolador y proporcionamos alimentación a la placa del microcontrolador. Para grabar el programa que hemos creado en el microcontrolador pulsamos el botón “Device Programming” en la parte superior derecha.

Atmel Studio

Device programming

Y se nos abre la siguiente ventana donde seleccionamos el programador que hemos conectado, el microcontrolador a programar, y pulsamos Apply.

Seleccionamos el microcontrolador y programador y pulsamos Apply.

Seleccionamos el microcontrolador y programador y pulsamos Apply.

A continuación para grabar el programa .hex que ha generado Atmel Studio anteriormente nos vamos a la pestaña de Memories, y en el cuadro de selección de la memoria Flash buscamos y seleccionamos el archivo .hex anterior, y pulsamos programar.

Seleccionamos el .hex a grabar en la memoria Flash y le damos a Program.

Seleccionamos el .hex a grabar en la memoria Flash y le damos a Program.

Si hemos realizado todos los pasos correctamente el led conectado al pin A0 de ecTiny841 comenzará a parpadear una vez por segundo aproximadamente. Hemos creado y grabado un programa en un microcontrolador correctamente.

La otra opción de Atmel es usar un debugger en lugar de un programador, los pasos para descargar un programa al microcontrolador son exactamente los mismos que los descritos anteriormente para el programador, usando el mismo conector de programación en la placa del microcontrolador.

Pero además el debugger nos permite ver que pasa dentro del microcontrolador cuando éste está corriendo el programa, para ello debemos tener conectado un debugger y habilitar el interfaz de debug dentro del microcontrolador. Para entrar en modo debug debemos cambiar el valor de un Fuse, para ello hacemos los mismos pasos que a la hora de grabar un programa pero en lugar de entrar en la pestaña de “Memories” entramos en la pestaña de “Fuses”.

Interfaz de debug. Habilitar el FUSE DWEN.

Interfaz de debug. Habilitar el FUSE DWEN.

IMPORTANTE: sin tocar nada más marcamos el cuadro de DWEN y le damos a program, a esta pestaña podemos acceder con un programador o un debugger, pero en el momento que seleccionamos y programamos el fuse DWEN el microcontrolador solo se podrá comunicar con un debugger y no podrá comunicarse más con un programador. Necesitaremos un debugger para desactivar DWEN.

Al habilitar el interfaz debugWire el interfaz ISP deja de funcionar.

Al habilitar el interfaz debugWire el interfaz ISP deja de funcionar.

Cerramos la ventana anterior y en Atmel Studio pulsamos F5 o “Start Debugging”, seleccionamos el debugger que tenemos conectado en la ventana que se nos abre y el interfaz debugWIRE.

Seleccionamos el debugger y debugWIRE.

Seleccionamos el debugger y debugWIRE.

 Y volvemos a pulsar F5 o el botón de “Start Debugging” para entrar en modo debug.

Modo Debug.

Modo Debug.

En modo debug podemos ver lo que está pasando dentro del microcontrolador mientras éste ejecuta el código que hemos grabado, ver el valor de sus registros, de sus puertos de salida, de sus memorias, etc.. Por lo que es una herramienta indispensable para trabajar con microcontroladores cuando el código tiene un error y no hace lo que tiene que hacer.

Para salir de modo debug y deshabilitar el fuse DWEN seleccionamos “Disable debugWIRE and Close”.

Deshabilitar el interfaz de debug.

Deshabilitar el interfaz de debug.

Si nos vamos a la pestaña de fuses de nuevo y le damos a Read encontraremos que el fuse DWEN ha sido desactivado, y por tanto la placa se puede volver a usar con un programador por su interfaz ISP.

Lectura de fuses

Lectura de fuses

Pues estas son las herramientas de Atmel que necesitamos para trabajar con sus microcontroladores. El entorno de desarrollo es muy completo y gratuito, por lo que si usamos windows será la elección recomendanda. Los programadores cuestan unas decenas de $ pero están totalmente integrados en el entorno de desarrollo, siendo recomendable la compra del debugger frente al programador.

Hay programadores de terceros más baratos, incluso la posibilidad de programar un micro de Atmel usando una placa de Arduino, los comentaremos en próximos tutoriales ya que pueden ser también una opción. Aunque si se van a pasar horas y horas trabajando con microcontroladores lo más sensato puede ser adquirir un debugger de Atmel.

Enlaces relacionados: