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:9600

    1 Start Bit
    8 Data Bits
    1 Mode Bit
    1 Stop Bit
    --------------
    11 Bits Total

    diese 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 Total

    The 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.shtml

    HTH,
    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...


Anmelden zum Antworten