Forum: Mikrocontroller und Digitale Elektronik Arduino-Ausgabe an PC-Terminal


von Maxim (Gast)


Lesenswert?

Moin,

habe einen Arduino, mit dem ich Daten über USB ausgebe.
Das mache ich mit
Serial.begin(9600);
Serial.println("Text");

Beim Anschließen des Arduino an den Windows-PC wird ein virtueller Port 
COM12 eingerichtet.

Wenn ich in der Arduino-IDE den seriallen Monitor öffne, wird die 
Ausgabe dort auch angezeigt.

Wenn ich aber ein anderes Terminal-Programm nehme (HTerm, Termite, Br@y, 
Putty), dort COM12 wähle, wird nichts angezeigt.

Ich weiß, dass keine zwei Programme gleichzeitig auf den COM12-Port 
zugreifen können, das wird auch mit einer Fehlermeldung quittiert.

Wenn die Arduino-IDE beendet wird, klappt das immer noch nicht. Auch 
nicht nach einem Reset des Arduino oder einem Neustart des PC.

Vielleicht weiß ja hier jemand, woran das liegen kann.
Danke schon mal.

Gruß
Maxim

von Falk B. (falk)


Lesenswert?

Man muss auch die richtige Baudrate einstellen.

von Maxim (Gast)


Lesenswert?

Baudrate und Format (Daten- u. Stop-Bits, Parity) sind natürlich richtig 
eingestellt.

von Einer K. (Gast)


Lesenswert?

Dann funktioniert das auch!

von tty (Gast)


Lesenswert?

Maxim schrieb:
> Baudrate und Format (Daten- u. Stop-Bits, Parity) sind natürlich richtig
> eingestellt.

Dann funktioniert das natürlich auch.
Zumindest bei mir mit Putty und "Joy-it" Uno-R3 sowie MEGA-2560 des 
gleichen Herstellers/Importeuers..

von tty (Gast)


Lesenswert?

Es ging mir übrigens nicht darum einen bestimmten Hersteller 
hervorzuheben. Aber es sind halt Teile mit dem "richtigen" Arduino 
Com/USB-Chip ATmega16U2, nicht mit diesem 340 Dingens oder so...

von Helmut -. (dc3yc)


Lesenswert?

tty schrieb:
> Aber es sind halt Teile mit dem "richtigen" Arduino
> Com/USB-Chip ATmega16U2, nicht mit diesem 340 Dingens oder so...

Das geht aber auch mit diesem 340 Dingens!

von Einer K. (Gast)


Lesenswert?

Das geht mit allen.
Für manche Schnittstellenbausteine ist ein extra Treiber nötig.
Wenn Arduino selber damit umgehen kann, dann ist das schon erledigt,
Und die anderen Terminalprogramme können auch damit umgehen.

Ach ja...
Die Arduino IDE macht beim Öffnen einen Reset des Arduino.

Das, und nur das, machen nicht alle anderen Terminal Programme.
bzw. kann man bei denen weg konfigurieren.

von tty (Gast)


Lesenswert?

Helmut -. schrieb:

> Das geht aber auch mit diesem 340 Dingens!

Mag sein.
Aber ich habs damit nie probiert weil sich die Teile sowieso schon immer 
etwas bockig anstellen und beispielsweise öfter mal (beim neu verbinden) 
die Nummer des com-ports ändern.

von Einer K. (Gast)


Lesenswert?

tty schrieb:
> weil sich die Teile sowieso schon immer
> etwas bockig anstellen und beispielsweise öfter mal (beim neu verbinden)
> die Nummer des com-ports ändern.
Nur, wenn du mehrere davon hast.

Win entscheidet in erster Linie anhand der PID/VID und in zweiter Linie 
anhand der Seriennummer, welcher COM vergeben wird.
Die Arduinos mit 16U2, 8U2 oder 32U4 haben eine Seriennummer

Win kann also die CH340 nicht unterscheiden.

von Maxim (Gast)


Lesenswert?

Der Arduino ist ein originaler Leonardo.

Ich habe jetzt eine LED angesteckt, die während der Ausgabe leuchtet.
Sie leuchtet beim seriellen Monitor der Arduino-LED und auch bei andern 
Terminals. Nur wird bei denen nach wie vor nichts ausgegeben.

Die Einstellungen wurden auch nochmal geprüft:
8 Bit Daten
1 Stop Bit
kein Parity

