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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Maxim (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Man muss auch die richtige Baudrate einstellen.

von Maxim (Gast)


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

von Arduino Fanboy D. (ufuf)


Bewertung
-1 lesenswert
nicht lesenswert
Dann funktioniert das auch!

von tty (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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 Arduino Fanboy D. (ufuf)


Bewertung
-1 lesenswert
nicht 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.

: Bearbeitet durch User
von tty (Gast)


Bewertung
0 lesenswert
nicht 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 Arduino Fanboy D. (ufuf)


Bewertung
-1 lesenswert
nicht 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.

: Bearbeitet durch User
von Maxim (Gast)


Bewertung
0 lesenswert
nicht 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 Arduino Fanboy D. (ufuf)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


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

von Arduino Fanboy D. (ufuf)


Bewertung
-1 lesenswert
nicht 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).

: Bearbeitet durch User
von Maxim (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Danke, Handshaking aktiviert und schon geht's!

You are my hero!

von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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 Arduino Fanboy D. (ufuf)


Bewertung
-1 lesenswert
nicht lesenswert
KA, was du meinst!

Zeige mal ein minimales Testprogramm

von Maxim (Gast)


Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
0 lesenswert
nicht 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.

: Bearbeitet durch User
von Maxim (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Es ist ein Arduino Leonardo, die originale Version.

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

von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht 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.

: Bearbeitet durch User
von Arduino Fanboy D. (ufuf)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.