¿Programando un ATmega1284p con Arduino IDE y un oscilador RC interno?

6

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.

simular este circuito : esquema creado usando CircuitLab

¿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?

    
pregunta Christian

1 respuesta

2

Antes de que sepultemos esta pregunta, me gustaría volver a mi hijo olvidado.

Respuesta corta: el dragón estaba defectuoso, una unidad intercambiada funcionaba bien. A partir de entonces me olvidé totalmente de cerrar esta pregunta. Lo siento.

    
respondido por el Christian

Lea otras preguntas en las etiquetas

Filtrado EMI de la interfaz RGB digital ___ conversión de qstnhdr ___ de Moore a Mealy ______ qstntxt ___

¿Alguien puede explicar cómo puedo convertir de Moore FSM a Mealy FSM y viceversa?

    
______ answer73397 ___

La conversión de Moore a Mealy es fácil. Aquí están los pasos:

  • Sea S (i) el estado actual y O (i) se muestre en este estado
  • Adjunte la salida O (i) a todas las transiciones de estado que entran en el estado S (i)
  • Eliminar la salida O (i) del estado S (i)
  • Ir al siguiente estado
  • Repita los pasos del procedimiento anterior hasta que se manejen todos los estados

Tenga en cuenta que para el estado de inicio S (0), el procedimiento sigue siendo casi el mismo, excepto que O (0) se asignará al reiniciar. Además, el número de estados permanece inalterado en la conversión de moore a mealy.

La conversión de Mealy a Moore es mucho más complicada. Es básicamente el proceso inverso, excepto que a veces es necesario dividir (o copiar) un estado cuando hay un conflicto de salidas distintas en las transiciones que entran en ese estado. Las distintas salidas en los bordes entrantes se asignan a la copia respectiva del estado. Además, cada copia conserva todos los bordes salientes originales. Este procedimiento se repite para los estados subsiguientes hasta que se manejan los estados restantes. El número de estados en la máquina de Moore resultante es mucho más alto que la máquina carnosa original. Hay algoritmos específicos utilizados en las herramientas EDA para hacer esto.

    
___