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).
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
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)
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.
schau mal unter receivedbyte. steht standardmäßig 1 drin und kann nach belieben verändert werden...
rs232 ohne Startbyte sollte wegener der nötigen Syncronisierung garnicht gehen. Das wird benötigt, um die Takte aufeinander einzustellen
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.
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.