- kollino.de - https://www.kollino.de -

Yikes! Invalid device signature – Da brennen mir die Sicherungen durch

errorEinmal nicht aufgepasst und beim Übertragen eines neuen Sketches den falschen Mikrocontroller in der Arduino-IDE ausgewählt und es erschien die folgende Fehlermeldung:

avrdude: verification error, first mismatch at byte 0x0000 0x0c != 0x00
avrdude: verification error; content mismatch

Was war passiert? Ich schaute im Werkzeugemenü nicht genau hin. Die automatische Erkennung erkannte dummerweise einen ATtiny45 statt einem 85er.

Es ist schon verdammt spät und so führte dieser Fehler zum nächsten, denn ohne groß darüber nachzudenken, änderte ich einfach mal die Taktfrequenz von 1 Mhz auf 8 Mhz (“Irgendwas war da noch mit 8 Mhz ?!?”). Nein, war es nichts und der fatale Fehler daran war jetzt, dass ich nicht die internen 8 Mhz ausgewählt, sondern externe 8 Mhz. Aua.

Beim nächsten Versuch den Sketch aufzuspielen bestrafte mich avrdude mit der folgenden Fehlermeldung:

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

Mist. Und nun? Was habe ich getan? Ohne jetzt umfangreich in das Thema “Fuses” einzutauchen – denn ehrlich gesagt ist das auch noch Neuland für mich – war mir nach kurzer Recherche klar, dass ich mit dem falschen Einstellen der Takfrequenz eine Sicherung umgebogen habe und zwar die, dass nicht mehr der interne Quarz, sondern ein externer Quarz zum Schwingen und somit zum Funktionieren des Prozessors verwendet werden soll.
Ganz blöd an der Nummer ist: Wo kein externer Quarz, da kein Schwingen und somit ein toter Mikroprozessor.

Kann man ihn wiederbeleben? Ja, man kann. Es gibt einige Möglichkeiten, aber diese setzten alle weitere Schaltungen voraus, dessen Bauteile ich nicht um 5 Uhr morgens zur Verfügung habe und das gleiche gilt für weitere Geräte die man zur Wiederbelebung verwenden könnte. Quasi einen Defibrillator für Mikroprozessoren 🙂 , da man sie dann High-Voltage programmiert und somit die Fuses wieder zurücksetzen kann.

Im Arduinoforum wurde ich aber am Ende doch noch zufällig fündig und die Sache ist Kinderleicht und wenn man einen lauffähigen Arduino, in meinem Fall einen Uno, zur Hand hat, kann man sich ohne weiteres Zubehör aus dieser Misere befreien und den verfuseden ATtiny wieder zum Laufen bekommen.

Was muss man tun? Atmel hat auf Pin 2 des ATtiny85 einen Anschluss namens XTAL1 liegen. An diesen muss – so fern vorhanden – ein externer Quarz angeschlossen werden, der den ATtiny zum Schwingen bringt. Das muss nun jemand anderer Übergangsweise übernehmen.

Hierbei ist es egal, mit welcher Frequenz wir an diesem Pin schwingen, Hauptsache schwingen. Wir können einen Arduino Uno als ISP-Programmer einsetzen und über Pin 9 des Arduino Unos mit einem speziellen Sketch einen externen Quarz simulieren der schwingt. Somit geben wir dem ATtiny Starthilfe und können ihm einen neuen Bootloader verpassen.

Ist das erledigt, kann man ganz entspannt seinen kleinen ATtiny neu programmieren und er verrichtet wieder brav seinen Dienst.

Am effektivsten lernt man durch Fehler. 🙂

Und hier nun die genaue Vorgehensweise aus dem Arduino-Forum [1] übernommen:

Funktioniert auch mit Atmega’s , einfach MISO, SCK, MOSI und XTAL1 verbinden.

ATtiny45/85 -> Arduino UNO   ATtiny44/84 -> Arduino UNO
VCC -> +5V VCC -> +5V
GND -> GND GND -> GND
7 (SCK) -> Pin13  9 (SCK) -> Pin13
6 (MISO) -> Pin12 8 (MISO) -> Pin12
5 (MOSI) -> Pin11 7 (MOSI) -> Pin11
2 (XTAL1) -> Pin9 2 (XTAL1) -> Pin9
1 (Reset) -> Pin10 4 (Reset) -> Pin10

 

Atmega 328P-PU -> Arduino UNO
VCC -> +5V
GND -> GND
19 (SCK) -> Pin13
18 (MISO) -> Pin12
17 (MOSI) -> Pin11
9 (XTAL1) -> Pin9
1 (Reset) -> Pin10

 

Das grüne Kabel ist das entscheidende. Es simuliert einen Quarz, damit der ATtiny zurückgesetzt wird. [2]

Das grüne Kabel ist das entscheidende. Es simuliert einen Quarz auf Pin 2, damit der ATtiny zurückgesetzt wird.

Aufs Arduino-Board lädt man noch diesen Sketch: ArduinoISP2 [3] (oder von hier: ArduinoISP-master [4])

Danach stellt man in der Arduino IDE folgendes ein:

Werkzeuge” -> “Programmer” -> “Arduino as ISP
Werkzeuge” -> “Board” -> ( In meinem Fall ist es…) “ATtiny85 @ 1Mhz (internal)
Werkzeuge” -> “Bootloader brennen

 

Das sollte es gewesen sein. Man kann nun wie gewohnt ein Sketch aufspielen.