No se puede programar ATTiny85 fusionado para 32 kHz

Ahora, sé lo que estás pensando. Yo también lo he estado pensando toda la noche.

Sí, sé que con el diminuto fusionado para un cristal de 32 kHz necesitaré que el reloj SPI sea de 8 kHz o menos. Incluso eso, sin embargo, parece no estar funcionando.

Empecé con una placa de trabajo que tenía un cristal de 4 MHz y fusibles divididos por 8. Primero usé un USBTiny para restablecer los fusibles a los valores predeterminados usando avrdude (62 DF FF). Luego quité el cristal y sus capacitores de carga y coloqué un cristal de 32 kHz 12.5 pF en su lugar. Luego usé el mismo USBTiny para configurar los fusibles en E6 DF FF. Y eso es todo lo que escribió.

Con un alcance, puedo mirar los pines xtal y puedo ver 32 kHz. Así que sospecho que el reloj está corriendo.

Sabía que agregaría -B a la línea de comando avrdude. Antes de comenzar con todo esto, experimenté con varios valores de -B y una lectura flash. Efectivamente, la alteración de -B hizo que la lectura flash sucediera más rápido o más lento.

Pero he intentado agregar valores -B hasta 250 (lo que leí en esta página debería dar como resultado un reloj SPI de 4 kHz). Nada. Intenté usar al menos 6 versiones diferentes del concepto AVR-as-ISP-pero-ralentizado con un Arduino Uno. Ninguno de ellos trabaja. Todos funcionan con una versión sin modificar del dispositivo con el que comencé (con su cristal de 4 MHz y fusible original), por lo que estoy seguro de que el cableado es correcto.

¿Qué más podría ser?

Tuve éxito en el pasado con rickety.us/2010/03/arduino-avr-high-voltage-serial-programmer Tenga en cuenta que los fusibles están codificados para un AVR específico, así que verifique el código fuente.
Sin embargo, no debería tener que recurrir a la programación HV. ¿Por qué no funciona el ISP normal?
¿Qué tan lento fue el reloj, hasta el rango de 100 Hz? Supongo que cuando dice que redujo la velocidad del croquis de Arduino como ISP, lo hizo insertando retrasos en el código del programa (iirc en muchas versiones, no se respeta el indicador -B).
Si busca en Google, hay al menos media docena de copias del boceto AVR ISP que ralentizan el reloj SPI de varias maneras. No sé qué tan lento terminó, pero para funcionar tendría que ser ~ 250 Hz, lo cual es una tontería.
De ahí un comentario y no una respuesta. Es bueno tener un último recurso, pero mientras tanto lo resolvió de la manera adecuada.

Respuestas (1)

Me lo imaginé.

Los cambios de fusibles no borran el flash. El boceto anterior comenzó con la configuración del preescalador del reloj del sistema para dividir por 8. El preescalador de reloj sobrevive a RESET.

La solución fue atar temporalmente RESET bajo. De esa manera, tuve la oportunidad de conectar el programador y encenderlo sin que tuviera lugar la configuración del preescalador. Subí un nuevo boceto sin el escalado previo y ahora funciona.

Felicidades... Me preguntaba si el divisor todavía estaba adentro y si lo estabas intentando lo suficientemente lento como para permitirlo.
Como no estaba funcionando, no debe haber sido lo suficientemente lento. Pero en ese momento no pensé que tendría que ser menos de 1 kHz.