Probando el ATmega(32/16)u4

Después de varios meses esperando a que las tiendas tuviesen stock de estos microcontroladores he podido comprar en farnell unos cuantos ATmega16u4,  su principal ventaja frente a otros microcontroladores de 8 bits es que según vienen de fábrica los podemos programar mediante una conexión usb, sin necesidad de tener que comprar un programador para grabar el bootloader (ya traen uno) o trabajar con ellos. Lo primero ha sido hacer una placa para probar su programación.

Las características del micro las podemos encontrar aquí y la información del bootloader con el que viene aquí.

En internet se pueden encontrar varias placas y esquemas de circuitos hechos con estos micros, ya que por lo visto se utilizan en el mundo de las consolas para jugar con copias y esas cosas, no estoy muy al día en esos temas. He montado una placa  a una cara con los mínimos componentes para probar el micro: cristal, conexión usb, condensadores, etc.. y he sacado los pines de los puertos al exterior estilo Arduino.

  1. Esquema.
  2. Fotolito.
  3. Imagen con detalle de los componentes de la placa montada.

Componentes principales:

Los pines se corresponden con las siguientes letras, el el conector de P, 0, 1, ….. D, P: Vcc, sin conexión, PB0, PB1, PB2, PB3, PB7, RESET, PD0, PD1, PD2, PD3, PD5, PD4, PD6, Vcc. Y en el conector N, 0, 1, …., D, N con: GND, PD7, PB4, PB5, PB6, PC6, PC7, PF7, PF6, PF5, PF4, PF1, PF0, AREF, PE6, N. El único pin que no se ha sacado ha sido PE2 (HWB), que se ha dejado fijo a tierra ya que se utiliza para que el microcontrolador entre en el modo de carga del bootloader después de pulsar el botón de reset.

Lo primero que hay que hacer para poder usar la placa es ir a la página de Atmel y descargar e instalar FLIP. Una vez que hemos instalado el programa (lo he hecho en Windows ya que uso AVRStudio + WinAVR) conectamos la placa, si no salta lo de nuevo hardware detectado para instalar el driver pulsamos el botón de reset de la placa, y hacemos la búsqueda manual de la instalación del driver que se encuentra en la ruta de la imagen:

Una vez instalado el driver le damos al icono de FLIP del escritorio y abrimos el programa encontrando la siguiente pantalla:

Pinchando en el primer botón (circuito integrado) seleccionamos el micro que vamos a programar, en este caso el ATmega16u4.

Si no lo hemos hecho ya, con la placa conectada al puerto USB pulsamos el botón de la placa (reset) para que el micro entre en el modo de bootloader y pulsamos el segundo botón del programa (el cable usb), seleccionamos usb y le damos a open, viendo la siguiente pantalla:

Todos los botones que antes estaban apagados ahora tienen color y estamos conectados con el microcontrolador, pasando el ratón sobre ellos podemos leer lo que hace cada botón en el micro.

Lo primero para comprobar que el micro funciona es hacer un “hola mundo”, para ello abrimos el AVRStudio y creamos un nuevo proyecto, por ejemplo escribimos el siguiente código que enciende y apaga un pin y lo compilamos con el WinAVR.

#include <avr/io.h> 
#define F_CPU 2000000UL
 
void inicializar_puertos(void);
 
int main(void)
{
    inicializar_puertos();
 
    while(1)
    {
	PORTB ^= 0x01;
    }
}
 
void inicializar_puertos(void)
{
       DDRB = 0x01;
       PORTB = 0x00;
}

Al compilar generamos en la carpeta que indicamos cuando se creo el proyecto en el AVRStudio un archivo .hex, que es el que debemos grabar en el micro, para ellos le damos al botón “Load Hex File” (el libro con la flechita para dentro) y buscamos el .hex requerido.

Ahora sólo debemos darle a “Run” para grabar el microcontrolador marcando todas las opciones de la izquierda Erase, Blank Check, Program, Verify. Una vez programado no lo podemos volver a leer el micro para proteger el código, siendo la única acción que permite el bootloader un Erase de la memoria con el que comenzaremos otra vez el ciclo de programación.

Pulsando Run hemos grabado el programa en el micro, pero aún estamos en el modo del bootloader y el micro no hace aún lo que le hemos programado. Para salir del bootloader tenemos que darle al botón “Start Application” asegurandonos antes de que la casilla de Reset No está marcada, ya que si no volveremos a entrar y salir del modo, al estar el pin del micro HWB que lanza el bootloader después del Reset activado en la placa.

Pulsamos Start Application saliendo de modo bootloader y el programa que hemos grabado empieza a correr en el micro. Por lo que si ponemos un osciloscopio en el pin PB0 del mircocontrolador podemos ver el “Hola Mundo” que hemos programado, como el pin cambia de 1 a 0.

