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
Baudrate und Format (Daten- u. Stop-Bits, Parity) sind natürlich richtig eingestellt.
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..
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...
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!
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.
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.
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.
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.
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.
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?
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.
Da der Arduino nur über USB an den PC angeschlossen ist, gibt es keine RX/TX zu kreuzen.
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).
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).
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?
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...
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.
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.
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.
Es ist ein Arduino Leonardo, die originale Version. Muss jetzt zur Mensa, schaue heute Nachmittag weiter nach dem Problem.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.