Go Down

Topic: Problem mit der seriellen Datenübermittlung - Was macht der "Serielle Monitor"? (Read 8386 times) previous topic - next topic

Franklin2

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

michael_x

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" ?


uwefed

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

Franklin2

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

jurs


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.


michael_x

Quote
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.

Franklin2

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

Bernd

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

Bernd

Serenifly

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.

Serenifly

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.

Franklin2

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


SkobyMobil

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


die zweite Maus bekommt den Speck...

Eisebaer

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

Franklin2

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

Franklin2

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

Go Up