Bei der Reihenfolge PC-Neustart, Reset Arduino, Arduino-IDE, anderes 
Terminal wurde inzwischen fast alles ausprobiert, immer das gleiche 
Ergebnis.

von Einer K. (Gast)


Lesenswert?

Maxim schrieb:
> Der Arduino ist ein originaler Leonardo.
Das hat auch was gedauert!
Warum nicht sofort.


> Reset Arduino
Dann meldet er sich zu erst mit dem Bootloader
Danach mit der Serial COM.
Der Leonardo ist also mit 2 COM Pots unterwegs.

Beim Leonardo ist die Baudrate übringens völlig egal.
Einzig 1200 Baud macht eine Extrawurst.

von 50c (Gast)


Lesenswert?

Maxim schrieb:
> Bei der Reihenfolge PC-Neustart, Reset Arduino, Arduino-IDE, anderes
> Terminal wurde inzwischen fast alles ausprobiert, immer das gleiche
> Ergebnis.

RX und TX sind auch gekreuzt angeschlossen?

von Maxim (Gast)


Lesenswert?

Oh, ist der Leonardo da anders als der Uno?

Jedenfalls, wird in der Arduino-IDE (serial monitor) COM12 angezeigt, 
mit dem funktioniert das ja auch.
Wenn ich in den Terminals die verfügbaren Ports scanne, wird nur COM12 
angezeigt.

Evtl. kommt der zweite Port erst dazu, wenn man die HDI-Funktion des 
Arduino aktiviert, also wenn man ihn als Tastatur benutzt. Das ist 
momentan (noch) nicht der Fall.

von Maxim (Gast)


Lesenswert?

Da der Arduino nur über USB an den PC angeschlossen ist, gibt es keine 
RX/TX zu kreuzen.

von Einer K. (Gast)


Lesenswert?

Maxim schrieb:
> Oh, ist der Leonardo da anders als der Uno?
Ja!
Ja!
Und nochmal Ja!


Beim Leonardo und Micro muss man in Putty und Termite die Hardware Flow 
Control (DSR/DTR) aktivieren.
Die Einstellung der Baudrate spielt dagegen keine Rolle da die Serielle 
beidseitig rein virtuell ist.
Einzig 1200 Baud macht eine Extrawurst(Reset).

von Maxim (Gast)


Lesenswert?

Danke, Handshaking aktiviert und schon geht's!

You are my hero!

von Stefan F. (Gast)


Lesenswert?

tty schrieb:
> Aber ich habs damit nie probiert weil sich die Teile sowieso schon immer
> etwas bockig anstellen und beispielsweise öfter mal (beim neu verbinden)
> die Nummer des com-ports ändern

Damit hatte ich bisher weder unter Linux noch unter Windows Probleme. 
man muss ihn natürlich immer an den selben USB Port stecken (gilt auch 
für Hubs).

von Maxim (Gast)


Lesenswert?

Ganz rund läuft es aber immer noch nicht.

Wenn ich den Arduino aus- und wieder einstecke (USB-Kabel) oder ein 
Reset mache (Reset-Taster), höre ich das Windows Ding-Dong für Trennen 
und Verbinden eines USB-Geräts. Soweit gut.

Der Arduino läuft aber nicht los, die LED bleibt dunkel.
COM12 wird vom Terminal-Programm zwar gefunden, es kommt aber keine 
Ausgabe.

Wenn ich dann den seriallen Monitor der Arduino-LED starte, beginnt die 
LED zu blinken, Ausgabe kommt.

Erst dann kann ich zum Terminal wechseln und dort die Ausgabe sehen.

Warum startet der Arduino erst, wenn der serielle Monitor der IDE 
aufgerufen wird? Kann ich das auch in einem Terminal hin bekommen?

von Einer K. (Gast)


Lesenswert?

KA, was du meinst!

Zeige mal ein minimales Testprogramm

von Maxim (Gast)


Lesenswert?

OK, das Problem lag am Sketch. Dort ist ein
while(!Serial);
drin. Da passiert wohl irgendwas mit dem seriellen Monitor.
Wenn ich das auskommentiere, läuft der Sketch los (LED blinkt).

Ich bekomme am Terminal aber keine Ausgabe mehr.

Irgendwie ist das verhext...

von Stefan F. (Gast)


Lesenswert?

