Documentos de Académico
Documentos de Profesional
Documentos de Cultura
AVRDUDE
Atmel Studio 7 nos permite integrar el programa AVRDUDE de Arduino con el fin de programar una
tarjeta Arduino y realizar proyectos ya sea utilizando lenguaje C++, lenguaje ensamblador o crear
proyectos basados en los “sketchs” de Arduino aprovechando las ventajas que nos ofrece todo el
entorno de Atmel estudio.
A continuación se mostrará como configurar el entorno de Atmel Studio para poder programar una
tarjeta Arduino Mega creando proyectos en lenguaje C++ y ensamblador
Las pruebas fueron realizadas utilizando la versión 1.6.5 de Arduino, atmel Studio 7 y el sistema
operativo Windows 7.
1. Configuración inicial.
1.1. Descargar e instalar la versión más reciente del IDE Arduino disponible en la página oficial
https://www.arduino.cc/
1.2. Una vez instalado el programa y al abrir el programa ingresar en la opción Archivo
preferencias, en la sección que dice “mostrar salida detallada mientras:” activar la casilla
subir o upload
1.3. Utilizar un ejemplo de Arduino y subirlo a la board que estemos utilizando. Para este
ejemplo se utiliza el Sketch Blink y la tarjeta Arduino Mega. Se debe observar información
que se muestra en la parte inferior del IDE Arduino, esta información será utilizada para
configurar posteriormente el Atmel Studio 7.
De esta información se extrae lo siguiente:
Línea de comando:
C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude
C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude.exe
Argumento:
En esta sección se muestra información referente al tipo de tarjeta que estamos utilizando y el
puerto COM al cual se encuentra conectada, también sobre la ubicación del archivo hexadecimal
que resulta de la compilación del programa.
La parte resaltada en rojo se pone entre comillas doble y la parte resaltada en verde se cambia por
la expresión: "$(BinDir)\$(TargetName).hex"
Una vez instalado ejecutar la aplicación e ingresar en la opción Tools External Tools
1.5. En la ventana que aparece se debe configurar el argumento y la línea de comando que se
definió en la sección 1.3 de esta guía.
Titulo
Escribir aquí la línea de comando
Escribir aquí los argumentos
Es importante resaltar que los argumentos configurados en la ventana external tools dependen de
la tarjeta que estemos utilizando y el puerto COM que haya sido asignado, por tanto al cambiar de
tarjeta es necesario verificar nuevamente estos parámetros para configurar correctamente nuestra
aplicación.
#include <avr/io.h>
#define F_CPU 16000000UL
#include <util/delay.h>
int main(void) {
DDRB = 0xff ;
while (1) {
PORTB= 0xff;
_delay_ms(500);
PORTB = 0x00;
_delay_ms(500);
}
}
2.1. En el menú File New Project seleccionamos la opción GCC C++ Executable Project,
asignamos un nombre al proyecto y definimos la ubicación del mismo.
2.2. Seleccionar el microcontrolador que estemos utilizando, en este caso es el ATmega2560
2.3. Escribir el código y en el menú Build seleccionar la opción Build Solution para compilar y
generar el archivo .hex
2.4. Si no existen errores se mostrará en la parte inferior de la pantalla el resultado de la
compilación con el mensaje Build succeeded.
2.5. Seleccionar Upload en la opción Tools para subir el programa a la board de arduino
En la parte inferior debe salir algo como lo que se muestra a continuación:
avrdude.exe: Version 6.0.1, compiled on Apr 15 2015 at 19:59:58
Copyright (c) 2000‐2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007‐2009 Joerg Wunsch
System wide configuration file is "C:\Program Files
(x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"
Using Port : COM22
Using Programmer : wiring
Overriding Baud Rate : 115200
AVR Part : ATmega2560
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PA0
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐ ‐‐‐‐‐ ‐‐‐‐‐ ‐‐‐‐ ‐‐‐‐‐‐ ‐‐‐‐‐‐ ‐‐‐‐ ‐‐‐‐‐‐ ‐‐‐‐‐ ‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐
eeprom 65 10 8 0 no 4096 8 0 9000 9000 0x00 0x00
flash 65 10 256 0 yes 262144 256 1024 4500 4500 0x00 0x00
lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
Programmer Type : Wiring
Description : Wiring
Programmer Model: AVRISP
Hardware Version: 15
Firmware Version Master : 2.10
Vtarget : 0.0 V
SCK period : 47.8 us
avrdude.exe: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.02s
avrdude.exe: Device signature = 0x1e9801
avrdude.exe: safemode: lfuse reads as FF
avrdude.exe: safemode: hfuse reads as D0
avrdude.exe: safemode: efuse reads as FF
avrdude.exe: reading input file "C:\Users\Felix Andres\Documents\Atmel
Studio\7.0\ArduinoProject\Blink_Led\Blink_Led\Debug\Blink_Led.hex"
avrdude.exe: writing flash (300 bytes):
Writing | ################################################## | 100% 0.08s
avrdude.exe: 300 bytes of flash written
avrdude.exe: verifying flash memory against C:\Users\Felix Andres\Documents\Atmel
Studio\7.0\ArduinoProject\Blink_Led\Blink_Led\Debug\Blink_Led.hex:
avrdude.exe: load data flash data from input file C:\Users\Felix Andres\Documents\Atmel
Studio\7.0\ArduinoProject\Blink_Led\Blink_Led\Debug\Blink_Led.hex:
avrdude.exe: input file C:\Users\Felix Andres\Documents\Atmel
Studio\7.0\ArduinoProject\Blink_Led\Blink_Led\Debug\Blink_Led.hex contains 300 bytes
avrdude.exe: reading on‐chip flash data:
Reading | ################################################## | 100% 0.07s
avrdude.exe: verifying ...
avrdude.exe: 300 bytes of flash verified
avrdude.exe: safemode: lfuse reads as FF
avrdude.exe: safemode: hfuse reads as D0
avrdude.exe: safemode: efuse reads as FF
avrdude.exe: safemode: Fuses OK (H:FF, E:D0, L:FF)
avrdude.exe done. Thank you.
Creamos ahora un Proyecto para realizar la misma operación pero en lenguaje ensamblador
.EQU F_CPU = 16000000
.ORG 0
MAIN:
LDI R16, 0xFF
OUT DDRB, R16 ;Define el Puerto B como salida
BACK:
COM R16 ;Complementa el valor en el registro 16
OUT PORTB, R16 ;Pone el dato en el Puerto B
CALL DELAY
RJMP BACK ; Ciclo infinito
DELAY: ; Rutina de retardo
LDI R17, 100
LOOP3: LDI R18, 64
LOOP2: LDI R19, 255
LOOP1: DEC R19
BRNE LOOP1
DEC R18
BRNE LOOP2
DEC R17
BRNE LOOP3
RET
3.1. En el menú File New Project seleccionamos la opción AVR Assemebler Project,
asignamos un nombre al proyecto y definimos la ubicación del mismo.
3.4. Seleccionar la opción Upload en la opción Tools para subir el programa a la board de
Arduino.