Atmega328-Reset-Pin funktioniert nicht, nachdem der Arduino-Bootloader erneut gebrannt wurde?

Für ein bisschen Hintergrundwissen möchten Sie vielleicht lesen

ATmega328 mit Optiboot nicht kompatibel mit Arduino?

Aber ich fasse trotzdem zusammen. Ich habe einige Atmega328-Chips, die mit dem Optiboot-Bootloader geliefert wurden, der auf sie gebrannt wurde und beschädigt zu sein schien. Um die Chips zum Laufen zu bringen, kaufte und benutzte ich einen USBASP und brannte den Bootloader erneut. Der Prozess funktioniert einwandfrei und die Chips starten neu und führen die blinkende Skizze ohne Probleme aus, aber wenn ich den Reset-Pin auf Masse ziehe, scheint der Chip den Arduino-Loader nicht zurückzusetzen und auszuführen. Während der Reset-Pin auf Masse gehalten wird, hört die Skizze auf zu laufen und wenn sie losgelassen wird, startet die blinkende Skizze ohne Verzögerung.

Wenn Sie den Reset-Pin an DTR meines USB-TTL anschließen, wird die Skizze nicht mehr ausgeführt, wenn Sie versuchen, eine Skizze über die Arduino IDE hochzuladen, und der Upload schlägt mit einem nicht verbundenen Fehler fehl. Mit dem USBASP kann ich den Bootloader neu brennen und er scheint korrekt zurückgesetzt zu werden

Das Zurücksetzen funktionierte vor dem erneuten Brennen des Bootloaders. Die von mir verwendeten Reset-Schaltungen funktionieren auf den atmega168-Chips, die ich habe.

Für die Bootloader habe ich versucht, den Chip zu flashen, um die interne Uhr http://arduino.cc/en/Tutorial/ArduinoToBreadboard und als Seerosenblatt und Duemilanove zu verwenden, aber der Reset-Pin scheint immer noch nicht richtig zu funktionieren.

Ich habe auch die Software verwendet, die mit dem USPASP geliefert wurde, und die Fuse&Lock-Bits gelesen, und die High/Low-Sicherungen sehen in Ordnung aus, ich bin mir nicht sicher, was die Extended- und Lock-Bits angeht.

Chip liest; Niedrig = E2, Hoch = DA, Ext = FD, Sperre = CF

board.txt liest;

atmega328bb.bootloader.low_fuses=0xE2
atmega328bb.bootloader.high_fuses=0xDA
atmega328bb.bootloader.extended_fuses=0x05
atmega328bb.bootloader.path=arduino:atmega
atmega328bb.bootloader.file=ATmegaBOOT_168_atmega328_pro_8MHz.hex
atmega328bb.bootloader.unlock_bits=0x3F
atmega328bb.bootloader. lock_bits=0x0F

Antworten (2)

Bei AVRs gibt es eine Sicherung namens RSTDISBL, die die Funktionalität des Reset-Pins deaktiviert und es Ihnen ermöglicht, ihn als normalen I/O-Pin zu verwenden. Wenn Sie diese Sicherung programmieren, funktionieren Resets offensichtlich nicht und Sie können den Chip nicht über ISP programmieren. Dies bedeutet auch, dass Sie die Sicherung nicht mit normalen Methoden deprogrammieren können.

Wenn dies der Fall ist, können Sie diese Sicherung über die Hochspannungsprogrammierung deprogrammieren. Wenn Sie ein AVR Dragon-Board zur Hand haben, können Sie dies ganz einfach tun, indem Sie die richtigen Pins auf dem HVSP-Header mit Ihrem Chip verbinden. Seien Sie jedoch vorsichtig, wenn Sie dies in der Schaltung tun, da die Hochspannungsprogrammieroptionen 12 Volt verwenden, was den Rest Ihrer Schaltung braten kann. Am besten programmieren Sie es ausschließlich auf dem Drachen über eine ZIF-Buchse oder ähnliches.

Hier ist ein Video von Atmel zum Deprogrammieren der Sicherung über High Voltage Parallel Programming: http://www.youtube.com/watch?v=32CkOkpOcSc

Während die Beschreibung von RSTDISBL korrekt ist, trifft sie hier nicht zu: Wenn RSTDISBL aktiv wäre, wäre Bit 0x80 des High-Fuse-Bytes 0, und es wird oben als 1 angezeigt. Darüber hinaus zeigt das beschriebene Verhalten, wenn RESET auf Low gezogen wird, deutlich, dass RESET aktiviert ist .

Das ist ein Sicherungsproblem. Der Reset-Pin ist wahrscheinlich durch eine falsche Sicherungseinstellung ausgeschaltet. Google "Sicherungsrechner" für Hilfe oder schaue im Datenblatt nach.