Ich habe gefühlt hunderte von Arduinos in Projekten verbaut. Nie Probleme gehabt beim Upload.
Jetzt habe ich fast ständig die Meldung Port busy. Dabei spielt es keine Rolle, ob ich innerhalb von 20 Sekunden es 10 mal Versuche und mal zwei Minuten warte, das Verhalten ist völlig random. Auch rebooten scheint nicht gross einen Einfluss zu haben. Versucht habe ich:
Originaler Arduino Uno aus der Box
Mehrere Nanos
Kabel getauscht, kuze Kabel lange Kabel verschiedener Hersteller
Kabel direkt am PC anstatt USB Hub
Arduino IDE SW update
Libs update
Jetzt gehen mir die Idee aus, weil so macht es keinen Spass. Die Hardware ist dieselbe wie eh und je, ich kann mir nur vorstellen dass durch die Windows Update mal was runtergejubelt wurde dass der Port nicht mehr richtig freigegeben wird.
Ja, hatte ich auch mal nach einem Windowsupdate. Im Batchfile zum Laden des Programms war vor dem eigentlichen Transfer ein probeweises Öffnen und Schließen der Schnittstelle vorhanden, vermutlich um deren Existenz zu verifizieren. Jedenfalls war nach Beendigung dieser Schnüffelroutine die Schnittstelle noch eine kurze Zeit als "busy" markiert und das folgende Programm bekam sie nicht geöffnet. Eine Millisekunde Verzögerung in das Batchfile eingebaut und alles lief wieder reibungslos.
Jetzt gehen mir die Idee aus, weil so macht es keinen Spass.
Dann einmal der Reihe nach:
Von wem kommt die Meldung "Port busy"?
Was sagt der Gerätemanager?
Kannst du dich mit einem Terminalprogramm auf den Port verbinden?
Wie nutzt du das DTR Signal?
Welcher Boot Loader ist auf dem Arduino?
Was hast du als Boot Loader eingestellt?
Was passiert, wenn du die Reset-Taste benutzt?
Kannst du dich mit einem Terminalprogramm auf den Port verbinden?
Geht.
Wie nutzt du das DTR Signal?
Gar nicht.
Welcher Boot Loader ist auf dem Arduino?
Der welcher original ausgeliefert wird. (Ich bin einer der die Dinger auch auf reichelt bestellt weil ich das Arduino Programm finanziell unterstützen möchte und nix nur Clones aus China kauft)
Was hast du als Boot Loader eingestellt?
Alles durchprobiert, keine Wirkung
Was passiert, wenn du die Reset-Taste benutzt?
Nun, der Taster schliesst den Stromkreis zum Reset Pin als Folge hiervon der CPU veranlasst einen Reset durchzuführen.
Kann ein-austecken oder Resetten keine Verbesserung
Das ist sehr ungewöhnlich. Eine neu installierte Arduino IDE mit dem Arduino Nano sollte das tun. Vielleicht solltest du überlegen, was du an der Arduino IDE kaputtkonfiguriert hast.
Neuinstallation hast du schon probiert?
Kannst du dich mit einem Terminalprogramm auf den Port verbinden?
Geht.
Kannst du vom Terminalprogramm aus über DTR einen Reset des Controllers auslösen?
Kannst du mit einem anderen Programm die Serielle Schnittstelle zum Arduino öffnen?
stelle sicher, dass kein anderes Programm auf die serielle Schnittstelle zugreift - also schließ jedes Terminal und den Seriellen Monitor, bevor du den Upload versuchst.
Ich hatte auch mal so ein Problem.
Bei mir war CURA schuld. Da es automatisch alle COM-Ports allokiert.
Das mitgelieferte CURA-Plugin "USB Printing" deaktivieren und es ging wieder.
Die Fehlerursache wurde doch weiter oben schon beschrieben...
Die Sitzung beginnt mit einem Reset des Arduino. Dazu wird die Schnittstelle geöffnet, an der DTR Leitung gewackelt und die Schnittstelle wieder geschlossen.
Nun beginnt die eigentliche Programmierung. Dazu muss die Schnittstelle wieder geöffnet werden. Windows ist aber an manchen Ecken etwas träge und das Schliessen aus dem Reset Vorgang hat sich noch nicht im System herumgesprochen. Folglich kommt die Fehlermeldung, dass die Schnittstelle nicht zur Verfügung steht.
Abhilfe wäre, das Schliessen und erneute Öffnen wegzulassen. Oder es muss zwischen Schliessen und Öffnen eine kleine Verzögerung eingebaut werden. Beides wäre Sache des AVRDude Programmierers (den ich hiermit herzlichst bitte).
Beides wäre Sache des AVRDude Programmierers (den ich hiermit
herzlichst bitte).
Und der hat gefaelligst regelmaessig die Freds hier zu lesen, damit er deinem Urteil zeitnah abhelfen kann! Gehts noch? Schreibe wenigstens einen korrekten Problemreport auf Github: https://github.com/avrdudes/avrdude/issues.
Aber am besten Quellcode runterladen, die betreffenden Zeilen aendern, und neu kompilieren. Duerfte sich wahrscheinlich auf das Auskommentieren von ein paar Zeilen beschraenken. Du weisst wahrscheinlich nicht wie Open Source funktioniert!
Warum ist das denn jetzt ein AVRDude Problem wenn die Arduino-IDE
offenbar zu schnell hintereinander den Port öffnet?
So schlimm kann es mit dem "zu schnell" nicht sein. Sonst hätte sich die Arduino IDE nicht dermaßen weit in der Welt verbreitet.
Das hört sich eher nach einem lokalen Rechnerproblem an.
Eine neu installierte Arduino IDE mit dem
Arduino Nano sollte das tun. Vielleicht solltest du überlegen, was du an
der Arduino IDE kaputtkonfiguriert hast.
Die Arduino IDE installiert man nicht, man nutzt sie als portable.
Oder redet Philipp G. (geiserp) etwa von der neuen Version mit ihren diversen Macken?
Die Fehlerursache wurde doch weiter oben schon beschrieben...
Die Sitzung beginnt mit einem Reset des Arduino. Dazu wird die
Schnittstelle geöffnet, an der DTR Leitung gewackelt und die
Schnittstelle wieder geschlossen.
Nun beginnt die eigentliche Programmierung. Dazu muss die Schnittstelle
wieder geöffnet werden.
Wo nimmst Du diese Behauptung her? Nach DTR muss sie nicht geschlossen werden, der Arduino kann auch antworten, wenn sie offen bleibt.
Oder redet Philipp G. (geiserp) etwa von der neuen Version mit ihren
diversen Macken?
Version 2.x ist die erste wenigstens vage benutzbare Version dieser IDE, die den Benutzer nicht völlig verblödet vor den *.ino-Dateien stehen lässt, sondern Dinge zulässt, die andere IDEs schon seit Jahrzehnten können (z.B. "springe zur Definition eines Symbols").
Aha. Deswegen gibt es ja auch ein Installationsprogramm. Damit man es
nicht benutzt.
Klar. Versteht jeder.
Du verstehst das offensichtlich nicht!
Vermutlich fehlt dir da was an nötiger Information, um das sinnbehaftet beurteilen zu können.
Kann ich damit richtig liegen?
Daraus wird mir nur klar, daß beim Compilieren ein Fehler auftritt.
Macht es zuviel Mühe, in den Einstellungen der ArduinoIDE die erweiterte Ausgabe für den Ladeprozeß zu aktivieren, sich daraus den Aufruf von avrdude abzukupfern und das dann nochmal manuell zu starten? Wenns dann lädt, ist es der von mir beschriebene Timing-Fehler. Bei mir jedenfalls (Version 1.8.19) wird die Hexdatei nicht gelöscht und ist für einen zweiten Versuch vorhanden.
Gruß Klaus (der soundsovielte)
P.S. Fände ich nach der bisherigen Theoretisiererei mal interessant.
Macht es zuviel Mühe, in den Einstellungen der ArduinoIDE die erweiterte
Ausgabe für den Ladeprozeß zu aktivieren, sich daraus den Aufruf von
avrdude abzukupfern und das dann nochmal manuell zu starten? Wenns dann
lädt, ist es der von mir beschriebene Timing-Fehler. Bei mir jedenfalls
(Version 1.8.19) wird die Hexdatei nicht gelöscht und ist für einen
zweiten Versuch vorhanden.
Gruß Klaus (der soundsovielte)
P.S. Fände ich nach der bisherigen Theoretisiererei mal interessant.
Ja, habe die entsprechende Zeile im command prompt laufen lassen. Ergebnis: Verhalten und Fehler derselbe.
Ja, habe die entsprechende Zeile im command prompt laufen lassen.
Ergebnis: Verhalten und Fehler derselbe.
Danke für die Rückmeldung, dann liegt es nicht an der von mir beschriebenen Fehlerursache. Dann finde ich es aber sehr seltsam, daß (wie von Dir beschrieben) der serielle Port von einem Terminalprogramm geöffnet werden kann. Wieso kann ein Terminalprogramm den Port öffnen, avrdude aber nicht?
Gruß Klaus (der soundsovielte)
P.S. ein UART-Sniffer könnte hilfreich sein. Bin z.Zt beim Kunden, habe aber auf MCN schonmal auf den von mir verwendeten Sniffer hingewiesen (frei erhältlich und unter Win10 im Administratormodus lauffähig).
Bin z.Zt beim Kunden, habe
aber auf MCN schonmal auf den von mir verwendeten Sniffer hingewiesen
(frei erhältlich und unter Win10 im Administratormodus lauffähig).
Na das ist ja echt toll. Danke fur das Posten des Links, der Source Code ist bestimmt top kommentiert. Und viele Linuxer freuen sich darauf das unter Windows im Administrator-Modus ausfuehren zu koennen. Dir, als Langjaehrigem mit Glied, kann man ja bedingungslos vertrauen. Super!! Boa-Ey!