Forum: PC Hard- und Software Suche (serielles) Terminalprogramm mit (9Bit) Parity ON/OFF Optionen


von Roger P. (Firma: myself) (roland69) Flattr this


Lesenswert?

Hallo

bin auf der Suche nach einen Terminal Program (auf WIndows10 läuft) was 
mit einen selbst definierten Datenstring zur Seriellen ( USB Com Port) 
rausschickt.

ABER - ich muss bei jedem Bit die Partiy setzen oder löschen können.
Beispiel 2 Byte die in nacheinander gesendet werden.  9600Baud 
9bit/parity

12H 12H

das erste Byte mit partity=1 und das zweite Byte mit Parity = 0
Die beiden Bytes sollen als sequenz gespeichert sein und auf Knopdruck 
gesendet werden. Also dann die beiden Bytes raus auf der COM...

oder anders Beispiel 10 bytes: das erste und letzte Byte mit parity = 1 
udn die anderen mit parity = 0


HINWEIS:  Habe Docklight. Da geht das - nur das Programm hat einen Bug. 
(ist gemeldet)
Docklight baut eine Pause von 50-60ms zwischen die beiden Bytes im 
ersten Beispiel ein. =>
Logic Analyser !  Grrr


mfg
Roger

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

So ein Programm müsstest Du Dir schon selbst schreiben.

Der Sinn ist vermutlich das Nachbilden von 9N1, was manche 
Microcontroller verwenden können.

Nachteil: Die Sache wird sehr, sehr langsam, denn für jedes einzelne zu 
übertragende Byte muss jeweils die UART neu initialisiert werden.


Alternative: Schnapp' Dir einen Arduino o.ä. µC mit zwei UARTs, verbinde 
die eine davon mit dem PC und lass' darauf ein normales Protokoll 
(8n1) laufen.

Du sendest auf dieser Schnittstelle ein spezielles Textprotokoll, für 
jedes zu sendende Nutzbyte sendest Du vorher ein zusätzliches Byte, das 
angibt, ob mit gerader oder ungerader Parity gesendet werden soll:

Nutzdaten: "Hallo"
zu senden: "EHOaElOlEo"

Der µC empfängt dieses Protokoll und schaltet jeweils seine UART um.

Wenn der µC eine 9-bit-fähige UART hat, kann statt der zu verwendenden 
Parity auch gleich der Wert des zu sendenden 9. Bits angegeben werden:

Nutzdaten: "Hallo"
zu senden: "1H0a1l0l1o"

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Roger P. schrieb:
> Docklight baut eine Pause von 50-60ms zwischen die beiden Bytes im
> ersten Beispiel ein. =>

Das liegt nicht an Docklight, sondern am USB-Protokoll/Adapter. 
Docklight wird zwischen den einzelnen Bytes die Schnittstellenparameter 
umschalten mittels SetCommState, woraufhin der Treiber für den Adapter 
einen entsprechenden Befehl an den Adapter über USB sendet. Falls es ein 
USB-CDC-ACM-Adapter ist, ist das der SetLineCoding-Request. Das ist dann 
einiges an Hin-Und-Her. Proprietäre Protokolle wie vom FT232 werden es 
wohl ähnlich machen.

Die Lösung ist wie von Harald vorgeschlagen, oder du baust dir mit einem 
USB-fähigen Mikrocontroller einen speziellen USB-Serial-Adapter; der 
könnte z.B. immer 2 Bytes in ein 9-Bit-Frame zusammenfügen o.ä. Besser 
natürlich mit einem eigenen USB-Protokoll und einem eigenen PC-Programm 
statt des Terminals.

von Roger P. (Firma: myself) (roland69) Flattr this


Lesenswert?

Hallo,

Das passiert auch auf einen  Rechner (Desktop) mit "fest" eingebauter 
"richtiger" RS232 Schnittstelle.

daher glaube ich nicht das es ein Problem mit USB/Seriell Convertern 
ist.

mfg
Roland

von Mario M. (thelonging)


Lesenswert?

Auch da muss die Schnittstelle per IOCTL umgeschaltet werden.

von Roger P. (Firma: myself) (roland69) Flattr this


Lesenswert?

Hallo,
bin nicht der "PC Programmierer Mensch" ... aber das dauert 60ms? Das 
ist ja eine gefühlte Ewigkeit....

Roger

: Bearbeitet durch User
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Roger P. schrieb:
> bin nicht der "PC Programmierer Mensch" ... aber das dauert 60ms?

Es ist halt nicht darauf optimiert, weils das sonst keiner so braucht. 
Der Request muss erst durch alle Schichten von OS und Treiber durch und 
wieder zurück. Mit etwas "Glück" wird zwischendurch noch irgendein 
anderer Thread bearbeitet, dann wird es weiter verzögert. Dazu kommt 
dass die Bytes einzeln per USB übertragen werden, das hat einfach eine 
Menge Overhead. Wenn man mehr Bytes auf einmal sendet, ist die 
Übertragung viel effizienter.

Haben die Nachrichten immer die gleiche Struktur/Länge? Das würde die 
Sache vereinfachen.

: Bearbeitet durch User
von Christoph Z. (christophz)


Lesenswert?

Roger P. schrieb:
> Die beiden Bytes sollen als sequenz gespeichert sein und auf Knopdruck
> gesendet werden. Also dann die beiden Bytes raus auf der COM...
>
> oder anders Beispiel 10 bytes: das erste und letzte Byte mit parity = 1
> udn die anderen mit parity = 0
[...]
> Docklight baut eine Pause von 50-60ms zwischen die beiden Bytes im
> ersten Beispiel ein. =>
> Logic Analyser !  Grrr

Hast du einen grossen Logic Analyser, als so einer wo man 
Erweiterungskarten einbauen kann?
Wenn ja, dann bau dir da einen Pattern Generator ein. Da kannst du dir 
diese paar Sequenzen ablegen und sie dann per Trigger senden lassen.

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.