Arduino como programador AVR con Avrdude

2

Mi objetivo es programar un solo ATmega328P sentado en una placa de pruebas. Debido a mi ubicación y al efectivo disponible no puedo adquirir un programador AVR ICSP, por lo que (a través de la investigación) descubrí que puedo usar un arduino como programador AVR y decidí usarlo.

El boceto de ArduinoISP se cargó en mi Arduino Uno R3 con éxito y los pines correspondientes se conectaron a mi tablero.

Escribí un programa en C simple en Atmel Studio y lo compilé en un archivo hex de Intel, luego procedí a usar avrdude para cargar el archivo a la μCU. Avrdude reportó un destello exitoso (la verificación también fue exitosa) pero el μCU no parece estar respondiendo.

El programa C simple como se muestra a continuación:

//Define CPU speed to 1 MHz (8 MHz internal with CKDIV8)
#define F_CPU 1000000

#include <avr/io.h>
#include <util/delay.h>

int main(void){
    DDRC = 0xFF; //Set all of port C to outputs

    while(1){
        PORTC = PORTC ^ 0xFF; //Toggle all of port C
        _delay_ms(500); //Delay 500ms
    }

    return 0;
}

Comando utilizado para enviar el flash a Atmega328P:

$ avrdude -c arduino -p m328p -P COM9 -U flash:w:"compiled_file.hex":i

Se conectó un solo LED (con una resistencia de 220 ohmios) desde el suelo hasta el pin PC5. Si mi lógica es correcta, esta luz debe encenderse / apagarse cada 500 ms, pero la luz permanece apagada. El LED ha sido probado y la polaridad de la conexión confirmada (positivo a pin, negativo a tierra).

Como nota al margen, también descubrí que cuando le dije a avrdude que leyera la configuración del fusible en el μCU, todos se registraron como 0x00, lo cual es bastante extraño.

Cualquier ayuda sería muy apreciada.

Actualizar:

A través de un poco de experimentación, descubrí que el comando mencionado anteriormente le decía a avrdude que programara el ATmega328P en el arduino uno en lugar del ATmega328P en el tablero. He reiniciado el ArduinoISP con éxito al Arduino, así que he vuelto al paso uno. ¿Alguien sabe cómo hacer que avrdude escriba al ATmega328P en el tablero?

    
pregunta initramfs

2 respuestas

1

Al leer la pregunta, parece que olvidó uno de los componentes necesarios.

La ejecución de AVRDUDE hará que la MCU del host se reinicie. Para evitar esto, debe colocar un condensador en la línea nRESET del host para mantener el voltaje por encima de un cierto umbral. Agregue el condensador como se describe en el artículo de ArduinoISP e intente nuevamente.

    
respondido por el Ignacio Vazquez-Abrams
-1

He encontrado exactamente el mismo problema la semana pasada.

Firma del informe Avrdude m328p (uno), mientras estoy programando ATmega8A.

El programador ArduinoISP debería ser:

avrdude -c stk500v1 -b 19200 
    
respondido por el suxingyu.com

Lea otras preguntas en las etiquetas