AVR kann nicht in den Programmiermodus wechseln

Ich habe einen ATMega88PB auf einer Platine, der nicht in den Programmiermodus wechselt, nachdem die Sicherungseinstellungen auf EXTFSXTAL_16KCK_14CK_0MS geändert wurden. Zuvor konnte der AVRISP MkII mit dem Mikrocontroller kommunizieren (ich bin inzwischen auf einen Atmel ICE umgestiegen, der immer noch nicht kommunizieren kann).Atmel Studio-Fehler

Falls Zweifel bestehen, dass ich andere Sicherungseinstellungen falsch geändert habe, hier ist ein Screenshot der Sicherungen vor der Programmierung.Sicherungseinstellungen

Ich finde das verwirrend, weil der Oszillator gut zu laufen scheint - wenn ich die falsche Sicherungseinstellung (z. B. ext clk) programmiert hätte, würde ich erwarten, dass der Oszillator deaktiviert wird, um Strom zu sparen. Wie Sie sehen können, ist dies nicht der Fall, da der Oszillator knapp unter 20 MHz läuft.

XTAL2-Wellenform:XTAL2-Wellenform

XTAL1-Wellenform:XTAL1-Wellenform

Hier ist das Schema für die Oszillatorschaltung:Schema

Ich habe versucht, das Gerät mit jeder verfügbaren Geschwindigkeit zu programmieren, und hatte immer noch kein Glück. Ich habe auch erfolglos versucht, ein Taktsignal vom CLK0-Pin eines funktionierenden AVR einzuspeisen, und habe 18-pF-Lastkondensatoren anstelle der im Schaltplan angegebenen 33 pF ausprobiert.

Was kann ich noch versuchen, um diesen Mikrocontroller wieder zum Laufen zu bringen?

Antworten (1)

Ihr Low-Fuse-Register ist 0xD7. Das entspricht binär 0b1101 0111.

Laut Datenblatt sind die unteren 4 Bits für den Takt zuständig. Dies korreliert mit

CKSEL3 = 0, CKSEL2 = 1, CKSEL1 = 1, CKSEL0 = 1.

Aus dem Datenblatt ist dies keine gültige Einstellung, aber es kann auf einen Niederfrequenzquarz eingestellt werden. Die beiden ähnlich gültigen Einstellungen sind 0b0100 und 0b0101, sie sind beide für einen Niederfrequenzoszillator. Versuchen Sie, den 20-MHz-Quarz durch einen 32,768-kHz-Quarz zu ersetzen.

Eine Diskrepanz zwischen erwarteter Frequenz und tatsächlicher Frequenz kann dazu führen, dass der Prozessor nicht startet.

Wenn das nicht funktioniert, müssen Sie möglicherweise parallel programmieren, um den Chip wiederherzustellen. Die parallele Programmierung erfordert keinen Arbeitsquarz und stellt extern eine Uhr zur Verfügung.

Hier ist ein Screenshot des Datenblatts.Geben Sie hier die Bildbeschreibung ein

Ich bin im Moment nicht an einem Computer, daher kann ich es nicht überprüfen, aber ist es möglich, dass das von Atmel Studio angezeigte Sicherungsregister die alten Sicherungseinstellungen sind, die es vor dem Schreiben der neuen Sicherung erkannt hat? (Im Screenshot wurde SUT_CKSEL geändert, aber noch nicht geschrieben).
Auf Seite 27 des Datenblatts steht, dass CKSEL3 ... 0 = 0111 - 0110 einem Kristalloszillator mit vollem Hub entspricht, daher bin ich mir nicht sicher, warum Sie denken, dass es sich um eine ungültige Einstellung handelt. Ferner entsprechen SUT1...0 und CKSEL0 = 011 dem Quarzoszillator, BOD freigegeben. (Anlaufzeit 16k CK, +19CK ab Reset) und schließlich CKDIV8 = 1 bedeutet Clock Division ist deaktiviert. Dies sind die Sicherungen, die ich programmieren wollte, damit ich das Problem nicht sehe.
@bhillam Ich bin mir nicht sicher, aus welchem ​​​​Datenblatt Sie arbeiten, woher haben Sie es? Ich habe dieses Datenblatt von Atmels Website. Abgebildet ist Seite 30. Die Oszillatoreinstellung 0111 ist nicht aufgeführt.
Ich scheine ein vorläufiges Datenblatt zu haben. imgur.com/ID8x0TR nicht, dass es eine Rolle spielen sollte, da Atmel Studio die richtigen Sicherungseinstellungen haben sollte (ich habe das Hex-Feld nicht eingegeben, ich habe sie in der GUI ausgewählt).
@bhillam Also was steht genau in den HEX-Feldern? Weil Ihr Screenshot 16kCK_14CK_0MS zeigt, was keine im Datenblatt aufgeführte Einstellung ist.
Ich habe keine Möglichkeit herauszufinden, was die tatsächlichen Fuse-Bits sind, da der Programmierer nicht mit dem AVR kommuniziert. Wenn ich einen 32-kHz-Quarz in die Hände bekomme, werde ich versuchen, dies zu überprüfen.
Ich habe den 20-MHz-Quarz durch einen 32,768-kHz-Quarz ersetzt, und jetzt startet der Oszillator überhaupt nicht mehr - vorher hat er oszilliert, aber nicht auf den Programmierer reagiert.
@bhillam Dann ist die parallele Programmierung die einzige Möglichkeit, den Chip wiederherzustellen.
Am Ende bekam ich die Chipprogrammierung erneut, indem ich einen externen 1-MHz-Takt an den XTAL1 / TOSC1-Pin injizierte (mein Fehler zuvor war, den Kristall dabei angeschlossen zu lassen). Die Sicherungen, wie sie jetzt vom Programmierer gelesen werden, sind ex: F9, hi: DF, lo: 77, daher bin ich mir nicht sicher, woher die Software die vorherigen Sicherungsbits hat. Dies scheint wie erwartet der volle Schwingquarzoszillator zu sein, daher bin ich mir nicht sicher, warum es ein Problem gab. Der Quarz oszillierte mit 20 MHz, war aber nicht voll ausgesteuert (er erreichte nur etwa 2 V Spitze-Spitze), also lautet meine Frage jetzt: Warum kann der Oszillator die Schienen nicht erreichen? (0-5V)?
Für das, was es wert ist, wurde die Full-Swing-Quarzoszillatoroption aus rev entfernt. 42176E (Oktober 2015) des ATMega48/88/168PB-Datenblatts (keine Erklärung angegeben). Darüber hinaus scheint das Datenblatt nicht darauf hinzuweisen, dass der Betrieb über 16 MHz für Quarzoszillatoren mit geringem Stromverbrauch (die einzige Option für Hochgeschwindigkeitsoszillatoren) unterstützt wird. Schließlich scheint AtmelStudio die Sicherungsoptionen nicht basierend auf dem ausgewählten Gerät einzuschränken, wodurch völlig bedeutungslose Sicherungen programmiert werden können.