Forum: Mikrocontroller und Digitale Elektronik Com Port DTR Pin unter Windows deaktivieren?


von Michael S. (jackson)


Lesenswert?

Hallo,

Windows 10 setzt beim öffnen eines COM-Ports als Standard immer den DTR 
Pin auf ON gesetzt, leider sitzt auf der anderen Seite ein Device das 
bei DTR High einen Reset auslöst...

Flusssteuerung steht auf "Keine", leider wird der DTR trotzdem beim 
öffnen des Ports gesetzt. Im Gerätemanager gibt's leider auch keine 
Einstellungsmöglichkeit und ein inventieren des DTR-Signals (beim 
FT232RL möglich) ist auch nicht Zielführend, da dann bei geschlossenem 
Port ein Dauer-Reset gemacht wird.

Gibt es da irgendeinen Trick wie ich den DTR abschalten kann?

Gruß
Michael

: Bearbeitet durch User
von Peter K. (chips)


Lesenswert?

Kabel verwenden ohne DTR...

von Michael S. (jackson)


Lesenswert?

Geht leider nicht, Gerät hat USB-Anschluss und internen FTDI Chip

: Bearbeitet durch User
von Hmmm (hmmm)


Lesenswert?

Michael S. schrieb:
> Gibt es da irgendeinen Trick wie ich den DTR abschalten kann?

Womit willst Du denn darauf zugreifen? Mit eigenem Code?

von Cyblord -. (cyblord)


Lesenswert?

Michael S. schrieb:
> Geht leider nicht, Gerät hat USB-Anschluss und FTDI Chip intern...

Dann muss das PC seitige Programm den DTR korrekt bedienen um das Gerät 
korrekt zu bedienen.

Erzähl doch einfach mal um was für ein Gerät es sich handelt und was du 
genau machen willst.

: Bearbeitet durch User
von Michael S. (jackson)


Lesenswert?

Cyblord -. schrieb:

> Dann muss das PC seitige Programm den DTR korrekt bedienen um das Gerät
> korrekt zu bedienen.
Ja entweder die Software, was sie nicht macht, oder irgend was 
zusätzliches was den DTR fest deaktiviert (deshalb die Frage)

> Erzähl doch einfach mal um was für ein Gerät es sich handelt und was du
> genau machen willst.
Spielt eigentlich bei dem generellen Problem (DTR macht Hardware Reset) 
keine Rolle, aber die Software nennt sich CANHacker und Hardware ist ein 
alter USB SLCAN-Adapter

UART Ansteuerung mit hterm, ZOC (DTR Signal off) möglich, aber nicht mit 
CANHacker, Windows Terminal, putty, TeraTerm (nur mit Macro setdtr 0)

Staus LED normal immer an, bei (Dauer)Reset aus, Problem liegt also 
definitiv am DTR Signal.

: Bearbeitet durch User
von Hmmm (hmmm)


Lesenswert?

Michael S. schrieb:
> Ja entweder die Software, was sie nicht macht, oder irgend was
> zusätzliches was den DTR fest deaktiviert (deshalb die Frage)

Wenn Du in der Lage bist, eigene Software zu schreiben, könntest Du die 
Anwendungen, die Du benutzen willst, mit einem virtuellen Port von 
com0com reden lassen. Am anderen Ende hängt dann Dein Tool, das zwischen 
virtuellem und echtem COM-Port Daten schaufelt und dabei DTR 
ausgeschaltet lässt.

Geht etwas durch die Brust ins Auge, aber sollte funktionieren.

von Christian M. (christian_m280)


Lesenswert?

Michael S. schrieb:
> Windows 10 setzt beim öffnen eines COM-Ports als Standard immer den DTR
> Pin auf ON

Sei froh, dass Windows das Gerät nicht als Maus erkennt! ;-)

Michael S. schrieb:
> UART Ansteuerung mit hterm, ZOC (DTR Signal off) möglich, aber nicht mit
> CANHacker

Also ist es nicht Windows sondern Dein CANHacker!

Hmmm schrieb:
> com0com

Ja!

Gruss Chregu

von Peter D. (peda)


Lesenswert?

Michael S. schrieb:
> Windows 10 setzt beim öffnen eines COM-Ports als Standard immer den DTR
> Pin auf ON gesetzt, leider sitzt auf der anderen Seite ein Device das
> bei DTR High einen Reset auslöst...

Das Problem scheint bekannt zu sein. Daher wird oft der Resetpin über 
einen Kondensator angesteuert. Es wird also nur ein kurzer Impuls 
ausgelöst, egal wie DTR steht.

