Arduino Pro Micro hängt sich beim Programmieren auf

Hallo,

(m)ein Sparkfun Pro Micro macht mich heute irre.

Ich habe auf diesen ein paar Sketche unter Linux mit IDE1.8 erflgreich hochgeladen, aber plötzlich war er stumm und der sonst übliche Port ttyACM0 war nicht mehr da. Das kannte ich schon und konnte mir damit helfen, den Bootloader mit USBasp auf einer alten Windowskiste mit IDE1.6 neu schreiben.

Das ging dieses Mal nicht. Ich habe dann einen anderen Pro Micro als Programmer eingerichtet, was aber auch zuerst nicht ging. Erst als ich es unter IDE2.3 probiert hatte, funktionierte es. Dort gibt es die Option "Programmer: Arduino as ISP (ATMega32U4)". Ich vermute, dass das was mit den unterschiedlichen PIN-Adressen zu tun hat oder die Resets, die man mit einem Elko abfangen soll.

Damit habe ich auf den Pro Micro dann wieder mit Blink-Sketch flashen können, aber wenn ich nun direkt über USB einen Sketch hochladen will, dann bricht das reproduzierbar ab, nachdem kompiliert wurde und ein Reset ausgeführt werden soll:

...
Der Sketch verwendet 5130 Bytes (17%) des Programmspeicherplatzes. Das Maximum sind 28672 Bytes.
Globale Variablen verwenden 430 Bytes (16%) des dynamischen Speichers, 2130 Bytes für lokale Variablen verbleiben. Das Maximum sind 2560 Bytes.
Erzwinge Reset durch öffnen/schließen mit 1200 bps auf dem Port /dev/ttyACM0
PORTS {/dev/ttyACM0, /dev/ttyS0, } / {/dev/ttyS0, } => {}
PORTS {/dev/ttyS0, } / {/dev/ttyS0, } => {}
PORTS {/dev/ttyS0, } / {/dev/ttyS0, } => {}
PORTS {/dev/ttyS0, } / {/dev/ttyS0, } => {}
PORTS {/dev/ttyS0, } / {/dev/ttyS0, } => {}
PORTS {/dev/ttyS0, } / {/dev/ttyS0, } => {}
PORTS {/dev/ttyS0, } / {/dev/ttyS0, } => {}
...

Trenne ich USB und schließe es wieder an, rennt wieder der alte Sketch (Blink).

Mir ist aufgefallen, dass unter IDE2.3 mit "Tools->Reload Board Data" die Boardauswahl immer auf die 3,3V-Variante gesetzt wird, obwohl es sich um ein 5V-Board handelt. Vielleicht ist der falsche Bootloader installiert.

Beim Hochladen habe ich immer die 5V-Variante ausgewählt.

Hat jemand Tipps, wie ich das Ding wieder benutzen kann?

Wenn ich mit dem funktionierenden Pro Micro als Programmer den Bootloader flashen möchte kommt diese Ausgabe:

"/home/user/.arduino15/packages/arduino/tools/avrdude/8.0.0-arduino1/bin/avrdude" "-C/home/user/.arduino15/packages/arduino/tools/avrdude/8.0.0-arduino1/etc/avrdude.conf" -v -patmega32u4 -carduino -P/dev/ttyACM0 -b19200 -e -Ulock:w:0x3F:m -Uefuse:w:0xCB:m -Uhfuse:w:0xD8:m -Ulfuse:w:0xFF:m
Avrdude version 8.0-arduino.1
Copyright see https://github.com/avrdudes/avrdude/blob/main/AUTHORS

System wide configuration file is /home/user/.arduino15/packages/arduino/tools/avrdude/8.0.0-arduino1/etc/avrdude.conf
User configuration file /home/user/.avrduderc does not exist

Using port            : /dev/ttyACM0
Using programmer      : arduino
Setting baud rate     : 19200
Error: programmer is not responding
Warning: attempt 1 of 10: not in sync: resp=0x00
Error: programmer is not responding
Warning: attempt 2 of 10: not in sync: resp=0x00
Error: programmer is not responding
...

Die gibt es auch unter der 1.8.19:

Ich denke, da ist irgendwas mit der Verkabelung... An den Kondensator gedacht?

Ihr zuletzt geladener Sketch enthält einen Fehler. Daher wird das Board nicht mehr erkannt oder reagiert nicht auf den Software-Reset, der von der IDE zu Beginn des Upload-Vorgangs durchgeführt wird.

Fügen Sie eine Reset-Taste hinzu und tippen Sie zweimal darauf, sobald die Zeilen mit „Port“ angezeigt werden.

Ja, stimmt, habe ich dann auch gesehen. Hatte wohl Tomaten auf den Augen.

