Problem mit der seriellen Datenübermittlung - Was macht der "Serielle Monitor"?

Hallo zusammen,

ich bin gerade dabei in einem selbst entwickelten Programm eine Schnittstelle zu meinem Arduino Uno und Arduino Micro einzubauen. Ich habe es bereits geschafft, das Sketch an den Arduino zu übertragen. Wenn ich nun aber im Anschluß Daten über die serielle Schnittstelle an den Arduino sende, passiert auf dem Arduino gar nichts! Erst wenn ich einmal den “Seriellen Monitor” z.B. aus “Arduino For Windows” heraus, geöffnet habe, reagiert der Arduino auf Daten, die ich über meine Anwendung an den Arduino sende.

Meine Frage ist nun, was macht der “Serielle Monitor” damit der Arduino auf gesendete Daten reagiert? Nur der Reset kann es ja eigentlich nicht sein! Denn auch wenn ich das Sketch übermittelt habe, dann den Reset Knopf am Board drücke und anschliessend Daten aus der Anwendung heraus an den Arduino sende passiert auf dem Board nichts!

Ich muss immer einmal den “Seriellen Monitor” öffnen! Dann funktioniert es.

Hat jemand einen Tip was ich machen muss, damit das auch funktioniert ohne immer erst den Seriellen Monitor öffnen zu müssen?

Gruß,
Frank

Im Normalfall löst das Öffnen der Schnittstelle durch den SerialMonitor ein Reset aus. Das siehst du richtig. Reden wir über den Arduino USB Treiber für Windows, der eine COMx Schnittstelle zur Verfügung stellt, die im UNO auf Serial (Pin0/1) ankommt ?

Merkwürdig: Wenn der SerialMonitor aktiv ist und die Schnittstelle offen hat, sollte dein Programm gar nicht dran kommen können.

Was ist das für ein "selbst entwickeltes Programm" ?

Wenn Du das IDE Terminal (serieller monitor im Arduino Programmierumgebung) aufmachst blockierst Du die Schnittstelle für andere Programme. Ich tippe mal daß 1) Dein Programm auf dem PC auf dem falschen COM Port sendet. 2) die falsche Baudrate eingestellt ist. (da würdest Du das rx LED auf dem Arduino flackern sehen)

Grüße Uwe

Hallo Uwe, hallo Michael,

Ihr habt ja beide Recht! Wenn ich mit meinem Programm versuche Daten an den Arduion zu senden, dann habe ich den Seriellen Monitor natürlich wieder geschlossen. Wenn ich den gestartet lasse, dann kann ich mit meinem Programm keine Verbindung zum Arduino aufbauen. Das ist ja auch logisch!

Den richtigen COM Port verwende ich auf jeden Fall, da ich ja sowohl das Sketch an sich als auch die Daten an den Arduino senden kann. Letzteres funktioniert aber erst, nachdem ich einmalig den Seriellen Monitor gestartet habe.

Gibt es denn einen Unterschied zwischen dem Reset der gemacht wird, wenn man den Seriellen Monitor startet und dem Reset, den man durch Drücken der Reset-Taste auf dem Arduion auslöst? Ein Reset über die Reset-Taste reicht nämlich nicht aus.

Oder ist da noch irgendwas anderes, dass der Serielle Monitor macht, wenn man ihn startet (abgesehen von dem Reset)?

Die Entwicklungsumgebung, die ich verwende werdet Ihr nicht kennen, da sie zum einen sehr teuer ist und zum anderen nicht sehr verbreitet ist. Das Ganze läuft aber unter Windows und für die Kommunikation zum Arduino wird der Arduino USB Treiber genutzt, der ja die Serielle Schnittstelle zur Verfügung stellt!

Gruß, Frank fRANK

Franklin2: Gibt es denn einen Unterschied zwischen dem Reset der gemacht wird, wenn man den Seriellen Monitor startet und dem Reset, den man durch Drücken der Reset-Taste auf dem Arduion auslöst? Ein Reset über die Reset-Taste reicht nämlich nicht aus.

Nein, Reset ist Reset. Die serielle Schnittstelle am Arduino ist nach manuellem oder Auto-Reset immer im selben Zustand.

Es kann aber sein, dass ein Program wie der "Serielle Monitor" eine serielle Schnittstelle nach dem Schliessen auf dem Windows-PC in einem etwas anderen Zustand zurückläßt als es diese Schnittstelle beim Programmstart vorgefunden hat.