von Maurice S. (wiminisse)


Lesenswert?

Mal eine Idee (habs jetzt nicht ausprobiert):

Kann man mittels FTProg (das Tool zum Konfigurieren der FTDI Chips) 
nicht die DTR Funktion im Chip deaktivieren?

Ich weiß ja nicht, wozu und wie oft der Reset gebraucht wird. Für den 
Fall (Firmwareupdate?) könnte man ihn ja wieder aktivieren.

von Cyblord -. (cyblord)


Lesenswert?

Michael S. schrieb:

>> Erzähl doch einfach mal um was für ein Gerät es sich handelt und was du
>> genau machen willst.
> Spielt eigentlich bei dem generellen Problem (DTR macht Hardware Reset)
> keine Rolle,

Doch spielt eine Rolle, weil es schlicht unklar ist, wie es überhaupt zu 
der Situation kommen kann.
Du tust so als ob das ein Windows Problem wäre. Ist es nicht.
So viele Geräte laufen über UART und nutzen den DTR und es geht.

> aber die Software nennt sich CANHacker und Hardware ist ein
> alter USB SLCAN-Adapter

> UART Ansteuerung mit hterm, ZOC (DTR Signal off) möglich, aber nicht mit
> CANHacker, Windows Terminal, putty, TeraTerm (nur mit Macro setdtr 0)

Dann kann das Gerät eben schlicht NICHT mit der SW CanHacker zusammen 
arbeiten. So einfach manchmal.

Maurice S. schrieb:
> Kann man mittels FTProg (das Tool zum Konfigurieren der FTDI Chips)
> nicht die DTR Funktion im Chip deaktivieren?

Es wird einen Grund geben dass das Gerät das DTR Signal nutzt.

: Bearbeitet durch User
von Rainer W. (rawi)


Lesenswert?

Peter D. schrieb:
> Daher wird oft der Resetpin über einen Kondensator angesteuert.
> Es wird also nur ein kurzer Impuls ausgelöst, egal wie DTR steht.

Das ändert aber nichts daran, dass dann beim Connect ein Reset ausgelöst 
wird.

Michael S. schrieb:
> UART Ansteuerung mit hterm, ... möglich

Bei hterm hängt es von der Programmeinstellung ab, ob es beim Connect 
DTR setzt oder nicht.

: Bearbeitet durch User
von Sigi S. (sermon)


Lesenswert?

Die Lösung lautet:

Schalter

von Cyblord -. (cyblord)


Lesenswert?

Sigi S. schrieb:
> Die Lösung lautet:
>
> Schalter

Für DICH lautet die Lösung: Lesen und Verstehen des ganzen Threads.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Michael S. schrieb:
> aber die Software nennt sich CANHacker und Hardware ist ein alter USB
> SLCAN-Adapter

Da offensichtlich CANHacker das DTR aktiv setzt, empfiehlt sich, den 
Autor dieser Software nach der Lösung zu fragen.

Beitrag #7919787 wurde vom Autor gelöscht.
von Michael S. (jackson)


Lesenswert?

Der DTR wird wohl nur für Firmwareupdates benötigt, die Idee mit 
temporärem deaktivieren im FTDI Chip EEProm oder der Treiber.ini hatte 
ich auch schon, aber außer den DTR zu inventieren habe ich keine andere 
Möglichkeit gefunden.

Die Software ist leider auch schon steinalt und wird schon viele Jahre 
nicht mehr gepflegt, stammt noch aus der Win XP/7 Zeit. Ich habe auch 
keine andere gefunden die das SLCAN Protokoll nutzt und freie Hardware 
über COM Port zulässt.

com0com werde heute abend mal probieren...

von Jim M. (turboj)


Lesenswert?

Michael S. schrieb:
> Flusssteuerung steht auf "Keine",

Das ist flash. Setzte die Flussteuerung mal auf "Hardware" oder 
"RTS/CTS".

Bei mindestens einer der Einstellungen lässt Windows die Steuersignale 
in Ruhe, es ist aber eben NICHT die Einstellung "keine".

Dafür muss aber der Code in der Anwendung selbst sauber programmiert 
sein. Oftmals gäbe es die Option aber irgendwo wenn der Code noch aus 
Zeiten von echten seriellen Schnittstellen stammte.

von Michael S. (jackson)


Lesenswert?

Alle getestet, gibt nur Xon/Xoff, Hardware und keine

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Jim M. schrieb:

