ATmega328P und avrdude

Mar 17, 2026 Last reply: 3 months ago 16 Replies

In der Vergangenheit hatte ich für einfache Sachen einen ATmega328P verwendet und zur Programmierung einen "mySmartUSB light" benutzt, der kompatibel zum Protokoll des STK500v2 ist.



Unter Windows war das bislang auch kein Problem. Aber seit einiger Zeit nuztze ich Linux (Ubuntu 25.10 mit KDE 6.5) und da dann avrdude als Tool. avdrude funktioniert grundsätzlich auch, wenn ich ein Arduino-Board über den ISP damit ansteuere.



Ein Testaufbau auf einem Breadboard mit ISP-Adapter, der bisher immer problemlos nutzbar war, klappt damit leider gar nicht mehr. Also ein Test-Aufbau wie dieser:



formatting link

Das Symptom ist immer gleich: avrdude fängt an, landet dann in einem Timeout und meldet dann, dass die Device-ID 0x000000 sei. Die Versorgungsspannung wird dabei auch für einige Sekunden eingeschaltet und der ATmega328P tut auch was - aber er reagiert nicht auf den Versuch, per ISP programmiert zu werden.



Exakt der gleiche Chip funktioniert eingesetzt in einer Arduino-Platine mit Sockel aber absolut problemlos. Auch auf dem Breadboard tut der ATmega328P was er soll - ich kann ihn nur noch per ISP direkt programmieren. Auch dann nicht, wenn ich außer dem Programmer und externem Takt und Stromversorgung nichts angeschlossen habe.



Und ja, ich habe den Aufbau mehrfach genau kontrolliert und die Verbindungen einzeln durchgemessen von den Stiften des für den ISP bis zu den einzelnen Pins des ATmega328P.



Daher stellt sich für mich die Frage, ob irgendwas mit avrdude anders läuft, was die Nutzung der "fliegenden Verdrahtung" statt einer Platine kritischer macht.



Für das nächste Projekt werde ich deswegen wohl einen D1 mini verwenden. KiCad hat dafür praktischerweise auch schon einen fertigen Footprint drin und über USB lässt sich das auch in Linux mit PlatformIO programmieren.



Am 17.03.2026 um 08:27 schrieb Arno Welzel:

Das könnte an der Ansteuerung des Reset liegen. Vergleich mal deinen Aufbau mit dem Schaltplan von nem Arduino.

Vielleicht hängt es auch an deinem USB-Seriell-Adapter oder dessen Treiber, dass da DTR nicht aktiv ist.

Gruß Stefan.

An den Fuses hast du nicht versehentlich rumgespielt und jetzt geht nur mehr Programmierung mit 12 V?

Arno Welzel schrieb:

Sehe ich da zwei vierstellige Vintage Bubble-LED-Dispalys? Nice.

Peter Heitzer, 2026-03-17 10:57:

[...]

Nein, der ATmega328P selbst ist weiterhin programmierbar. Aber eben nur eingesetzt in einem Arduino-Board, nicht auf dem Breadboard mit exakt der Verkabelung, die ich früher schon erfolgreich genutzt habe.

Auch mit "frischen" Examplaren (ich habe noch ein halbes Dutzend weiterer Exemplare) geht's nicht.

Andreas Bockelmann, 2026-03-18 06:24:

Ja, das ist dieses Projekt hier:

formatting link

Und generell zum Thema:

formatting link

Besonders interessant finde ich die hier:

formatting link

Hm. Mein Verdacht wäre Signal- oder Powerintegrität. Blockkondensatoren am Atmel, Serienwiderstände 50-100 Ohm in den SPI-Leitungen vom Programmer? Pullup an Reset (vorhanden, aber nicht so niederohmig, daß der Programmer das nicht treiben kann)? Sonstige parallele Last an einem der SPI-Signale, die stört?

Ich kenne die Atmels (auf eigenen Boards) als absolut unkritisch was die Programmierung angeht.

cu Michael

Evtl. könnte der Parameter -i etwas bringen. Aus der Manpage:

-i <delay>

For bitbang-type programmers, delay for approximately <delay> microseconds between each bit state change.

Das habe ich auch schon mal benötigt für das Pollin Eval-Board.

Peter Heitzer, 2026-03-19 10:18:

Ich hatte in den letzten Tagen noch keine Zeit, das auszuprobieren, werde das aber demnächst mal machen und berichten. Welche Werte hattest Du denn dafür verwendet - also nur so als Größenordnung?

AFAIR so um die 10 µs. In der Manpage steht, daß der ISP-Takt nicht höher als 1/4 der CPU Taktfrequenz sein darf.