Ich habe es mehrfach kontrolliert und keine Fehler gefunden.
Meinst du die 10uF zwischen Reset und GND? Ich hatte es meist ohne probiert, aber auch einige Male mit ---> immer das gleiche Ergebnis.

Letztlich habe ich dann doch mit dem zweiten Pro Micro als Programmer (ohne Elko) unter IDE1.8 den Bootloader neu flashen können. Geändert hatte ich nichts.

Danach konnte ich mit IDE1.8 aber keinen neuen Sketch hochladen. Das ging dann wiederum nur mit IDE2.3. Mit IDE1.8 änderte sich immer wieder die serielle Schnittstelle während der Programmierversuche. ttyACM0 war dann nicht mehr da, sondern ttyACM1.

Heute Morgen kann ich das aber nicht mehr reproduzieren. Die Programmierung mit IDE1.8 funktioniert bisher einwandfrei. Ich traue dem Braten aber noch nicht und werde mich hier mit genauerer Fehlerbeschriebung melden, sobald es wieder auftritt.

EDIT:
Gerade fällt mir auf, dass wenn ich nun unter IDE2.3 "Tools->Reload Board Data" ausführe, wieder die 3,3V-Variante eingestellt wird, obwohl es sich um die 5V-Variante handelt.

Das hatte ich auch schon mehrmals probiert, funktionierte aber nicht. Vielleicht lag es an schlechtem Timing.

Andererseits: Ich konnte auch mit dem zweiten Pro Micro nicht programmieren und der betätigt den Resetpin des zickigen Pro Micros mit seinem IO-Pin, also per Hardware. Da muss noch etwas anderes nicht gestimmt haben.

Das ist richtig!
Normal.
Bootloader und Anwendung nutzen unterschiedliche Ports.

Der Kondensator ist nur nötig, wenn man "Arduino as ISP" auf einem Board nutzt, welcher DTR für den Reset nutzt.
Boards mit 32U4 tun das nicht.

Ich präzisiere: Der Port ändert sich sporadisch, also immer wieder mal, aber nicht immer.

Das passiert, wenn ich auf einen Pro Micro direkt über USB einen Sketch hochlade, aber es passiert auch, wenn ich einen Pro Micro als Programmer dazwischen schalte. In letztgenanntem Fall versuche ich mehrmals den Bootloader hochzuladen und nach ein paar Mal kommt die Meldung, dass der Programmer nicht gefunden wird. Statt an ttyACM0 hängt er plötzlich an ttyACM1. Irgendwann springt er wieder zurück auf ttyACM0.

Wie ich vorhin schon schrieb, bin ich davon ausgegangen, dass wieder diese Probleme auftreten und so ist es auch gekommen. Ich habe mehrmals erfolgreich meinen Sparkfun Pro Micro programmiert und plötzlich ging es nicht mehr.

Ich habe dann probiert, ihn mit dem USBasp zu beschreiben und auch mit dem Pro Micro als Programmer. Nichts. Ich habe die Firmware des USBasp von 1.02 auf 1.04 von Fischl aktualisiert. Nichts half. Als ich gerade schon aufgeben wollte, habe ich mir gedacht, ich wähle in der IDE mal "Arduino as ISP" statt "Arduino as ISP (ATMega32U4)", und damit hat es dann sofort und auch mehrfach funktioniert.

Da werd ich bekloppt. Gestern Abend war es genau anders herum. Da konnte ich erst den Bootloader aktualisieren, nachdem ich die andere, zumindest vom Namen her passendere Option gewählt hatte.

So macht das echt keinen Spaß. Als ich noch unter Windows XP mit IDE1.6 und älter Sketche hochgeladen habe, ist so etwas nie passiert. Unter Linux Mint passiert es dagegen immer wieder. Geschätzt geht es jedes 20. bis 30. Mal in die Hose und ich muss dann unterschiedliche Varianten ausprobieren, um den Pro Micro wieder ansprechbar zu machen.

Unter WinXP ist IDE1.6 so langsam, dass das auch nicht mehr brauchbar ist. Aber vielleicht liegt hier der Hase im Pfeffer. Könnte es sein, dass die Baudrate oder andere Timings zu scharf sind?

Probiere mal:

Das USB Kabel abziehen und gleich wieder anstecken, - der Port ändert sich.

Das USB Kabel abziehen und nach > 1 Minute wieder anstecken, der Port bleibt gleich.

So ähnlich hatte ich das mal beobachtet...

Das habe ich gerade mehrfach probiert und auch statt dem Abziehen den Reset-Pin gegen Masse gezogen, weil das deutlich schneller geht, aber es blieb ausschließlich ttyACM0 belegt.