> Michael S. schrieb:
>> Flusssteuerung steht auf "Keine",
>
> Das ist flash. Setzte die Flussteuerung mal auf "Hardware" oder
> "RTS/CTS".
>
> Bei mindestens einer der Einstellungen lässt Windows die Steuersignale
> in Ruhe, es ist aber eben NICHT die Einstellung "keine".

Das ist natürlich kompletter Unsinn. Die einzige Einstellung, bei der 
"Windows" (in Wirklichkeit natürlich: der Treiber) selber mit den 
Signalen hantiert, ist natürlich "Hardware". Ist logisch, weil der 
Hardware-Handshake nunmal über eben diese Leitungen abgewickelt wird und 
der Treiber deshalb natürlich nicht umhinkommt, daran rumzuspielen.

Bei allen anderen Einstellungen hat die Software, die den Port öffnet, 
die Kontrolle über diese Leitungen. Windows mischt sich da nicht weiter 
ein. Dementsprechend kann man auch nur bei der Software selber ansetzen, 
um da etwas am Verhalten dieser Leitungen zu ändern.

Ist das nicht möglich, bleibt nur noch physisches Abtrennen der 
Hardware. Sprich: Dreileiterstrippe als Verlängerung verwenden und alles 
ist gut.

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Michael S. schrieb:
> Alle getestet, gibt nur Xon/Xoff, Hardware und keine

Wenn die Software nicht an den Handshake Pins fummelt, kann man mit dem 
guten alten mode einiges einstellen.

mode -? zeigt die die Möglichkeiten.

: Bearbeitet durch User
von Helmut H. (helmuth)


Lesenswert?

mode hat bei USB-Seriell Adaptern Einschränkungen bei Handshake 
Signalen.
Kanns leider nur mit CP210x nachvollziehen, laut Auskunft einer 
gewöhnlich gut unterrichteten Software könnte dies beim FT232RL auch so 
sein.

Spannungsmessung am DTR pin(Low = 0V, High = 3,3V)
1
nach Einstecken             DTR High
2
mit teraterm öffnen         DTR Low
3
teraterm schließen          DTR High
4
mode com3 dtr=on            DTR kurzer glitch nach Low, dann sofort wieder High

mit python:
1
                                DTR High
2
import serial
3
ser = serial.Serial('COM3')     DTR Low
4
ser.dtr = False                 DTR High
5
ser.dtr = True                  DTR Low
6
ser.close()                     DTR High

Works as designed: Der Zweck von DTR ist es, einem angeschlossenen Gerät 
anzuzeigen, dass das Gerät (Computer) bereit ist, Daten zu 
kommunizieren.

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Helmut H. schrieb:
> mode hat bei USB-Seriell Adaptern Einschränkungen bei Handshake
> Signalen.
Kann sein, dass es mit manchen Einschränkungen gibt.
Ich benutze es wenn ich den DTR Reset von Arduinos unterbinden möchte, 
um z.B. um per copy Daten vom  PC zum Arduino zu spielen.

Funktionieren tuts mit 16U2 eines UNO und CH340 der Nano Nachbauten.

von Michael S. (jackson)


Lesenswert?

Mit "Mode" konnte ich leider auch keine funktionieren Einstellung 
machen...

Habe mit com0com zwei virtuelle Com Ports nur mit durchverbundenen TX/RX 
Steuerleitungen erstellt und da die sich ja nicht mit einem echten 
COM-Port verbinden lassen noch mit hub4com per Kommandozeile verbunden:

COM3 <-> COM6 com0com erstellte virtuelle Ports
COM4 FTDI-USB Device

\hub4com-2.1.0.0-386>hub4com --baud=115200 \\.\COM4 \\.\COM6
COM4 Open("\\.\COM4", baud=115200, data=8, parity=no, stop=1, octs=on, 
odsr=off, ox=off, ix=off, idsr=off, ito=0) - OK
COM6 Open("\\.\COM6", baud=115200, data=8, parity=no, stop=1, octs=on, 
odsr=off, ox=off, ix=off, idsr=off, ito=0) - OK
Route data COM6(1) --> COM4(0)
Route data COM4(0) --> COM6(1)
Route flow control COM6(1) --> COM4(0)
Route flow control COM4(0) --> COM6(1)
Started COM4(0)
Started COM6(1)

Aber sofort nach dem Befehl geht die Status LED im Gerät aus 
(Dauerreset)

: Bearbeitet durch User
Beitrag #7920589 wurde vom Autor gelöscht.
von Harald K. (kirnbichler)


Lesenswert?

Michael S. schrieb:
> Aber sofort nach dem Befehl

In dem sehe ich keinen Kommandozeilenparameter für DTR.