Am 24.03.2026 um 09:22 schrieb Peter Heitzer:

Ich hatte so etwas mal bei einer Fernbedienung, der Prozessor liess sich nur extrem langsam programmieren, noch nicht einmal die Signatur liess sich mit Standardwerten auslesen. Keine Ahnung was das war, aber der Prozessor liess sich nur bis 75kHz programmieren. Die Fuses waren für 8MHz RC intern gesetzt.

formatting link
Bernd

Peter Heitzer, 2026-03-24 09:22:

[...]

Egal was ich für einen Wert bei -i angebe - es ändert nichts. Und ja, ich habe den Aufbau mehrfach genau kontrolliert.

Auch in einem Prototypen, den ich früher aufgebaut habe und wo der ATmega328P immer noch funktioniert und auch ganz sicher mit dem ISP programmierbar war, ist jetzt so auch nicht mehr ansprechbar. Konkret diese hier:

formatting link

Das Ergebnis ist immer identisch:

Configuring upload protocol... AVAILABLE: stk500v2 CURRENT: upload_protocol = stk500v2 Looking for upload port... Auto-detected: /dev/ttyUSB0 Uploading .pio/build/ATmega328P/firmware.hex avrdude error: timeout avrdude: AVR device initialized and ready to accept instructions avrdude: device signature = 0x000000 (retrying) avrdude: device signature = 0x000000 (retrying) avrdude: device signature = 0x000000 avrdude error: Yikes! Invalid device signature. avrdude error: expected signature for ATmega328P is 1E 95 0F Double check connections and try again, or use -F to override this check.

Es geht nur noch, wenn ich den ATmega328P aus der Schaltung zupfe und auf ein Arduino-Board stecke. Da funktioniert der ISP dann an dessen ISP-Anschluss mit exakt dem selben Befehl völlig problemlos.

Am 24.03.2026 um 13:27 schrieb Arno Welzel:

[...]

Wir hatten vor Jahren (Jahrzehnten?) mal einen ähnlich (lustigen) Fehler. Ein CPLD ließ sich genau einmal programmieren und dann nicht mehr. Naja, werden halt Fuses sein - waren es nicht. Nach mühevollem Auslöten aus der Zielplatine ließ sich das Teil wieder problemlos programmieren... WTF?

Es war ein crosstalk Problem. Eine Taktleitung war so unglücklich an einer JTAG Leitung verlegt, daß nach der ersten Aktivierung der JTAG Port nicht mehr richtig ansprechbar war... :-/

Am Tue, 17 Mar 2026 08:27:07 +0100 schrieb Arno Welzel:

Hallo, möglicherweise liegt das auch am Programmer. Mit diesem Teil hatte ich auch schon ziemliche Probleme, das ist ziemlich buggy. Beim EEprom- programmieren musste die zu übertragende Datei immer ein vielfaches von 16 Byte lang sein, sonst wurde der Rest irgendwo ins EEprom abgekippt. Ich hatte den Hersteller seinerzeit angeschrieben - hat nicht reagiert.

Wesentlich bessere Erfahrungen habe ich mit dem USBASP, ein sehr preisgünstiges und extrem stabil arbeitendes Gerät. Der Entwickler, ein Herr Fischl, hat die Quellen ins Netz gestellt, und so gibt es solche Geräte beim freundlichen Chinesen für Spottpreise zu kaufen. Leider hat Atmel (oder war das schon Microchip) den Steckerstandard von 10-polig auf

6-polig geändert, es werden meistens die 10-poligen Versionen angeboten, aber die 6-poligen gibt es durchaus auch.

p.s. Der Parameter "i" wirkt sich nur bei Bitbang-Programmern (Druckerport) aus, probier lieber den Parameter "B"

Am 26.03.2026 um 15:57 schrieb Andreas Graebe:

Andererseits kostet ein MPLAB SNAP auch kein Vermögen, hat allerdings WIEDER ein anderes Stecker-Layout:

formatting link
HTH Markus

Andreas Graebe, 2026-03-26 15:57:

[...]

Du meinst das hier?

formatting link

Am 26.03.2026 um 15:57 schrieb Andreas Graebe:

Die China-Clones haben eine Leitung des USB auf einen Portpin gelegt. Da muß man entweder die Leitung trennen, oder eine um ein Byte geänderte Firmware flashen (Fischl setzt diesen Pin auf Ausgang). Ich hatte ausserdem das Problem daß die USBASP-Firmware keine Atmels mit mehr als 128K programmieren konnte, da funktionierte die Bankumschaltung nicht. Irgendwie habe ich auch das gelöst.

Bernd

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required