Forum: PC-Programmierung 11-Bit Frame mit RS-232 übertragen


von Slowflyer (Gast)


Lesenswert?

Hallo,

ich möchte mit der RS-232 Schnittstelle des PC ein 11-Bit Frame
erzeugen (1xStart, 8xData, 1x Parity, 1xStop). Hat jemand eine Idee,
wie man das umsetzen könnte? Das Problem ist nämlich, dass die RS-232
Schnittstelle eines PCs soetwas nicht unterstützt (kein Startbit oder
9Bit Daten).

von Benedikt (Gast)


Lesenswert?

Laut Datenblatt ist das möglich, und ich habe das auch selber schon
gemacht.

Fully Programmable Serial Interface
Characteristics:
– 5-, 6 -, 7-, or 8-Bit Characters
– Even-, Odd-, or No-Parity Bit Generation
and Detection
– 1-, 1 1/2-, or 2-Stop Bit Generation

von Tobi H. (tobi-) Benutzerseite


Lesenswert?

Ein Startbit unterstützt die serielle Schnittstelle ganz sicher. Un die
von dir genannten 8datenbits sind auch kein Problem. Ich versteh
ehrlich gesagt das Problem nicht.
Das hier geht auf jeden Fall:
(1xStart, 8xData, 1x Parity, 1xStop)

von Slowflyer (Gast)


Lesenswert?

Hi,

danke für die schnellen Antworten. Ich möchte mit C# und .NET Framework
2.0 ein Programm erstellen, dass mit dem oben genannten Frame arbeitet.
bei den Einstellungen der rs-232 finde ich leider keine Einstellungen,
wo das Startbit aktiviert werden kann.

von Bri (Gast)


Lesenswert?

Weil das Startbit meiner Meinung nach immer gesendet wird.

von Rupplyn (Gast)


Lesenswert?

schau mal unter receivedbyte. steht standardmäßig 1 drin und kann nach
belieben verändert werden...

von Tobi H. (tobi-) Benutzerseite


Lesenswert?

rs232 ohne Startbyte sollte wegener der nötigen Syncronisierung garnicht
gehen. Das wird benötigt, um die Takte aufeinander einzustellen

von Johnny (Gast)


Lesenswert?

Start- und Stopbit werden in jedem Fall gesendet, sonst würde das ganze
gar nicht funktionieren.
Du musst also lediglich noch auf 8-bit Daten umschalten und das
gewünschte Parity aktivieren.

von Slowflyer (Gast)


Lesenswert?

Was passiert eigentlich wenn das Parity-Bit nicht richtig ist? Wenn ich
das richtig verstehe, wird der empfangene Wert mit einem
voreingestellten ersetzt (C# .NET 2.0). Meine Frage ist, kann man das
umgehen? Man könnte dann bei geeigneter Wahl der zu übetragenden
Zeichen eventuell ein Bit korrigieren. Oder z.B. das Parity-Bit als 9.
Bit übertragen.

von Tobi H. (tobi-) Benutzerseite


Lesenswert?

Ich kann mich nicht auf .net beziehen, aber bei der normalen WinAPI kann
man beim Initialisieren einstellen (im DCB), ob ein fehlerhaftes Zeichen
ersetzt wird oder bloss ein Error-Flag gesetzt wird (kann dann per
ClearCommError ausgelesen werden). Irgendwo gibt es ganz sicher auch
bei .net diese Option. Das Parity als 9. Bit ist prinzipiell machbar
aber sehr sehr langsam, da man dann jedes mal den Parity-Modus auf den
gewünschten umstellen muss (Mark/Space). Dadurch kann man immer nur
einzelne Bytes (oder Gruppen mit gleichem 9. Bit) senden und nicht mehr
grössere Blöcke auf einmal.

von Slowflyer (Gast)


Lesenswert?

Hi,

ich habe mal weiter gesucht und Folgendes gefunden:

http://www.tldp.org/HOWTO/Serial-HOWTO-21.html#ss21.3

Falls man ein 9-Bit langes Zeichen senden möchte muss man mit dem
Parity-bit arbeiten. In der serialPort-Klasse gibt es das Member
Parity. Dieses kann auf mark oder space eingestellt werden, dann ist es
immer gesetzt oder gelöscht (hat Tobi schon oben angemerkt). Es ist zwar
nicht die schnellste Möglichkeit, jedoch funktioniert es (senden geht
jedenfalls).

Für den Empfang hab ich die Einstellung jedoch noch nicht gefunden. Ich
werd nochmal suchen.

Gruß, Slowflyer

von Slowflyer (Gast)


Lesenswert?

Jetzt hab ich es gefunden.

MSDN ->
http://msdn2.microsoft.com/en-us/library/system.io.ports.serialport.parityreplace(VS.80).aspx

Dort heisst es, dass wenn der Parityreplace Member auf 0 gesetzt ist,
ist das Replace deaktiviert.

Gruß, Slowflyer

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.