Maxim schrieb:
> Wenn ich den Arduino aus- und wieder einstecke (USB-Kabel) oder ein
> Reset mache (Reset-Taster), höre ich das Windows Ding-Dong für Trennen
> und Verbinden eines USB-Geräts. Soweit gut.
>
> Der Arduino läuft aber nicht los, die LED bleibt dunkel.
> COM12 wird vom Terminal-Programm zwar gefunden, es kommt aber keine
> Ausgabe.

Wenn du das Gerät abziehst während eine Verbindung (softwareseitig) 
offen ist, blockiert etwas. Du musst erst den Arduino Monitor (bzw. dein 
Terminal Programm) schließen und es dann anstecken.

von Maxim (Gast)


Lesenswert?

Danke, das habe ich aber beachtet. Erst Verbindung trennen, dann 
abstecken.

HTerm und Br@y Terminal funktionieren nicht.
Termite geht.

Vielleicht kommt es darauf an, wie so ein Terminal-Programm den Port 
öffnet.

von Stefan F. (Gast)


Lesenswert?

Maxim schrieb:
> Ich bekomme am Terminal aber keine Ausgabe mehr.

Probiere mal im Terminalprogramm aus, das DTR Signal zu ändern. Notfalls 
auch RTS.

Vielleicht gibst du mal unmissverständlich bekannt, um welches Arduino 
Board es geht.

von Maxim (Gast)


Lesenswert?

Es ist ein Arduino Leonardo, die originale Version.

Muss jetzt zur Mensa, schaue heute Nachmittag weiter nach dem Problem.

von Stefan F. (Gast)


Lesenswert?

Maxim schrieb:
> Es ist ein Arduino Leonardo, die originale Version.

Der hängt direkt am USB, also gibt es keine Hardware Handshake 
Leitungen. Sein Schaltplan nützt hier nichts.

Aber das verwendete USB Protokoll emuliert sie, und so kann die Software 
auf dem Chip durchaus den den Hardware Handshake Signalen abhängen.

Also schauen wir in die Doku: 
https://www.google.com/search?q=arduino+leonardo+serial

Das erste Ergebnis ist bei mir 
https://www.arduino.cc/en/Guide/ArduinoLeonardoMicro

Und da steht, dass dieses Board (wie oben bereits angemerkt wurde) beim 
Öffnen des seriellen Portes keinen Reset macht und dass es stehen 
bleibt, wenn der Puffer voll ist. Der Befehl
1
while (!Serial) ;

Wartet darauf, dass der PC eine Verbindung aufbaut. Dein Programm wird 
dann allerdings ohne PC also nicht lauffähig sein. Eine etwas klügere 
Lösung mit Timeouts oder einem if/else (nur etwas ausgeben, wenn 
Verbindung besteht) wäre da vielleicht klüger.

Weiterhin habe ich Google ganz schnell diese Seite gefunden: 
https://forum.arduino.cc/index.php?topic=119557.0

Da steht "The leonardo only sends out data if the program/os on the pc 
sets either DTR or RTS, (or both) high. If you use a program like putty 
or the serial monitor in the IDE to communicate with the leonardo, there 
is no problem because these programs set DTR and/or RTS. If you do 
serial communications from your own program you must make sure yourself 
to set DTR/RTS. "

Was meine weiter oben geäußerte Vermutung bestätigt. Die Ansteuerung der 
(virtuellen) DTR und RTS Leitung ist dein Knackpunkt.

von Einer K. (Gast)


Lesenswert?

Maxim schrieb:
> OK, das Problem lag am Sketch. Dort ist ein
> while(!Serial);
> drin. Da passiert wohl irgendwas mit dem seriellen Monitor.

Nöö..
Der Leonardo wartet, bis die Serielle geöffnet wird.
(Serial implementiert den bool Cast Operator)

Für Putty muss das Handshake dann auf RTS/CTS stehen
Termite hätte es gerne mit DTR/DSR
TeraTerm da reicht Hardware Handshake

von Maxim (Gast)


Lesenswert?

Um das abzuschließen:

Die serielle Schnittstelle des Arduino Leonardo funktioniert jetzt wie 
erwartet. Am liebsten benutze ich das Br@y-Terminal. Da muss man kein 
Handshake einstellen (RTS/CTS). Es genügt, wenn man unten den Button DTR 
aktiviert.

Also, vielen Dank für eure Hilfe!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.