Arduino Uno: immer wieder Port Probleme beim Sketch laden

  • Reiner: Danke für die Korrektur. Die #include Zeile ist mir beim Kopieren "durchgegangen".


    Und ja..., sich durch die Registerwelt zu bewegen ist etwas mühsam. Man kommt aber zuweilen nicht drum herum. Mit dem "Arduino-Befehlssatz" kann man zwar schon jede Menge machen, für manche Anwendungsfälle ist er aber dann doch zu begrenzt und/oder zu langsam bzw. kann man mit dem "Low Level" Programmieren oft auch etwas Speicherplatz einsparen.


    Allerdings funktioniert das untenstehende Beispiel auch mit attach- und detachinterrupt() aus dem "Arduino-Befehlssatz:



    Dieser Codeschnipsel stammt von Nick Gammon. Von der Arduino Referenz wird auch auf diese Seite verlinkt.

    Das Reh springt hoch. Das Reh springt weit. Warum auch nicht? Es hat ja Zeit. 8o

  • Code
    1. #include <util/atomic.h>

    muss noch inkludiert werden, sonst klappt es nicht mit dem compilieren.


    Interessanter Ansatz aber mit den Registern im allgemeinen stehe ich irgendwie noch so auf Kriegsfuss. Vielleicht liegt's aber auch einfach nur an der Dokumentation. (ist schon ne extrem staubige Bettlektüre)

  • Man kann den Controller in einen Sleepmodus versetzen. Das könnte man als „Programm anhalten“ bezeichnen. Über eine externe Beschaltung (z.B. Taster/Signal von einem Sensor, IR-Empfänger usw.) an den Pins D2 oder D3 kann er wieder aufgeweckt werden. Dabei läuft das Programm nach dem „aufwecken“ an der Stelle weiter, an der der Controller in den Sleepmodus geschickt wurde.


    Mit (zeitlichen) Einschränkungen könnte ein „Selbstaufwecken“ mit Hilfe des im Controller vorhandenen Watchdogs realisiert werden.

    Dieser würde den Controller, nach dem aktivieren des Sleepmodes, innerhalb einer Zeitspanne von wenigen Sekunden wieder "aufwecken".


    Das nur erst mal allgemein dazu.

  • Knisterbein

    ist wohl eher so ein "Jain". Kommt halt darauf an was man als Program ansieht.

    "Ja", wenn Felix sein "Program" in eine if/then Routine packt, würde das zwar generell funktionieren. Ich persönliche würde aber die if/then Schleife auch schon als Programteil ansehen, daher "Nein"

    Du könntest natürlich über PB6/PB7 einen externen Takt einspeisen, den Du softwaremäßig steuern kannst und ..... das ist aber ein anderes Thema 8)


    kukuk

    sollte im loop() ungefähr so aussehen ( nicht getestet) und das machen was Du willst. (hoffe ich).

  • Danke Reiner


    Nein, ausser man hat im Progamm etwas dazu vorgesehen. Was immer geht, Reset aktivieren. Dies zwingt den Prozessor dazu, das Programm wiedre bei 0 zu starten. Würde man den Takt der CPU stoppen, dann würde das aktuell abarbeitende Programm anhalten. Soviel ich weiss sind die ATxx Prozessoren rein statisch. Leider habe ich erst kürzlich eine Schaltung gesehen, die einen Atmel Prozessor stoppte, indem der Quartz am Schwingen gehindert wurde (ist sehr unschön, da man keine Ahnung hat, in welchem zeitlichen Augenblick abgewürgt wird).

    schönen Abend

    Pius

  • Super.


    Ich glaube die richtige Antwort ist einfach NEIN.

    Selbst wenn Du einen WAIT oder wie auch immer den STOP nennen möchtest auslösen würdest, würde in der LOOP das Program weiterlaufen um den START wieder erkennen zu können.

  • Guten Abend

    Ich habe andere USB-Anschlüsse getestet. Nun habe ich einen gefunden, wo bisher das Laden einwandfrei funktioniert :)

    Herzlichen Dank für den Tipp.


    Gibt es einen Befehl um ein laufendes Programm auf dem Arduino zu stoppen bzw. wieder zu starten?


    LG Felix

  • Das gelbe Ausrufezeichen am Port3 USB Eingabegerät Mouse ist eigentlich nicht OK

    Du kannst den zugewiesenen COM Port nicht manuell ändern, denn der wird vom System zugeteilt. Mit Port wechseln hatte ich gemeint, Du solltest mal einen anderen USB-Port probieren. Du kannst dann den zugewiesenen COMx ja im Tree Viewer sehen.


    Versuche mal einen Hub zu finden auf dem der Arduino dann alleine ist - so wie bei Deinem Bluetooth Radio

  • Arduino: 1.8.16 (Windows 10), Board: "Arduino Uno"


    Der Sketch verwendet 2652 Bytes (8%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes.


    Globale Variablen verwenden 208 Bytes (10%) des dynamischen Speichers, 1840 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.


    avrdude: ser_open(): can't set com-state for "\\.\COM3"


    Beim Hochladen des Sketches ist ein Fehler aufgetreten


    Fehler beim Festlegen der Parameter für den seriellen Port: 9.600 N 8 1





    Auch teilweise Probleme mit der Ausgabe von Text in Monitorfenster

  • Hallu zusammen


    Danke für die Tipps. In Beilage der Auszug des Tree Viewer. Hier kann ich keinen Konflikt erkennen, aber ich stelle zwei negative Effekte fest wenn

    ich mit dem PC und Arduino verbunden bin:


    - häufige Kommunikationsfehler (Com3)

    - sproadisch folgender Effekt wenn ich im Arduino Editor (IDE 1.8.16) arbeite, z.B. schreibe 1x "i" ->iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii

    Ziehe ich das USB-Kabel funktioniert der Editor wieder einwandfrei.


    Wie kann ich den Port neu festlegen?


    Grüsse und Dank

    Felix

    Dateien

    • 1.JPG

      (288,7 kB, 7 Mal heruntergeladen, zuletzt: )
  • Hallo Felix


    Ein Original - Arduino sollte eigentlich hier keine Probleme haben. delay() hat auch keinen Einfluss, da während der Datenübertragung der Sketch auf dem Arduino nicht läuft. Ich tippe eher auf eine äussere Ursache. Den USB-Port zu wechseln, wie es Reiner vorschlägt, ist immer eine gute Idee. Ein anderer Schwachpunkt ist das USB Kabel. Wenn Du ein anderes hast, einfach einmal wechseln. Ein Fehler, der während des Hochladens auftritt, kann durchaus durch ein schlechtes Kabel verursacht werden.


    Allerdings deuten die Fehlermeldungen 'Port busy' und 'Fehler beim Öffnen' auf ein anderes Problem hin. Kontrolliere auf deinem Computer, ob da keine Software ist, die sich ungefragt sämtliche seriellen Ports schnappt. Das könnte auch eine Sicherheitssoftware sein, die Schadcode über die serielle Schnittstelle abwehren möchte.


    Tatsächlich kann auch der Arduino, beziehungsweise das Programm, das darauf läuft, Probleme verursachen. Wenn sehr viele Daten per Serial.print auf den seriellen Monitor ausgegeben werden, kann das zu einer Blockade führen. Allerdings hatte ich das Problem mit einem original Arduino UNO noch nie.


    Gruss

    René

  • Kannst mal den USB Tree Viewer von heise.de installieren (ist doch ein Windows-Rechner oder?) und mal Deine USB Ports checken. Vielleicht kollidiert Dein Port mit einer anderen Applikation. Ganz ohne Check einfach mal den USB Port wechseln. USB-Kabel aber sicher OK? - Könnte auch die Ursache sein.


    LG


  • Geschätztes Forum


    Ich experimentiere seit einigen Tagen mit einem Arduino Uno R3 (orignal) nachdem ich 60% dieser tolle Einstiegs-Videoserie geschaut habe.

    Sehr häufig beklage ich beim Laden von Sketchs folgende Probleme bezüglich Ports:

    -Port busy

    -Beim Hochladen des Sketch ist ein Fehler aufgetreten

    -Fehler beim Öffnen serial Port


    Wie gesagt, einmal geht's, mal nicht. Lösen kann ich das Problem auch indem ich die USB-Verbindung kurz trenne.

    Auf dem Arduino läuft ein Programm mit der Funktion delay( ). Wird darum das USB-Port nicht bedient?


    Hätte mir bitte jemand einen Tipp?


    Vielen Dank

    Felix