Neulich habe ich ein Programm für einen ATtiny2313 geschrieben . Sobald es funktioniert hat, habe ich beschlossen, es mit den verschiedenen verfügbaren und programmierten Taktraten zu testen, indem ich die LFUSE wie auf Seite 159 beschrieben einstelle.
- Die Standardtaktrate beträgt 1 MHz.
- Also habe ich als nächstes 8 MHz ausprobiert und alles hat gut funktioniert.
- Dann habe ich die Taktrate für 4MHz mit dem / 8-Prescaler eingestellt, was zu einem 500-kHz-Takt führt.
Obwohl der Controller das Programm mit der erwarteten Geschwindigkeit ausführt, weigert sich mein Programmierer, den Controller seitdem neu zu programmieren. avrdude
(5.11.1) wirft nur das bekannte: 'Yikes!':
avrdude: Device signature = 0x000000
avrdude: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.
Ich habe versucht, die -F
Flagge hinzuzufügen , aber das tat es natürlich auch nicht.
Hier sind einige Code-Sniplets, die ich verwendet und die Taktrate wie erwartet geändert habe:
// 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 , };
Für die Programmierung verwende ich ein Arduino mit der ArduinoISP-Skizze (Version 04m3), die mit Arduino IDE 1.0.1 geliefert wurde.
Dies ist der Befehl zum Programmieren von 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
Dies ist der Befehl zum Programmieren der Sicherungen:
avrdude -p$(avrType) -c$(programmerType) -P$(programmerDev) -b$(baud) -v -U lfuse:w:$(src).lfuse.hex
Meine Frage ist zweifach:
- Was ist der Grund, warum ich den Controller nicht programmieren kann, nachdem ich ihn auf 500 kHz eingestellt habe (während das Programm im Controller einwandfrei zu laufen scheint)?
- Welche Möglichkeiten habe ich, um die Sicherungen ohne Verwendung eines HV-Programmiergeräts neu zu programmieren? Habe ich vielleicht irgendwelche nützlichen Flaggen verpasst
avrdude
?
Übrigens: Hatte das gleiche Problem einmal mit einem ATtiny45 @ 128kHz. HV-Programmierung löst es, aber ich möchte die HV-Situation verhindern.