von Karl B. (gustav)


Lesenswert?

Mit Putty gehts doch angeblich:
https://www.asus.com/de/support/faq/1052775/
welches Terminalprogramm wird hier verwendet?
Wenn es mit USB-Dongle nicht geht, dann
"echte" COM Schnittstelle in den PC stecken.
2 Port PCI Express RS232 Serial Adapter Card
https://www.amazon.de/s?k=2+port+pci+express+rs232+serial+adapter+card&crid

ciao
gustav

: Bearbeitet durch User
von Michael S. (jackson)


Lesenswert?

Harald K. schrieb:
> In dem sehe ich keinen Kommandozeilenparameter für DTR.

Leider gibt es für DTR nichts was man setzen kann und bei den anderen 
Parametern habe ich on/off probiert, alles ohne Erfolg...

Karl B. schrieb:
> Mit Putty gehts doch angeblich:
Nein, mit Putty geht es auch nicht, sobald verbunden Dauerreset

> Wenn es mit USB-Dongle nicht geht, dann
> "echte" COM Schnittstelle in den PC stecken.
Wenn den Beitrag richtig gelesen hättest, wüsstest du das Device den 
FTDI Chip eingebaut hat...

: Bearbeitet durch User
von Helmut H. (helmuth)


Lesenswert?

Michael S. schrieb:
> Leider gibt es für DTR nichts was man setzen kann
1
>hub4com --help=pinmap
2
Usage:
3
  hub4com ... --create-filter=pinmap[,<FID>][:<options>] ... --add-filters=<ports>:[...,]<FID>[,...] ...
4
Wire options:
5
  ...
6
  --rts=[!]<s>          - wire input state of <s> to output pin RTS.
7
  --dtr=[!]<s>          - wire input state of <s> to output pin DTR.
8
9
  The possible values of <s> above can be cts, dsr, dcd, ring, break or
10
  connect. The exclamation sign (!) can be used to invert the value. If no any
11
  wire option specified, then the options --rts=cts --dtr=dsr are used by
12
  default.

Möglicherweise geht --dtr=!dsr, dann müsste nach Aufruf von hub4com das 
Gerät nicht in Dauerreset gehen.

: Bearbeitet durch User
von Michael S. (jackson)


Lesenswert?

--dtr scheint er überhaupt nicht zu kennen:

\hub4com-2.1.0.0-386>hub4com --baud=115200 --dtr=!dsr  \\.\COM4 \\.\COM6
Unknown option '--dtr=!dsr'

\hub4com-2.1.0.0-386>hub4com --baud=115200 --dtr=off  \\.\COM4 \\.\COM6
Unknown option '--dtr=off'

\hub4com-2.1.0.0-386>hub4com --baud=115200 --dtr=dsr  \\.\COM4 \\.\COM6
Unknown option '--dtr=dsr'

von Michael S. (jackson)


Lesenswert?

hub4com-2.1.0.0-386>hub4com  --create-filter=pinmap:--dtr=!dsr 
--add-filters=0,1:pinmap --baud=115200  \\.\COM4 \\.\COM6
COM4 Open("\\.\COM4", baud=115200, data=8, parity=no, stop=1, octs=on, 
odsr=off, ox=off, ix=off, idsr=off, ito=0) - OK
COM6 Open("\\.\COM6", baud=115200, data=8, parity=no, stop=1, octs=on, 
odsr=off, ox=off, ix=off, idsr=off, ito=0) - OK
Route data COM4(0) --> COM6(1)
Route data COM6(1) --> COM4(0)
Route flow control COM4(0) --> COM6(1)
Route flow control COM6(1) --> COM4(0)
Filters:
______
        \--------------->
COM4(0) |
________/<-{pinmap.OUT}<-

______
        \--------------->
COM6(1) |
________/<-{pinmap.OUT}<-

COM4(0) Event(s) [DSR] will be monitored
Started COM4(0)
COM6(1) Event(s) [DSR] will be monitored
Started COM6(1)
Error COM4(0): OVERRUN, total RXOVER=0 OVERRUN=1 RXPARITY=0 FRAME=0

scheint zu funktionieren, LED bleibt an, aber dann kommt Error nach 
kurzer Zeit.

von Hmmm (hmmm)


Lesenswert?

Michael S. schrieb:
> Error COM4(0): OVERRUN, total RXOVER=0 OVERRUN=1 RXPARITY=0 FRAME=0

Klingt danach, dass auf COM4 RTS/CTS-Handshake aktiviert ist und 
irgendwann der Buffer überläuft, weil CTS low ist.