Ich würde mal überprüfen, ob in Deiner Entwicklungsumgebung alle Parameter der seriellen Schnittstelle auf dem Windows-PC korrekt initialisiert werden, also die Baudrate passend gesetzt, die Übertragungsparameter auf "8N1" (8 Datenbits, keine/NONE Parität, 1 Stopp-Bit) und das Handshaking auf "kein Handshaking verwenden" gesetzt ist.

Irgendwas davon wirst Du wohl vergessen haben, passend zu initialisieren.

Wenn ich den gestartet lasse, dann kann ich mit meinem Programm keine Verbindung zum Arduino aufbauen. Das ist ja auch logisch!

Entschuldigung, aber dumme Fehler sollte man relativ früh ausschliessen ;) Den Reset- Eingang kurz auf 0 ziehen und wieder loslassen macht der SerialMonitor, indem er DTR (das CTS-Signal des 16U2) setzt. Was dann über nen Kondensator einen Puls ergibt, der genauso wirkt wie der Reset-Taster.

Hast du dieses SteuerSignal in deiner "teuren und seltenen" Programmierumgebung auch unter Kontrolle? Sonst schau dir das in RxTxComm.jar ( java ) oder .net ( auch VisualStudioExpress ) mal an.

Eigentlich können "alle" Programme, die die serielle Schnittstelle verwenden, mit einem Arduino reden. Es sollte sogar gehen, die Verbindung aufzumachen ohne dass ein Reset ausgelöst wird. Aber das ist ja gar nicht dein Problem, zur Zeit.

Hmm, das hilft mir bisher leider noch nicht weiter! Die Parameter für die Serielle Schnittstelle sind richtig gesetzt (8N1, kein Handshake). Daran kann es nicht liegen! Zumal ich ja die Daten zum Arduino übermittelt bekomme. Das Problem ist ja nur, dass der Arduino damit nichts anfangen kann, solange ich nicht einmal den Seriellen Monitor geöffnet habe! Danach funktioniert ja alles so wie es sein sollte!

Komisch ist nur das ein Reset über den Reset Knopf direkt am Board auch nicht hilft! Also irgendwas macht der Serielle Monitor was der Reset Knopf nicht macht! Aber was? :~

Gruß, Frank

Mit welcher Geschwindigkeit arbeitest du?. Hast du diese auch am PC durch dein Programm gesetzt?. Oder macht das erst der serielle Monitor?

Bernd

Ich mache das in C# und es ändert bei mir nichts ob das DtrEnable Property auf true oder false ist. Was ich aber gemerkt habe, ist dass er den Reset wenn überhaupt nur einmal macht, nachdem das Board mit Spannung versorgt wurde. Nach dem ersten Reset kommt keiner mehr, egal wie oft man die Verbindung trennt und aufbaut. Den Reset Taster zu betätigen ändert daran nichts. Man muss den Stecker ziehen damit man das wieder auf den Ausgangszustand bekommt.

Dazu muss ich auch sagen, dass auch keinen Original Arduino verwende, sondern einen mit einem FTDI Chip. Kann also auch damit zusammenhängen.

Ich hatte auch gleich festgestellt, dass man erst den Serial Monitor zumachen muss. Wenn man in der IDE auf "Upload" klickt, kann die IDE ja kurz die Verbindung unterbrechen. Mit einem externen Programm geht das natürlich nicht.

Kleine Korrektur, nachdem ich es mal genauer getestet habe:

Auf dem UNO funktioniert DtrEnable = true immer was ich so sehe. Der Reset wird bei jeder Verbindung ausgeführt. Mit DtrEnable = false wird nie ein Reset ausgeführt. So soll es sein. :)

Auf meinem Freeduino Mega mit FTDI Chip allerdings, wird wie schon gesagt, selbst bei false einmal ein Reset ausgeführt, nachdem das Board mit Spannung versorgt wird. Danach kommt aber kein Reset mehr. DtrEnable = true geht wie auf dem UNO und macht den Reset immer.

Das beste wird wohl sein, den Auto Reset per Hardware zu deaktivieren wenn es mal läuft. Oder vielleicht einen seriell/USB Adapter auf einer der anderen Schnittstellen.

Hallo zusammen,

