Fusibles cambiados en ATtiny85, ahora firma de dispositivo no válida

Cambié los bits del fusible del reloj en mi ATtiny85. Ahora no puedo flashear nada o incluso cambiar el fusible. me sale el error:

avrdude.exe: Device signature = 0x000000
avrdude.exe: Yikes!  Invalid device signature.
             Double check connections and try again, or use -F to override
             this check.

El comando de línea de comando que usé para cambiar el fusible inicialmente fue:

avrdude -p attiny85 -P com8     -c stk500v1    -b 19200 -U lfuse:w:0x62:m -U flash:w:main.hex

Ahora entiendo que configuré el fusible del reloj para una señal de reloj oscilante, no para un cristal. Leí aquí que puedo suministrar la señal de reloj necesaria desde un stk500. Mi Arduino UNO funciona como programador (y en los argumentos de la línea de comando, en realidad le digo avrdude que es un stk500). ¿Cómo conecto/configuro UNO y ATtiny para suministrar la señal de reloj necesaria?

EDITAR

No estoy tratando de usar la programación paralela de alto voltaje. Solo quiero suministrar la señal de reloj externa que ahora espera el AVR para programarlo normalmente.

Tengo un segundo Arduino e intenté enviar una onda cuadrada de 16MHz al pin 2 (CLK1) del ATtiny85, usando el código en esta página . Sin embargo, cuando traté de programar el AVR con ambos Arduinos conectados (tanto el reloj como el programador), recibí el mismo error que antes. ¿Alguna idea de lo que está mal?

¿Leíste sobre la parte de alto voltaje de la publicación a la que te vinculaste? Eso es lo que tienes que hacer. ¿Está seguro de que Arduino puede proporcionar +12 V directamente (creo que no puede pero nunca lo usé)?
Un arduino no puede suministrar 12V por sí solo. A menos que tenga una fuente de alimentación de 12V y use un transistor para encender y apagar.
¿Quiere decir que necesito 12V para la señal del reloj? Interpreté el artículo para decir que solo necesito 12 V si quiero solucionar el problema a través de la Programación en paralelo de alto voltaje, pero debería poder evitar eso por completo y programar el AVR normalmente si solo puedo suministrar la señal de reloj deseada, ¿verdad? Ver mi edición de arriba.

Respuestas (3)

Los chicos de los foros de Arduino me ayudaron. Aparentemente, mi código no estaba creando PWM. De lo contrario, el concepto es sólido. Aquí está su respuesta y todos mis pasos.

En realidad, si el comando que ingresó es realmente el que usó, entonces no configuró el fusible para una fuente de reloj externa de ningún tipo. El byte de fusible bajo de 0x62 es la configuración de fusible predeterminada para el dispositivo ATtiny85 que utiliza el oscilador interno de 8 MHz. Puede verificar esto fácilmente en la hoja de datos o en este sitio web, que es una gran herramienta para descubrir los fusibles correctos:

http://www.engbedded.com/fusecalc

Normalmente definiría la frecuencia de MCU en MAKEFILE, pero no estoy seguro de cómo funciona eso con Arduino. Entonces, no necesitaría especificar la tasa de baudios (-b 19200) ya que esto lo resolverían el programador y AVRDUDE.

Si realmente ya no puede comunicarse con el dispositivo, es posible que deba usar un HVSP para restablecer los fusibles a los valores predeterminados. He construido uno para este propósito... no es tan difícil si sabes mucho sobre los dispositivos AVR. Aquí hay un sitio web que detalla algunos de los pasos:

http://www.simpleavr.com/avr/hvsp-fuse-resetter

Tenías razón sobre el significado de 0x62 (supongo que en realidad configuré el fusible en 0x60). Y gracias por las instrucciones de restablecimiento de fusibles hvsp.

Mirando la sección de fusibles de la hoja de datos, estos fusibles pueden interesarle:

  • CKOUT : emite el reloj de los dispositivos en el pin CLKO. Esto debería ser perfecto para suministrar al dispositivo dañado un reloj del Arduino en funcionamiento. Si aún hay problemas, intente proporcionar un reloj más lento (por ejemplo, 1 MHz)

  • RSTDISBL y SPIEN: le recomiendo que nunca toque estos fusibles; de lo contrario, necesitará una programación en serie de alto voltaje para recuperarse (estuvo allí)