El otro día estaba escribiendo un programa para un ATtiny2313 . Una vez que funcionó, decidí probarlo a las diferentes velocidades de reloj que están disponibles y programadas a través de la configuración del LFUSE como se describe en la página 159.
- La velocidad de reloj predeterminada es 1MHz;
- así que probé 8MHz a continuación y todo funcionó bien;
- Luego configuro la velocidad de reloj para 4MHz con el / 8-prescaler que da como resultado un reloj de 500kHz.
Aunque el controlador ejecuta el programa a la velocidad esperada, mi programador se niega a reprogramar el controlador desde entonces. avrdude
(5.11.1) simplemente lanza el conocido: '¡Ay!':
avrdude: Device signature = 0x000000
avrdude: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.
Intenté agregar el indicador -F
, pero por supuesto que tampoco.
Aquí hay algunos fragmentos de código que usé y cambié la velocidad del reloj como se esperaba:
// 0.5MHz
FUSES = { .low = 0x62 , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , };
// 1MHz (default)
FUSES = { .low = 0x64 , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , };
// 8MHz
FUSES = { .low = 0xe4 , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , };
Para la programación, uso un Arduino con el boceto ArduinoISP (versión 04m3) que vino con Arduino IDE 1.0.1.
Este es el comando para programar flash:
avrType=attiny2313
avrFreq=1000000
programmerDev=/dev/ttyUSB003
programmerType=arduino
avrdude -p$(avrType) -c$(programmerType) -P$(programmerDev) -b$(baud) -v -U flash:w:$(src).flash.hex
Este es el comando para programar los fusibles:
avrdude -p$(avrType) -c$(programmerType) -P$(programmerDev) -b$(baud) -v -U lfuse:w:$(src).lfuse.hex
Mi pregunta es doble:
- ¿Cuál es la razón por la que no puedo programar el controlador después de configurarlo a 500 kHz (mientras que el programa en el controlador parece funcionar bien)?
- ¿Cuáles son mis opciones para reprogramar los fusibles sin usar un programador HV? ¿Tal vez perdí algunas banderas útiles para
avrdude
?
Por cierto: tuve el mismo problema una vez con un ATtiny45 @ 128kHz. La programación HV lo resuelve, pero quiero evitar la situación HV.