erst mal vielen Dank für Eure Antworten. Leider bin ich mit meinem Problem noch nicht viel weiter gekommen. :-(

Die Einstellungen für die COM Schnittstelle sind im Windows Geräte-Manager richtig eingestellt und ich setze sie auch noch mal in meinem Programm auf die richtigen Werte. Die Kommunikation mit dem Arduino Board klappt ja im Grunde genommen auch. Das Problem ist nur, dass ich einmal den Seriellen Monitor öffnen und wieder schliessen muss. Danach funktioniert alles so wie gewollt.

Bisher habe ich aber leider nicht heraus finden können, was dieser Serielle Monitor macht, damit anschliessend das Arduino Board auf meine übermittelten Werte reagiert! :-(

Wenn noch jemand eine Idee hat was mir hier fehlt, dann wäre das echt hilfreich für mich!

Gruß, Frank

Hallo, der "seriellerMonitor" sendet kein "Reset" Sobald Du auf serielle USB Schnittstelle von außen auf den Arduino zugreifst, wird dieser "zurückversetzt" Das macht der Arduino- nicht Deine externe Software. Bei manchen Arduino´s kann man das mit einer "Lötbrücke" abschalten.

Wenn Dein "seriellerMonitor" funktioniert, dann probiere es mal mit einem TerminalProgramm. Wenn das auch funktioniert, wird Deine "Anwendung" die serielle Schnittstelle Deines Rechner nicht richtig konfigurieren. Gruß und Spaß Andreas

gruß stefan

lad' Dir die freeware HTerm runter. da kannst Du genau einstellen, was beim verbinden gesendet wird (DTR, RTS). vielleicht kommst Du so drauf...

z.B. hier:http://www.heise.de/download/hterm.html gruß stefan

Hi Stefan,

danke für den Tip! Ich werde mir das nachher zu Hause mal mit HTerm ansehen! Vielleicht kann ich ja mit dem Tool mehr sehen!

Gruß, Frank

Hallo zusammen,

ich wollte mich nur noch mal kurz für die vielen Tips und Hinweise bei Euch bedanken. Ich habe den Fehler gefunden. Es hatte wohl tatsächlich etwas mit den Einstellungen für die serielle Schnittstelle zu tun. Ich habe mein Programm jetzt ein wenig umgebaut und nutze nun die Windows-Funktionen aus der Kernel32.dll. Damit klappt es nun erstmal so, wie ich es mir vorgestellt habe.

Nun kann ich mich an die Feinarbeit machen und mein Programm erweitern und verfeinern.

Vielen Dank noch mal für Eure Hilfe. :)

Gruß, Frank

Hallo,
Ich habe ein ähnliches Problem.
Ich habe ein Arduino Uno mit einem Adafruit Motorshield V2.
Ich hatte bisher Daten im String via Bluethooth vom Handy gesendet.
Die den String habe ich in einer Long Variable gespeichert.
Alles kein Problem das funktionierte soweit alles.
Dann hatte ich einen Beschleunigungssensor an die Analog Eingänge 1-3 angeschlossen. danach funktionierte die Serielle Kommunikation gar nicht mehr. Bei genauerer Betrachtung ist mir aufgefallen das das Adafruit Motorshield die ersten 2 Analogeingänge für die IC benutzt. Nach dem Umlöten auf A3-5 kann ich über den Seriellen Monitor wieder die Kommunikation beobachten. Allerdings sind die Variablen immer 0 wenn ich den Seriellen Monitor starte. Sobald ich Werte vom Handy übermittel werden diese in den Variablen gespeichert und das Programm funktioniert. Allerdings wenn ich den Seriellen Monitor nicht starte funktioniert das Programm nicht (vermutlich keine Werte in den Variablen). Wenn ich mit der A1-3 Aktion die ICs beschädigt haben sollte dürfte keine Kommunikation mehr möglich sein oder?
Leider ist der BT Empfänger und auch sämtliche Kabel auf dem Motershield verlötet.

Ach ja ich benutze seit Jahren die gleiche Standard IDE , ich habe nur einmal auf der Werkzeugschaltfläche versehentlich auf Korrigieren und neu Laden gedrückt das sollte aber nichts ausmachen oder?

Hochladen funktioniert auch, also kann kein falscher Port sein vielen Dank

Hast Du mal aufs Datum des letzen Beitrags vor Dir geschaut?

Gruß Tommy

6 Jahre Später wollte aber keinen neuen Beitrag eröffnen Kleines Update wenn ich die DAten nicht durch Serial Print ln im Seriellen Monitor anzeigen lasse werden die Variablen auch nicht beschrieben wenn der Serielle Monitor an ist , die Aktoren bewegen sich nicht.

Nur für den Fall, dass du dich darüber wunderst, dass dir nicht freudestrahlend geholfen wird....

Wir können Threadhijacking nicht gut leiden. Also werden sich viele einfach nur hiervon abwenden.