A falta de osciloscopio buenos son los leds para los “Hola Mundo”, por lo que para volver a grabar otro programa en el microcontrolador lo primero es entrar en el modo bootloader, es decir, pulsamos el botón de Reset en la placa y volvemos a pulsar el botón del cable usb en el programa para conectarnos al microcontrolador, repitiendo todo el proceso anterior.

Por ejemplo compilamos el siguiente programa en el AVRStudio que enciende de forma secuencial cuatro leds conectados a los bits bajos del Puerto B.

#include <avr/io.h> 
#define F_CPU 2000000UL
#include <util/delay.h>
 
 
void inicializar_puertos(void);
 
int main(void)
{
    inicializar_puertos();
 
    while(1)
    {
	PORTB = 0b00000001;
        _delay_ms(300);
 
        PORTB = 0b00000010;
        _delay_ms(300);
 
        PORTB = 0b00000100;
        _delay_ms(300);
 
        PORTB = 0b00001000;
        _delay_ms(300);
    }
}
 
void inicializar_puertos(void)
{
       DDRB = 0x0F;
       PORTB = 0x00;
}

Cargamos el .hex que hemos generado al compilarlo repitiendo los pasos de antes y salimos del bootloader pulsando Start Application, ejecutandose el programa grabado.

Una vez que hemos grabado el programa en el micro cerramos FLIP.

La próxima vez que conectemos la placa en el puerto usb o a una alimentación externa de 5 V el programa que tiene el microcontrolador empieza a correr, si pulsamos el botón de Reset entramos en el bootloader y no salimos de él hasta que no volvamos a quitar y poner la alimentación, o hasta que lancemos el programa del microcontrolador desde FLIP como en los ejemplos anteriores. Una opción hubiese sido poner un pulsador en el pin HWB para entrar en el bootloader cuando quisieramos y poder usar el botón de Reset de forma normal.

Las desventajas del bootloader de fábrica es que ocupa 4 k de memoria de programa, dejando la memoria de programa del ATmega16u4 en 12K y la del ATmega32u4 en 28k, más que suficiente para muchas aplicaciones.

La otra gran desventaja que todavía no he buscado si se pueden programar desde FLIP son los fuses del micro, por defecto el microcontrolador viene de fábrica dividiendo la señal del cristal externo que pongamos entre 8, por lo que la frecuencia de 16 MHz la convierte en un reloj de 2 MHz, aún no he buscado si se puede cambiar ésto ya que sólo he probado el funcionamiento de la placa para comprobar su programación desde el usb.

La ventaja es que nos quitamos la necesidad de tener que comprar un programador externo, o la necesidad de buscar a alguien que nos grabe un bootloader para poder usar el microcontrolador.

Por el precio del microcontrolador (3-5 euros) más 3 ó 4 euros del pcb y los componentes, tenemos todo lo necesario para empezar con los AVR. El entorno de programación y el compilador son gratuitos y la documentación y comunidad de los AVR de las mayores.

Tenemos más o menos el hardware que nos dan al comprar una placa de Arduino 5 veces más barato.

La placa sólo la he montado para probar a programar el micro desde el usb como viene de fábrica, no lleva ningún elemento de protección para el puerto USB y tampoco he revisado todo el diseño ya que sólo he mirado el datasheet del micro de manera rápida para hacerla. Por si a alguien le da por hacer el fotolito que he subido que la revise, no me hago responsable de posibles puertos usb quemados :-).

Visitas :26593
Responses are currently closed, but you can trackback from your own site.

9 Responses to “Probando el ATmega(32/16)u4”

  1. [...] programmer or serial link? Well in fact there are quite a few of them, and this awesome tutorial (google translate) is a quick and easy crash course in using the ATMega 16/32U4 micro [...]

  2. Hari says:

    This will take much of the pain

  3. tobi says:

    is it possible to buy one from you?

    tobi

  4. badajoz says:

    hola¡ me ha encontrado tu post ademas se que lo buscaba por todas partes esta muy bien explicado pero tengo algunas dudas y haber si me las puedes resolver,una es que condensadores se ponen entre la conexión entre Vcc y GND supongo que son de 100nF pero no lo tengo claro y como necesito saberlo para hacer el pedido pues si me lo pudiese aclarar seria de gran ayuda, otro es el condensador de aref que supongo que sera de los de 100 también y por último si pudiese explicar como usar el puerto i2c seria magnifico sino es mucha molestia.
    Gracias por todo.
    Un salu2¡

  5. Inizul says:

    Hola,
    Me gustaría agradecerte el que hayas compartido esta información.

    La he utilizado para realizar un clon de Arduino Leonardo:

    http://txapuzas.blogspot.com/2009/12/paperduino-leonardo-clon-de-arduino.html

    Saludos y muchas gracias de nuevo

    • Jorge says:

      Me gusta mucho como te ha quedado, un Arduino para “hacerselo uno mismo” en casa, más barato que la opción comercial y con un acabado final sobresaliente, cuando tenga un rato te hago una entrada en el blog que está genial, felicidades.

Subscribe to RSS Feed Follow me on Twitter!