Problemas que vuelven a parpadear ATtiny85 después de configurar la escala preliminar a 0x00

1

Después de actualizar el ATtiny85 con un código que incluye el ajuste de la escala preliminar del reloj a 0x00 (en el código, sin destellar el fusible), la próxima vez que intente y destelle, obtengo los siguientes errores que me impiden hacerlo:

avrdude.exe: error: programm enable: target doesn't answer. 1
avrdude.exe: initialization failed, rc=-1
avrdude.exe: AVR device initialized and ready to accept instructions
avrdude.exe: Device signature = 0x500075 
avrdude.exe: Expected signature for ATtiny85 is 1E 93 0B

Realmente no entiendo. Obviamente, el USBasp está conectado correctamente y funciona (de lo contrario no obtendría la línea de rastreo "Dispositivo AVR inicializado ...". He intentado volver a destellar el código que estaba ejecutando (CLKPR = 0x00). Luego, intente actualizar un simple programa de parpadeo (no hay preescala), todavía falló. Luego probé el programa de parpadeo en un ATtiny85 diferente - funcionó. ¡Regresando al original, todavía no puedo flashear!

Intenté restablecer el fusible usando el -B1 a -B6, nada ...

Soy un principiante, ¡así que probablemente hay algo estúpido que estoy haciendo!

Al reiniciar el dispositivo justo antes de enviar el flash, se ve que funciona. Sin embargo, ahora parece que tengo un nuevo problema al intentar actualizar el fusible de manera predeterminada.

El comando que estoy emitiendo ...

avrdude  -p t85 -P COM3  -b 19200 -c avrisp  -U efuse:w::m -v -B700

La salida ...

avrdude.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.08s

avrdude.exe: Device signature = 0x000000 (retrying)

Reading | ################################################## | 100% 0.06s

avrdude.exe: Device signature = 0x000000 (retrying)

Reading | ################################################## | 100% 0.06s

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

Después de leer la ronda, estoy bastante seguro de que está relacionado con el reloj / cristal. Simplemente no estoy muy seguro de cómo agregar un cristal.

Gracias de nuevo, Harold Clements

    
pregunta haroldjclements

2 respuestas

2

Hay varios problemas con el comando de avrdude que publicaste.

  • Está especificando una velocidad en baudios y un puerto serie con -P COM3 -b 19200 , lo cual no tiene sentido, ya que USBasp es un periférico usb puro y no requiere un puerto serie ni utiliza un convertidor de usb a serie internamente. Esta configuración no tiene ningún efecto.

  • Has seleccionado Atmel avrisp como programador con -c avrisp , mientras afirmas que Tu programador es el USBasp. Esto puede o no funcionar, pero avrdude admite USBasp de forma nativa, por lo que debe indicar a avrdude que el programador es USBasp con -c usbasp .

  • Estás reescribiendo los bits de efusión sin especificar un valor con -U efuse:w::m . La forma correcta de configurar los bits de fusible en modo inmediato (sin leer los valores de bits de fusible de un archivo) sería -U FUSE:w:VALUE:m , por ejemplo, -U efuse:w:0xFF:m . El manual de avrdude no indica que dejar el valor del fusible sin especificar establece el fusible a su valor predeterminado, por lo que probablemente solo establece el fusible en 0x00 .

  • Su programador no es el ICE Atmel JTAG, por lo que la configuración del reloj de bits -B700 no tiene sentido y no tiene ningún efecto.

La buena noticia es que se eliminó la basura en lugar de hfuse, lo que podría haber bloqueado el AVR estableciendo RSTDISBL y evitando así la reprogramación.

Para resucitar su chip, sugiero reprogramar todos los fusibles. Mi conjetura es que, en algún momento, ha estropeado los valores de los fusibles sin querer, haciendo que el chip se ejecute a 1MHz o menos. Esto hace que el programador se comunique demasiado rápido en relación con la frecuencia de reloj del ATtiny, lo que da como resultado la transacción con fallas que ve. El USBasp tiene un puente para bajar la velocidad de datos, que debe configurar. Para los fusibles en sí mismos, hay una herramienta en línea práctica para determinar y comprender fácilmente los valores. Para programar los fusibles, ejecute

avrdude -p t85 -c usbasp -P usb -U lfuse:w:0x62:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m

(frecuencia de reloj de 8MHz usando un oscilador interno, isp habilitado, sin configuraciones especiales)

Para actualizar el chip con un nuevo .hex, ejecute

avrdude -p t85 -c usbasb -P usb -U flash:w:FILENAME:i
    
respondido por el jms
0

Ate nRESET bajo antes de aplicar energía, luego aplique energía. Esto mantendrá a la MCU en modo de reinicio para que el código de preescala nunca tenga una oportunidad de ejecutarse y luego deberías poder programarlo.

    
respondido por el Ignacio Vazquez-Abrams

Lea otras preguntas en las etiquetas