Bei meiner weiteren Recherche zur Arduino-IDE unter Linux habe ich Hinweise gefunden, dass schlechte physikalische Verbindung (schlechtes oder zu langes Kabel, USB-Hubs, Front-Panel-Ports, ...) oder aber auch der in Linux integrierte Modemmanager solche Probleme bereiten kann.

Ich werde den Modemmanager nun erst mal deaktivieren und dann noch etwas rumspielen, da ich das Problem nicht provozieren kann, da es nur sporadisch auftritt. Sollte es dann funktionieren, muss ich mir etwas einfallen lassen, dass ich zukünftig nicht vergesse, diesen immer wieder zu deaktivieren. UDEV-Regeln scheinen mir dazu unpraktisch zu sein, denn die IDs können sich ändern und neue hinzukommen.

EDIT:

Gerade auch hier im Forum einen Hinweis auf Probleme mit dem Modemmanger und Pro Micro gefunden:

Die Symptome sind zwar nicht gleich, die Hoffnung steigt dennoch :-)

kurze Rückmeldung:

Mit deaktiviertem Modemmanager ist es trotzdem passiert, dass der Pro Micro auf ttyACM1 hing. Allerdings hatte ich kurz zuvor heftig am Reset-Pin gespielt, weil sich das Teil nicht programmieren ließ.

Wenn ich einen kleinen Sketch auf den zickigen Pro Micro hochladen wollte (leer, oder auch Blink), dann fingen die RX- und TX-LEDS mit hoher Frequenz an zu blinken, sobald die IDE hochladen wollte.

Mit dem anderen Pro Micro als ISP konnte ich weder einen Sketch hochladen, noch den Bootloader brennen. Laut Fehlermeldung wurde eine andere Device Signature erwartet.

Mit dem USBasp lief zwar die Programmierung eines Sketches ohne Fehlermeldung durch, aber er schien nicht angekommen zu sein.

Ich habe dann testweise Leonardo ausgewählt und dessen Bootloader mit USBasp installiert. Das lief problemlos und der Blinksketch auf dem Pro Micro war danach auch weg, bzw. es blinkte nichts mehr.

Seitdem kann ich den Pro Micro problemlos direkt über USB programmieren und dabei auch Leonardo oder auch Pro Mikro (16MHz/5V) auswählen. Der Pro Micro meldet sich danach dann je nach Auswahl als Pro Micro oder Leonardo.
Was nach wie vor nicht sinnvoll funktioniert, ist die Funktion "Tools->Reload Board Data", denn dadurch wird in der IDE weiterhin die 3,3V/8MHz-Variante gesetzt, obwohl es ein 5V-Typ ist/sein soll.

Immer wieder toll, wie man doch die an sich nützlichen Meldungen bis zur Nutzlosigkeit verstümmeln kann.

Merke: Jedes hochladen per ISP führt einen Chip Erase durch!

Wenn man den Bootloader per ISP hochläd, ist die Anwendung natürlich weg.
Wenn man die Anwendung per ISP hochläd, ist der Bootloader natürlich weg.

Das Verhalten kann man ändern, wenn man will.

Hätte ich die Fehlermeldung noch gehabt, hätte ich sie zitiert, aber meine Rückmeldung bestand im Wesentlichen aus einer Zusammenfassung dessen, was ich zuvor über Stunden recherchiert und probiert hatte. Befriedigend finde ich es auch nicht, zumal ich immer noch nicht weiß, was die Ursache für das Problem war/ist.

Eine Sache ist mir noch aufgefallen: Zweimal hat sich der Pro Micro "gebrickt", als der Serielle Monitor in der IDE lief. Diesen habe ich danach absichtlich ausgeschaltet gelassen, da ich nach 2 Tagen und vielen Stunden Sucherei mein Mini-Projekt (DHT22 auslesen und mit Taupunkt auf OLED ausgeben) fertig bekommen wollte, weil ich das Ding brauche.

Falls das noch mal auftritt, wovon ich ausgehe, werde ich genauere Infos nachreichen, aber so schnell werde ich keine Zeit mehr zum Spielen haben.

Ich hätte schon längst anderen Arduino genommen, und mit dem Pro Micro später weiter beschäftigt.
Komischer weise macht der Micro öfters Probleme unter Linux, da der in Zeiten von ESP und Co selten benutzt wird macht sich keiner was viel Ahnung hat, keine Gedanken mehr
Pro Micro kann nicht programmiert werden.._gaOTk2MTM5OTk3LjE3Nzk4MjUxMTE._ga_NEXN8H46L5czE3Nzk4MjUxMTAkbzEkZzAkdDE3Nzk4MjUxMTAkajYwJGwwJGgxMzI4NTEzMjIy