Encontré su pregunta al intentar hacer exactamente lo mismo: programe una placa Arduino existente en un ensamblaje AVR puro sin tener que usar ningún hardware adicional. Terminé descubriendo cómo hacerlo por mi cuenta, por lo que quiero compartir mi respuesta que cualquiera debería poder reutilizar en Windows.
Primero, descargue Atmel Studio . Estoy usando la versión 6.1. Esto le permitirá compilar el código de ensamblaje AVR que escribe en un archivo .hex
que se escribirá en el microcontrolador en la placa Arduino. Mi tablero Arduino es un Arduino Uno que usa el chip ATmega328P, así que selecciónelo al crear un nuevo proyecto en Atmel Studio.
Si eres como yo e intentas aprender el ensamblaje de AVR, es probable que también quieras el Conjunto de instrucciones AVR de 8 bits guía que le indica qué instrucciones puede usar en el ATmega328P.
Aquí está el código que uso para obtener un LED parpadeante en Arduino en ensamblaje puro:
/*
* Get an LED blinking on the ATmega328 (Arduino)
* On Arduino, pin 13 has an on-board LED which blinks. Pin 13 should map to PB5 (SCK/PCINT5) on the MCU.
*/
.ORG 0x0000 // Tells the next instruction to be written
RJMP main // State that the program begins at the main label
main:
LDI r16, 0xFF // Load the immedate value 0xFF (all bits 1) into register 16
OUT DDRB, r16 // Set Data Direction Register B to output for all pins
loop:
SBI PortB, 5 // Set the 5th bit in PortB. (i.e. turn on the LED)
RCALL delay_05
CBI PortB, 5 // Clear the 5th bit in PortB. (i.e. turn off the LED)
RCALL delay_05
RJMP loop // Loop again
// Everything beneath is part of the delay loop
delay_05:
LDI r16, 8
outer_loop:
LDI r24, low(3037)
LDI r25, high(3037)
delay_loop:
ADIW r24, 1
BRNE delay_loop
DEC r16
BRNE outer_loop
RET
Localice el archivo .hex
que Atmel Studio crea cuando compila el código anterior. El mío está en C:\Users\John\Documents\Atmel Studio.1\AssemblerApplication1\AssemblerApplication1\Debug
.
El IDE de Arduino usa AVRdude para enviar los programas que escribes en C a la placa Arduino. Puede ver esto activando la salida detallada en el IDE de Arduino y observando lo que sucede en el registro. Encontré que usar la misma versión de AVRdude que instala el IDE de Arduino funciona bien. Aquí está el comando para cargar su programa en su Arduino:
"C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avrdude" -C avrdude.conf -v -p atmega328p -c arduino -P \.\COM5 -b 115200 -D -U flash:w:compiled-code.hex:i
Deberá usar un comando diferente si AVRdude se instala en un lugar diferente. También deberá encontrar su copia de avrdude.conf
y copiarla (junto con el archivo .hex
de la carpeta Debug
anterior) en la carpeta desde la que ejecutará el comando anterior. Es mejor activar la salida detallada en el IDE de Arduino y verificar el comando correcto para usted. (Por ejemplo, su Arduino podría no estar conectado a través de COM5.)
Puede leer más acerca de las opciones utilizadas por AVRdude en Tutorial AVR de ladyada . Las instrucciones anteriores no funcionarán si aún no tiene un Arduino trabajando con el IDE de Arduino; en otras palabras, el cargador de arranque Arduino ya debe estar en su chip ATmega328. Esto no sobrescribirá el cargador de arranque, y puede cambiar fácilmente el uso de este método de programación para usar el IDE de Arduino sin dolores de cabeza.