Kai schrieb:
> Gehe ich
> richtig in der Annahme, dass ich den Empfang auf 9 Bit konfigurieren
> kann, Bit 9 ignoriere und nur das letzte Stoppbit auswerte?
Du brauchst es gar nicht auszuwerten. Ich kenne zwar das DMX-Protokoll
nicht, aber da du von 9 Bits schreibst, denke ich dass es sich um 8
Datenbits plus Paritätsbit handelt.
Das Paritätsbit bekommt der Anwender normalerweise gar nicht zu Gesicht,
sondern es wird von Sende-Maschinerie erzeugt und von der
Empfangsmaschinerie lediglich auf Richtigkeit überprüft.
Diese Maschinerien bestehen meist aus recht einfacher Hardware, aber da
sie aus nicht viel mehr als einem Zähler und einem Schieberegister
bestehen, kann man sie auch leicht in Software implementieren.
Beim Empfang eines Zeichens spielt sich etwa folgendes ab:
Am Anfang ruht die Leitung, das entspricht einer logischen 1.
Zu irgend einem x-beliebigen Zeitpunkt fängt der Sender an zu senden,
und das kündigt er an, indem er das Startbit, eine logische 0 sendet.
Dieser Übergang 1-->0 wird vom Empfänger erkannt und nun wartet er 1,5
Bitzeiten bis er die Leitung wieder testet und das Ergebnis als erstes
Datenbit in das Empfangsregister schiebt.
1,5 Bitzeiten weil dann die Abtastung in der Mitte des ersten Datenbits
erfolgt. Wie lange eine Bitzeit dauert, hat der Pogrammierer der
Maschine bei der Initialisierung, z.B. 2400, 4800, 9600 etc.,
mitgeteilt.
Danach tastet der Empfänger noch 7 Mal im Abstand von einer Bitzeit ab
und schiebt so die übrigen 7 Datenbits in das Ergebnisregister.
Wenn man den Sender (und hoffentlich auch dem Empfänger) bei der
Initialisierung mittels der Angabe "PE" ode "PO" angewiesen hat das
Paritybit zu erzeugen (und zu prüfen), wird anschliessend noch die
Quersumme der Einsen im Datenwort ermittelt und als 1 oder 0 übertragen,
und das wird beim Empfänger mit der dort ermittelten Quersumme des
Datenbytes verglichen.
Das ist dein 9-tes Bit, das du normalerweise aber nicht zu sehen
bekommst.
Mit dieser "Prüfsumme" kann man erkennen, ob die Übertragung gestört
wurde, und falls das der Fall ist, wird in einem Statusregister ein
"Parity-Error" signalisiert.
Nach dem all diese Bits im Kasten sind, wartet der Empfänger noch eine
weitere Bitzeit, weil dann wieder der Ruhezustand auf der Leitung
herrschen muss.
Der Sender sendet dazu mindestens ein Stopbit, bevor er das nächste
Startbit schickt, oder er hört einfach mit der Sendung auf.
Erst jetzt signalisiert die Empfangsmaschinerie dem Programm, dass ein
Datenbyte zum Abholen bereit steht.
Das auswertende Programm sollte sich nun aber zuerst das Statusregister
ansehen, ob dort ein "Parity Error" (Zahl der Einsen stimmt nicht) oder
ein "Framing Error" angezeigt wird, denn dann besteht das Datenbyte
wahrscheinlich nur aus Müll.
Abholen muss man es meist trotzdem.
Zu dem "Framing Error" kommt es, wenn kein Stopbit zur erwarteten Zeit
auf der Leitung ist.
Das kann passieren, wenn man den Empfänger im eine bereits laufende
Übertragung einschaltet, da er ja ein Startbit nicht von einer regulären
0 zu unterscheiden vermag.
Normalerweise synchronisiert sich der Empfänger bald von selbst, aber
man kann das beschleunigen, indem man mit 2 Stoppbits anstatt nur einem
arbeitet.
Der Empfänger braucht davon nichts zu wissen, er wartet immer nur auf
das erste Stopbit.
Der Preis für 2 Stopbits ist eine insgesamt etwas geringere
Übertragungsgeschwindigkeit.
Hier steht das Ganze noch mal in Farbe. Und bunt ;-)
https://de.wikipedia.org/wiki/Universal_Asynchronous_Receiver_Transmitter