¿Cómo puedo saber que USBasp está funcionando?

Tengo el programador USBasp y estoy tratando de grabar el cargador de arranque en Atmega328 para que pueda usarse como un chip de reemplazo en la placa Arduino (los chips de reemplazo con el cargador de arranque instalado son bastante caros).

He instalado los controladores USBasp : la instalación es bastante sencilla gracias a la guía. El dispositivo fue reconocido y funciona correctamente, según Windows.

Luego conecté los pines de acuerdo con la hoja de datos. Después de eso, inicié Arduino IDE y seleccioné USBasp como programador:
arduino ide - herramientas

He notado que cada vez que paso el mouse sobre Toolsel IDE de arduino se retrasa por un tiempo. Pero eso podría ser simplemente un error de software no relacionado.

Después de seleccionar el programador correcto, hice clic Burn bootloadery recibí este error:

avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: error: programm enable: target doesn't answer. 1 
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.

Ya he estado intentando programar este chip con Raspberry PI, y también he fallado . Y todavía no puedo averiguar dónde está el error. Excepto la posibilidad de que compre 2 fichas nulas.

Mi pregunta es cómo puedo probar todos los fragmentos de mi sistema y verificar cuál está roto. Los errores de AvrDude son inútiles.

Aquí hay una imagen de mis conexiones al intentar lo mismo (y con el mismo resultado) con AtTiny:

ingrese la descripción de la imagen aquí

Cuando recibí ese error, fue una de dos cosas: un cable suelto/una mala conexión o un error en el circuito de mi programador. Ha sido extremadamente raro que haya un problema con el AVR (las dos veces fueron después de pasar un exceso de voltaje a través de él y romper el pin 1). Su error sugiere que el USBasp funciona (de lo contrario, obtendrá un error de no poder encontrar el dispositivo). Tome un multímetro y verifique cada conexión entre la placa de circuito USBasp y el pin correspondiente en el AVR; verifique la resistencia pull-up; y confirme que su chip no necesita un cristal. ¿Cómo configuraste tu circuito?
@ cyberx86 En primer lugar: ¿qué resistencia pull-up? Acabo de conectar los cables directamente desde el programador al atmega328. (También probé AtTiny13 con el mismo resultado).
Al programar un AVR, debe configurar el pin de reinicio bajo. Por lo general, se mantiene alto con una resistencia pull up entre el pin 1 y Vcc. Siempre he usado este circuito: avrprogrammers.com/devices/atmegaxx8 - para simplificar, puede omitir SW1 y, en la mayoría de los casos, un nuevo chip AVR no necesita un cristal (por lo que puede omitir el cristal y los condensadores, a menos que no -se instalaron fusibles estándar).
Las conexiones que tiene desde el PCB Atmel al AtTiny, se ven bien. Si aún no lo ha hecho, verifique eléctricamente (multímetro configurado en resistencia (ohmios)), las conexiones de la placa USBasp directamente a los pines AVR; esto verificará que no haya cables sueltos y que todo esté en el lugar correcto. El pin marcado en el tablero con un triángulo es MOSI (así que toque eso y el pin 6 en el AVR) (y verifique que cada una de las otras 3 líneas de datos: SCK, MISO, RST estén conectadas eléctricamente);
Además, puede programar sin el PCB Atmel (una cosa menos que podría causar problemas, aunque la verificación de la continuidad debería eliminar eso). Como otra verificación, mida el voltaje a través del chip (pin 4 y 8), debe ser de 3,3 V o 5 V, generalmente prefiero 5 V para la programación, hay un puente en el USBasp para cambiar el voltaje.

Respuestas (4)

El mensaje de error que está viendo significa que el chip no responde al comando "habilitar el modo de programación" que está enviando el programador. O tienes mal las conexiones, o el programador está enviando los comandos demasiado rápido (frecuencia de programación demasiado alta).

Los nuevos chips AVR vienen configurados para usar el oscilador interno del chip como fuente de reloj, con el conjunto de fusibles CLOCKDIV8 ("divide la frecuencia del reloj entre 8"). Esto significa que funcionan a 1MHz. La frecuencia de programación máxima que admite el chip es la velocidad de reloj / 4, es decir, 250 kHz. El USBASP está predeterminado en 375 kHz, que es demasiado rápido, por lo que debe reducir la velocidad.

Puede hacer esto configurando el puente "SCK lento" de su USBASP, si tiene uno, o usando la opción avrdude -B:

    avrdude -c usbasp -p m328p -B 5 -U flash:w:bootloader.hex:i

El número después de la opción -B selecciona la velocidad de programación (específicamente, el período del reloj, el inverso de la frecuencia, por lo que los números más altos significan frecuencias más lentas). Si -B 5 no funciona, pruebe con un número más alto, como -B12 o incluso -B60.

Actualización: esta línea en la salida de avrdude sugiere que su versión de firmware USBASP no es compatible con la opción -B, por lo que deberá usar el puente:

    avrdude: warning: cannot set sck period. please check for usbasp firmware update.

Recientemente, estaba tratando de hacer un pequeño proyecto usando mi atmega8, pero me encontré con este problema. Pensé que el chip tenía fallas debido a su tiempo de uso, pero recordé que la última vez que escribí código dentro de él, ¡programé los fusibles para que funcionara con su oscilador interno! Y traté de programarlo (otra vez) pero esta vez con un cristal y…. Ta ta taaaa… eso fue!

Creé el Arduino autónomo , pero al intentar programarlo con un USBasp, recibí el error del OP. Después de seguir la pista de cyberx86 sobre la verificación de los pines, descubrí que MOSI, del adaptador de programación AVR , se mostraba incorrectamente conectado en la foto , aunque la descripción escrita del pin out era correcta:

Asegúrese de consultar la asignación de pines de Arduino para obtener ayuda con el cableado.

  • El pin MISO de su adaptador irá al pin 18 o al pin digital Arduino 12 de su chip Atmega.
  • El pin SCK de su adaptador irá al pin 19 o al pin digital Arduino 13 de su chip Atmega.
  • El pin RESET de su adaptador irá al pin 1 de su chip Atmega.
  • El pin MOSI de su adaptador irá al pin 17 o al pin digital Arduino 11 de su chip Atmega.

En la foto, el cable (verde oscuro) que debería ir a MOSI, pin 17, ¡en realidad va al pin 16!

Protoboard Arduino

Después de corregir este problema y conectar el MOSI del adaptador de programación AVR al pin 17 en el ATMega, el error desapareció.

En mi caso de ATMega32A, fue el programador escribiendo demasiado rápido en el microcontrolador y la opción -B dada para avrdude establecer el período SCK (y, por lo tanto, también la frecuencia) para calificar lo que permitió una comunicación adecuada. Pasé demasiado tiempo haciendo que esta configuración funcionara, pensé que el microcontrolador estaba muerto en algún momento.

-B Especifique el período de reloj de bit JTAG/STK500v2 (us).

con error:

me@comp:~$ sudo avrdude -c usbasp -p m32

avrdude: error: programm enable: target doesn't answer. 1 
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.

DE ACUERDO:

me@comp:~$ sudo avrdude -c usbasp -p m32 -B 5  // you may increase this value
                                               // to set even lower frequency

avrdude: set SCK frequency to 187500 Hz
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9502

avrdude: safemode: Fuses OK (E:FF, H:99, L:E1)

avrdude done.  Thank you.