Wie sieht die Verdrahtung in com0com aus?

von Michael S. (jackson)


Angehängte Dateien:

Lesenswert?

Eigentlich dürfte das egal sein, da RTS/CTS an jedem Port verbunden 
sind, aber mit ++octs=off funktioniert es jetzt endlich!!! Nur Schade 
das Windows dafür immer mit Startoption 7 (Treibersign. deaktivieren) 
gebootet werden muss...

Hier die funktionierende Config wenn USB-Device an COM4 hängt:

com0com wie auf dem Foto einstellen und in Adim Eingabeaufforderung:

hub4com  --create-filter=pinmap:--dtr=!dsr --add-filters=0,1:pinmap 
--baud=115200 --octs=off \\.\COM4 \\.\COM6

von Helmut H. (helmuth)


Lesenswert?

Probiers mal mit --octs=off

Teraterm  <-->  COM8 COM9 <--> Hub4Com <--> COM3 CP210x RX TX verbunden
1
>hub4com --route=All:All --no-default-fc-route=All:All --baud=38400 --octs=off \\.\COM3 \\.\COM8
2
COM3 Open("\\.\COM3", baud=38400, data=8, parity=no, stop=1, octs=off, odsr=off, ox=off, ix=off, idsr=off, ito=0) - OK
3
COM8 Open("\\.\COM8", baud=38400, data=8, parity=no, stop=1, octs=off, odsr=off, ox=off, ix=off, idsr=off, ito=0) - OK
4
Route data COM3(0) --> COM8(1)
5
Route data COM8(1) --> COM3(0)
6
No route for flow control
7
Started COM3(0)
8
Started COM8(1)
9
DTR hat 0 V
1
>hub4com  --route=All:All --no-default-fc-route=All:All --baud=38400 --octs=off --create-filter=pinmap:--dtr=!dsr --add-filters=0,1:pinmap \\.\COM3 \\.\COM8
2
COM3 Open("\\.\COM3", baud=38400, data=8, parity=no, stop=1, octs=off, odsr=off, ox=off, ix=off, idsr=off, ito=0) - OK
3
COM8 Open("\\.\COM8", baud=38400, data=8, parity=no, stop=1, octs=off, odsr=off, ox=off, ix=off, idsr=off, ito=0) - OK
4
Route data COM3(0) --> COM8(1)
5
Route data COM8(1) --> COM3(0)
6
No route for flow control
7
Filters:
8
________
9
        \--------------->
10
COM3(0) |
11
________/<-{pinmap.OUT}<-
12
13
________
14
        \--------------->
15
COM8(1) |
16
________/<-{pinmap.OUT}<-
17
18
COM3(0) Event(s) [DSR] will be monitored
19
Started COM3(0)
20
COM8(1) Event(s) [DSR] will be monitored
21
Started COM8(1)
22
DTR hat 3,3V

In beiden Fällen kann man viele Zeichen von Teraterm schicken, die auch 
wieder zurückkommen.

von Hmmm (hmmm)


Lesenswert?

Michael S. schrieb:
> Nur Schade das Windows dafür immer mit Startoption 7 (Treibersign.
> deaktivieren) gebootet werden muss...

Sollte aber nur bei der Treiberinstallation, also beim Anlegen eines 
neuen Port-Paars notwendig sein, oder?

Aber schön, dass es funktioniert. Ich hatte hub4com gar nicht mehr im 
Hinterkopf und hätte mir wohl unnötig ein eigenes Tool für die 
Verbindung zwischen com0com und dem echten Port gebaut.

von Helmut H. (helmuth)


Lesenswert?

Bitte meinen vorigen Beitrag ignorieren (konnte nicht mehr löschen), 
schön dass es funktioniert.

: Bearbeitet durch User
von Michael S. (jackson)


Lesenswert?

Hmmm schrieb:
> Sollte aber nur bei der Treiberinstallation, also beim Anlegen eines
> neuen Port-Paars notwendig sein, oder?

schön wär's, aber leider werden bei normalen Windows start dann die 
com0com Ports wegen nicht sign. Treiber als fehlerhaft angezeigt...

Danke erstmal an alle die Mitgewirkt haben, das Problem zu lösen!

von Helmut H. (helmuth)


Lesenswert?

https://www.serialtool.com/ hat signierten Treiber, der unter Win10 und 
Win11 bei mir problemlos funktioniert.
Ein Pärchen kann man in der Free-Version installieren, harmoniert auch 
mit hub4com.

von Michael S. (jackson)


Lesenswert?

Danke für den Tipp, tolles Tool!

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.