Mi objetivo es programar un solo ATmega328P sentado en una placa de pruebas. Debido a mi ubicación y al dinero disponible, no puedo adquirir un programador AVR ICSP, así 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 apropiados se conectaron a mi tablero.
Escribí un programa C simple en Atmel Studio y lo compilé en un archivo hexadecimal de Intel y luego procedí a usar avrdude para cargar el archivo en la μCU. Avrdude informó un flasheo exitoso (verificación exitosa también) pero la μCU no parece estar respondiendo.
El programa C simple de la siguiente manera:
//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 al Atmega328P:
$ avrdude -c arduino -p m328p -P COM9 -U flash:w:"compiled_file.hex":i
Un solo LED (con una resistencia de 220 ohmios) se enganchó desde tierra al pin PC5. Si mi lógica es correcta, esta luz debería encenderse/apagarse cada 500 ms, pero la luz permanece apagada. Se probó el LED y se confirmó la polaridad de la conexión (positivo a pin, negativo a tierra).
Como nota al margen, también descubrí que cuando le pedí a avrdude que leyera la configuración de los fusibles en la μCU, todos se registraron como 0x00, lo cual es bastante extraño.
Cualquier ayuda sería muy apreciada.
Actualizar:
A través de algunos experimentos, descubrí que el comando mencionado anteriormente de alguna manera le decía a avrdude que programara el ATmega328P en el arduino uno en lugar del ATmega328P en la placa de pruebas. Volví a actualizar con éxito el ArduinoISP al Arduino, así que volví al paso uno. ¿Alguien sabe cómo obtener avrdude para escribir en el ATmega328P en el protoboard?
Al leer la pregunta, parece que olvidó uno de los componentes necesarios.
Ejecutar 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 cierto umbral. Agregue el capacitor como se describe en el artículo de ArduinoISP e intente nuevamente.
He encontrado exactamente el mismo problema la semana pasada.
Avrdude reporta la firma m328p(uno), mientras estoy programando ATmega8A.
El programador ArduinoISP debe ser:
avrdude -c stk500v1 -b 19200
PedroJ
initramfs
0x00
. Supongo que, por alguna extraña razón, la detección de fusibles no funciona.Dmitri Grigoriev