COM-Port ansteuern (11 Bits)
-
Hallo,
ich muss ein Gerät mittels COM-Port ansteuern.
Aber in der Protokoll-Beschreibung wird aber ein "ungewöhnliches" Byte-Format angegeben:
Baud Rate:96001 Start Bit
8 Data Bits
1 Mode Bit
1 Stop Bit
--------------
11 Bits Totaldiese Mode Bit "stört" mich aber, da weiss ich nicht wie ich das umsetzen soll.
Hat jemand einen Tipp?
-
Mach halt 2 Stop-Bits ist dann halt immer "1"...
-
oder 1 parity - bringt wenigstens etwas abwechslung ins spiel
jemand vielleicht eine kostruktive idee?
Edit: Ok, ganz so falsch war meine Idee nicht:
1 Parity Bit (dann immer umstellen MARKPARITY bzw SPACEPARITY)
werd ich mal testen
-
Das Mode wird vermutlich das Parity sein, oder? Und zwar anstatt "Mode" sollte es wohl "Mark" heissen, oder?
-
Nein, hier ein Auszug aus der Protokollbeschreibung:
Baud Rate: 9600 NRZ
Serial Bit Format: 1 Start Bit
8 Data Bits
1 Mode Bit
1 Stop Bit
11 Bits TotalThe mode bit differentiates between ADDRESS bytes and DATA bytes. ADDRESS
bytes must be read by all peripherals, DATA bytes are only read by the peripheral that
has been addressed.
The mode bit is set (logic one) to indicate an ADDRESS byte, and not set (logic zero) to
indicate a DATA byte.
-
9 Bit Daten, wobei das 9. Bit festlegt ob es sich um eine Adresse oder Datum handelt.
Das ist eine typische Einstellmöglichkeit bei vielen in µC verbauten UARTs.
("µC" = embedded Mikrocontroller)
Schon der "uralte" Veteran 8051 konnte mit diesem Format umgehen.Dummerweise sind normale PC-Hardware alle mit einem 16C550-kompatiblen UARTs ausgestattet, die nur bis max. 8 Datenbits umgehen können.
Das ist "by design", Punkt.
Auch die modernen ARM-µC haben solche 16C550-kompatiblen UARTs und können somit auch nur max. 8 Datenbits als solche übertragen.Allerdings kann ein solcher UART doch mit einem Trick 9 Datenbits senden, unter Zuhilfenahme des Paritybits.
D.h. das Paritybit repräsentiert das neunte Datenbit.
Das bedeutet zwangsläufig auch, daß 9 Datenbits PLUS Paritätsbit natürlich nicht mehr geht, was aber laut Protokollbeschreibung von Tachyon76 nicht der Fall ist.Abhängig vom 9. Datenbit (also 0 oder 1) wird vor dem Senden eines jeden einzelnen Bytes (also Datenbits 1 bis die Parität auf "MARK" (1) oder auf "SPACE" (0) eingestellt.
Damit könntest Du das Gerät steuern.
Unabhängig davon, Nilsen Consulting hat für 150 US$ einen seriellen Treiber (serial.sys) im Angebot, der 9 Datenbits auf diese Art und Weise realisiert, ohne daß der Programmierer sich damit abplagen muß:
http://www.ncon.com/9bit.shtmlHTH,
Martin
-
Das hat jetzt aber nichts mit WinApi zu tun!
-
So schwer ist das ja auch nicht, oder?
Wenn Du eine Adresse schicken willst, musst Du halt vorher die Port-Settings auf Maerk setzen; ansonsten auf Space...