El otro día estaba escribiendo un programa para un ATtiny2313 . Una vez que funcionó decidí probarlo a las distintas velocidades de reloj disponibles y programadas mediante el ajuste de la LFUSE como se describe en la página 159.
- La velocidad de reloj por defecto es de 1MHz;
- así que probé con 8MHz a continuación y todo funcionó bien;
- Después, he configurado la velocidad de reloj para 4MHz con el preescalador /8, lo que ha dado 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) sólo lanza el consabido: "¡Caramba!":
avrdude: Device signature = 0x000000
avrdude: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.
He probado a añadir el -F
bandera, pero por supuesto eso tampoco.
Aquí hay algunos recortes de código que he utilizado y cambiado 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, utilizo un Arduino con el sketch ArduinoISP (versión 04m3) que viene con Arduino IDE 1.0.1.
Este es el comando para programar la 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 ajustarlo al reloj de 500kHz (mientras que el programa en el controlador parece funcionar bien);
- ¿Qué opciones tengo para reprogramar los fusibles sin usar un programador HV? ¿Acaso me he perdido alguna bandera útil para
avrdude
?
BTW: Tuve el mismo problema una vez con un ATtiny45 @ 128kHz. HV-programación resuelve, pero quiero evitar la situación HV.