Com Port DTR Pin unter Windows deaktivieren?

OP #7919676
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

OP #7919691
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.

#7919693
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.

#7919735
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.

#7919743
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.

#7919752
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.

#7919759
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.

Beitrag #7919787 wurde von einem Moderator gelöscht.
OP #7919854
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...

#7919856
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.

(Firma: 1984now) #7919866
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.

#7919957
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.

OP #7920541
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)

Beitrag #7920589 wurde von einem Moderator gelöscht.
OP #7920733
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...

#7920742
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.

OP #7920757
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'

OP #7920776
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:


1
    \--------------->

COM4(0) | ________/<-{pinmap.OUT}<-


1
    \--------------->

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.

OP #7920843
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

Angehängte Dateien:
#7920845
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.

#7920846
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren