Me gustaría programar un ATmega1284p con mi AVR Dragon y el IDE de Arduino. Hasta ahora he instalado mighty1284p ( enlace ), después de escribir mi (ejemplo ) bosquejo Lo compilo usando el IDE de Arduino y luego cd
en el directorio (temporal) en el que se construye el bosquejo. Contiene el archivo .hex
, como parece lógico.
Luego subo el archivo .hex
a la 1284 usando Dragon y avrdude
, que también parece funcionar bien.
Excepto en mi tablero, el 1284 lo hace - nada. No blink
en el pin 13 (o cualquier otro pin para eso).
Los fusibles se han configurado para utilizar el oscilador RC interno con un tiempo de inicio de 65 ns. El voltaje de alimentación es + 5V / GND, medido bien.
Esta es mi configuración de fuente. Entre VCC y GND tengo un condensador de 20pF según las instrucciones de Atmel.
¿Alguna idea de lo que estoy haciendo mal aquí?
Editar 1 Estoy tratando de hacer que el ejemplo de Blink del Arduino IDE funcione:
/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.
This example code is in the public domain.
*/
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 1;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
El barebones ejemplo de avr-gcc que funciona que sigo hablando en los comentarios es este:
#include <util/delay.h>
#include <avr/io.h>
#define F_CPU 1000000
int main (void) {
DDRB = 0xff;
while(1) {
PORTB |= (1<<PB1); //Bit setzen
_delay_ms(1000); // halbe sekunde warten
PORTB &= ~(1<<PB1); // Bit loeschen
_delay_ms(1000); // halbe sekunde warten
}
return 0;
}
He subido satisfactoriamente .hex
de este programa y la unidad de control (uC) parpadea en Pin2 como debería, el resto de PORTB está ALTO mientras tanto (de nuevo, como debería ser). Así que asumo que el cableado, la potencia y mis habilidades n00b avrdude
son, bueno, suficientes. Simplemente me gustaría usar las construcciones en lenguaje Bequem de Arduino ... ( bequem es alemán para "conveniente, cómodo", como en "No pienso en comprar zapatos nuevos, míos son bastante bellos! ";)
Edit 2 ¿Qué haría yo sin ustedes, chicos? No he aprendido mucho en una noche desde hace mucho tiempo.
A veces, solo hablar de ello ayuda enormemente a derribar las barreras cerebrales.
He puesto los fusibles en mi 1284p para usar el RCO interno plus . He configurado el fusible para dividir la velocidad del reloj entre 8. Evey, debería haber sido capaz de hacer las cuentas en mi cabeza , la velocidad del reloj es ahora 1MHz. mighty1284p
en su configuración original quiere una velocidad de 16 MHz, por lo que todo fue tan lento que pensé que no funcionaba en absoluto, cuando en realidad solo estaba rastreando.
Configuración de trabajo hasta ahora:
El IDE de Arduino con mighty1284p
, lo agregué a boards.txt de mighty1284p
:
##############################################################
mighty_opt8.name=Mighty 1284p 8MHz using Optiboot
mighty_opt8.upload.protocol=arduino
mighty_opt8.upload.maximum_size=130048
mighty_opt8.upload.speed=115200
mighty_opt8.bootloader.low_fuses=0xff
mighty_opt8.bootloader.high_fuses=0xde
mighty_opt8.bootloader.extended_fuses=0xfd
mighty_opt8.bootloader.path=optiboot
mighty_opt8.bootloader.file=optiboot_atmega1284p.hex
mighty_opt8.bootloader.unlock_bits=0x3F
mighty_opt8.bootloader.lock_bits=0x0F
mighty_opt8.build.mcu=atmega1284p
mighty_opt8.build.f_cpu=8000000L
#mighty_opt8.build.core=arduino:arduino
mighty_opt8.build.core=standard
mighty_opt8.build.variant=standard
##############################################################
mighty_opt1.name=Mighty 1284p 1MHz using Optiboot
mighty_opt1.upload.protocol=arduino
mighty_opt1.upload.maximum_size=130048
mighty_opt1.upload.speed=115200
mighty_opt1.bootloader.low_fuses=0xff
mighty_opt1.bootloader.high_fuses=0xde
mighty_opt1.bootloader.extended_fuses=0xfd
mighty_opt1.bootloader.path=optiboot
mighty_opt1.bootloader.file=optiboot_atmega1284p.hex
mighty_opt1.bootloader.unlock_bits=0x3F
mighty_opt1.bootloader.lock_bits=0x0F
mighty_opt1.build.mcu=atmega1284p
mighty_opt1.build.f_cpu=1000000L
#mighty_opt1.build.core=arduino:arduino
mighty_opt1.build.core=standard
mighty_opt1.build.variant=standard
##############################################################
Ahora mi IDE de Arduino tiene nuevos tableros: Mighty 1284p 1MHz using Optiboot
y Mighty 1284p 8MHz using Optiboot
que direcciona / usa / hace referencia a las velocidades de reloj disponibles internamente.
Ahora avrdude
necesita configurar los fusibles:
avrdude -c dragon_pp -P usb -p m1284p -U lfuse:w:0x62:m -U hfuse:w:0x99:m -U efuse:w:0xFF:m -U lock:w:0xFF:m
No puedo hacer esto en mi cabeza, ni sé mucho sobre esto. Pero las redes también ayudan a un hombre pobre aquí: enlace cede lo anterior.
Entonces es simplemente una cuestión de mirar la salida de Arduino, cd
ing en el directorio y cargar el .hex
listo para usar:
cd /var/folders/px/xmf1dygn6p5_fn1hh05c6gyr0000gn/T/build4082512148637729777.tmp/
avrdude -p m1284p -c dragon_pp -P usb -U flash:w:Fade.cpp.hex
(y sí, he actualizado silenciosamente mis pruebas a algo más desalentador, como el ejemplo Fade
. Funciona.
Ahora todo lo que queda: ¿Cómo usaría el HVPP del AVR Dragon directamente desde el IDE de Arduino? He añadido una sección a programmers.txt
como tal:
dragonpp.name=AVR Dragon HVPP
dragonpp.communication=usb
dragonpp.protocol=dragon_pp
dragonpp.force=false
que asumí sería correcto para los parámetros avrdude
anteriores, pero por ahora el IDE sigue pidiéndome un puerto (como en /dev/tty.usbAF65de
) que, por supuesto, el Dragón no tiene, el -P
correcto La opción para avrdude
es simplemente usb
(que, ver más arriba, funciona si se hace manualmente).
¿Alguna otra idea sobre cómo agregar la programación paralela de alto voltaje del AVR Dragon a Arduino?