Forum: Mikrocontroller und Digitale Elektronik RS232 Synchronisation


von Karl-alfred R. (karl-alfred_roemer)


Lesenswert?

Hallo zusammen,

nehmen wir an, ich schicke über RS232 (mit 8 Bit, 1 Stop-Bit, kein 
Parity) seeeeeehr viele 'U' (entspricht binär 01010101) ein, dann hat 
man also eine seeeeeehr lange Abfolge von immer gleich langen Phasen mit 
High-Pegel und mit Low-Pegel.  Kann es dann nicht irgendwann sein, dass 
der Empfänger nicht mehr weiß, an welchem Bit er gerade dran ist? 
Woher weiß der Empfänger nach vielen tausend Pegelwechseln noch, was 
Datenbit und was Stopbit ist?

Oder ist es so, dass der Empfänger nach 8 Bits immer damit rechnet, dass 
als nächstes das Stop Bit kommen MUSS und die darauffolgende steigende 
Flanke muss dann das Startbit sein, so dass quasi bei jeder steigenden 
Flanke des Startbits neu synchronisiert wird?

Danke und viele Grüße
Karl

: Bearbeitet durch User
von слюнотечение Тролль (Gast)


Lesenswert?

Das UART ist ein Stueck Hardware ohne Rechner, ein Schieberegister mit 
etwas Logik. Erkennt aber solche Fehler zuverlaessig. Start- & Stopbit 
muessen da sein.

von Karl-alfred R. (karl-alfred_roemer)


Lesenswert?

Danke für deine Antwort. Ich weiß, dass es zuverlässig funktioniert, 
aber meiner Intuition ist es noch nicht so richtig klar, warum das so 
gut funktioniert und wie die Synchronisation über viele tausend oder 
Millionen Bytes funktioniert. Aber ich denke meine mir selbst gegebene 
Erklärung wird schon stimmen. Sie muss nur noch vom Verstand ins 
Unterbewusstsein.

: Bearbeitet durch User
von Uwe K. (ukhl)


Lesenswert?

Das Stopbit ist als Pause zu betrachten und hat den Ruhe-Pegel (-3V bis 
-15V) was der Logischen 1 entspricht. Es kann beliebig lang sein, aber 
mindestes 1 Bit. Das Stopbit gibt dem Empfänger Zeit die Daten zu 
verarbeiten. Es muss auch nicht abgefragt werden.

Mit dem Startbit (+3V bis +15V -> Logisch 0) beginnt die Übertragung und 
das Timing erneut bis zum 8. Bit.

von Wolfgang (Gast)


Lesenswert?

Uwe K. schrieb:
> Das Stopbit gibt dem Empfänger Zeit die Daten zu
> verarbeiten. Es muss auch nicht abgefragt werden.

Ein vernünftiger Empfänger wird aber immer einen Framing Error auslösen, 
wenn es nicht die richtige Polarität hat.

Bei der Frage hier ging es doch um einen Datenstrom, bei dem sich Start- 
und Stopbit wegen des Dateninhaltes nicht von Datenbits unterscheiden, 
m.a.W. ein Empfänger, der auf den laufenden Datenstrom raufgeschaltet 
wird, hat keine Chance, Start- und Stop-Bit zu erkennen.

von lrep (Gast)


Lesenswert?

Karl-alfred Römer schrieb:
> dann hat
> man also eine seeeeeehr lange Abfolge von immer gleich langen Phasen mit
> High-Pegel und mit Low-Pegel.  Kann es dann nicht irgendwann sein, dass
> der Empfänger nicht mehr weiß, an welchem Bit er gerade dran ist?

Solange keine Störung auftritt, wird der Empfänger die Synchronisation 
nicht verlieren, aber wenn er sich in eine laufende Übertragung 
einschaltet, hat er tatsächlich keine Chance zu erkennen, wo ein Zeichen 
endet und wo es beginnt.
Andererseits wäre das ja auch  nicht besonders wichtig, denn er würde 
trotzdem lauter "U"s ausspucken.
Abhilfe könnte Einfügung eines Paritybits bringen, durch welches diese 
10101... Sequenz unterbrochen wird, oder die Wahl einer länger dauernden 
Stop-Polarität.
Bei den gebräuchlichen UARTs sind in Senderichtung regelmäßig 1  1,5 
oder 2 Stopbits programmierbar.
Dem Empfänger ists egal, er wartet so oder so nur auf 1 Stopbit.

Die früher verwendeten Fernschreibverbindungen wurden mit 1 Startbit, 5 
Informationsbits (Baudot Code), und 1,5 Stopbits betrieben, und 
erfahrungsgemäß dauerte es ungefähr eine halbe Zeile, bis sie sich mit 
einer laufenden Übertragung synchronisiert hatten und Kauderwelsch durch 
lesbaren Text ersetzten.

von TomA (Gast)


Lesenswert?

Hallo Karl-alfred,

bei asynchroner Übertragung (mit Start- und Stopbit) synchronisiert der 
Empfänger auf das Startbit. Dazu wartet er, ausgehend von der ersten 
Flanke nach dem Ruhepegel, eine halbe Bitzeit ab, um zeitlich die Mitte 
des Startbit zu treffen. Anschließend wartet er jeweils eine ganze 
Bitzeit, um die Mitte der folgenden Bit zu treffen. Mit dem/den 
Stopbit/s ist die Übertragung des Zeichens abgeschlossen, das Stopbit 
legt die Datenleitung auf Ruhepegel und kann, wie schon erwähnt, als 
Pause angesehen werden. Ein neues Zeichen wird wieder neu auf die Mitte 
des neuen Startbit synchronisiert. Auf diese Weise müssen die beiden 
Baudratengeneratoren nicht völlig gleich laufen, es muß nur 
sichergestellt sein, dass auch das letzte Bit des Zeichen noch innerhalb 
seiner Bitzeit auf der Leitung  gelesen wird. Bei 10Bit Zeichen (8Bit, 
Start-, Stopbit) sind +/-5% Takttoleranz möglich, da von der Bitmitte 
bis zu den Grenzen der Bitzeit jeweils 5% der Übertragungszeit des 
Zeichen liegen.

Bei synchroner Übertragung wird der Takt, auf einer eigenen Leitung, 
mitgeführt. Hier wird kein Start- und Stopbit benötigt, da Sender und 
Empfänger mit dem selben Takt arbeiten.

Bei phasensynchroner Übertragung werden Takt und Daten auf der gleichen 
Leitung übertragen.

Frohe Ostern. Tom

von Georg (Gast)


Lesenswert?

Karl-alfred Römer schrieb:
> nehmen wir an, ich schicke über RS232 (mit 8 Bit, 1 Stop-Bit, kein
> Parity) seeeeeehr viele 'U'

In dem Fall ist es tatsächlich unmöglich, Start und Stop zu bestimmen 
(solange nichts anderes kommt, ist das allerdings auch egal, sind eben 
lauter Us).

Es ist deshalb generell nicht günstig, asynchron ohne Pausen zu senden, 
besser ist es, Records mit Pausen dazwischen zu verwenden, was sich aber 
in den meisten Fällen sowieso ergibt, weil auf die Antwort gewartet 
wird. Eine Pause von mehr als einer Bytelänge führt zu einer sicheren 
Neusynchronisation auf das nächste Startbit.

Ein Problem ist das nur bei Geräten, die ohne Handshake pausenlos Daten 
senden, z.B. GPS-Empfänger. Da sollte man nach jeder Position eine Pause 
vorsehen.

Georg

von c-hater (Gast)


Lesenswert?

Karl-alfred Römer schrieb:

> nehmen wir an, ich schicke über RS232 (mit 8 Bit, 1 Stop-Bit, kein
> Parity) seeeeeehr viele 'U' (entspricht binär 01010101) ein, dann hat
> man also eine seeeeeehr lange Abfolge von immer gleich langen Phasen mit
> High-Pegel und mit Low-Pegel.

Ja, ein sehr schönes Muster, um Clients bei 8N1 bitratenmäßig zu 
synchronisieren.

> Kann es dann nicht irgendwann sein, dass
> der Empfänger nicht mehr weiß, an welchem Bit er gerade dran ist?

Jain.

Das Problem besteht im allgemeinen eher darin, daß der Client in einem 
zufälligen Moment nur bitmäßig auf das uniforme Sync-Muster "einrastet". 
Die Scheiße passiert bereits hier.

Solange das Sync-Pattern gesendet wird, wird der Client es auch korrekt 
empfangen. Erst bei Abbruch des Sync-Musters offenbart sich, ob der 
Cient auch an der korrekten Stelle des Datenworts eingerastet war. Das 
wird nur mit einer Wahrscheinlichkeit von 1:5 der Fall sein. Macht aber 
keinen Schlimmen, denn die Muster für den Abbruch sind vorhersagbar. 
Wenn der Sender des Sync-Musters dafür sorgt, daß nach Ende der 
Sync-Sequenz eine Weile (10 Bitzeiten=eine Bytezeit) lang Ruhe auf dem 
Bus ist und der Client die gültigen Abbruchmuster kennt, kann sich der 
Client sich dann auch bezüglich der Datenworte problemlos 
synchronisieren...

von Karl-alfred R. (karl-alfred_roemer)


Lesenswert?

Danke füre Eure Antworten.  So wie ich euch verstanden habe, ist alles 
kein Problem, solange der Empfänger nicht mit Daten zugeworfen wird oder 
der Datenfluss nicht unterbrochen oder zu stark gestört wird.  In diesen 
Fällen  müssten längere Pausen eingefügt werden.

Es gibt aber auch die Möglichkeit von 1,5 Stop-Bits.  Man erkennt an der 
graphischen Darstellung schon sehr schnell, wo die Stop-Bits sind. 
Damit könnte man auch mitten drin leicht neu synchronisieren, sofern die 
Signale nicht sehr unglücklich gewählt sind. Also z.B. unmittelbar vor 
oder nach den 1,5 Stop-Bits ein paar Datenbits mit 0 -Pegel.

Bei der Auseinandersetzung mit diesem Thema und dank der Antworten in 
diesem Thread in Verbindung mit weiterem Googeln ist mir jetzt auch 
klar, was das Handshaking bringen soll. Vorher war mir gar nicht so 
richtig klar, wo der Unterschied zwischen Handshaking und der 
Synchronisation  mit den Start und Stop-Bits ist. Jetzt habe ich es so 
verstanden, dass der Empfänger entweder per Hardware-Leitung, die auf 
High gesetzt wird, signalisiert, dass Daten empfangen werden können. Ist 
der Empfänger nicht bereit zum Datenempfang, weil z.B. der Puffer voll 
ist, wird die Leitung einfach auf Low gesetzt. Bei Software wird über 
die normale Serielle Leitung ein bestimmtes Byte gesendet, das der 
Sender dann als 'Pause' interpretiert. Mehr softwareaufwand und 
langsamer, aber dafür braucht man keine Extraleitung.
Kann man das so sehen?

von Klaus (Gast)


Lesenswert?

Karl-alfred Römer schrieb:
> Mehr softwareaufwand und
> langsamer, aber dafür braucht man keine Extraleitung.
> Kann man das so sehen?

Synchronisation kostet Bandbreite. Entweder du zweigst die von deinem 
Datenstrom ab, oder du verschenkst die Bandbreite, die dir die extra 
Leitungen bieten würden. Das ist aber grundsätzlich bei jeder 
Datenübertragung so.

MfG Klaus

von Uwe K. (ukhl)


Lesenswert?

Karl-alfred Römer schrieb:
> Kann man das so sehen?

Ja, was das Handshaking angeht. So wurde ein Serielles Modem oft mit 
115.200 Baud angesprochen obwohl es nur maximal 57.600 Baud beherrscht. 
Die Steuerleitungen (DTR RTS) haben den PC dann gesagt, wann es eine 
Pause machen muss. So funktioniert die Übertragung auch mit 2400 Baud 
obwohl man die Serielle mit 115.200 Baud anspricht.

Ein Stoppbit vom 1,5 hilft bei der Synchronisation nicht, wenn man sich 
mitten in der Übertragung einklinkt. Man muss schon mindestens ein 
komplettes Byte Pause machen. In der Praxis kommt es nie vor, dass man 
pausenlos Daten sendet. Auch ein GPS tut das nicht. Man sendet immer ein 
Packet und macht dann eine Pause von ein paar Sekunden.

Hier kann man das sehr gut sehen:
https://www.youtube.com/watch?v=Hb9VNauBOAI

Also auf keinen Fall eine Dauersendung machen.

von Georg (Gast)


Lesenswert?

Uwe K. schrieb:
> Also auf keinen Fall eine Dauersendung machen.

Eben - es gibt immer Muster, die eine falsche Synchronisation 
verursachen können, wenn sich der Empfänger irgendwann zuschaltet. Aber 
das sind eben nur bestimmte Muster, bei anderen entstehen Fehler 
(Framing Error), und deshalb synchronisiert sich das UART bei realen 
Daten nach einer Reihe von fehlerhaften Daten mal richtig und von da an 
läuft es bis zu einer Störung auf der Leitung. Erzwingen kann man die 
korrekte Synchronisation nur mit einer Pause länger als ein Byte.

Karl-alfred Römer schrieb:
> Bei Software wird über
> die normale Serielle Leitung ein bestimmtes Byte gesendet, das der
> Sender dann als 'Pause' interpretiert

NEIN - es wird NICHTS gesendet. Normgerecht heisst das Break.

c-hater schrieb:
> Solange das Sync-Pattern gesendet wird

vergiss das schnell wieder, da hat er was verwechselt - wohl mal 
unverstanden etwas über synchrone Übertragung gelesen. Für asynchron ist 
das irrelevant, es gibt keine Sync-Bytes, ein UART kann das garnicht 
(sonst wäre es ein USART).

Georg

von Karl-alfred R. (karl-alfred_roemer)


Lesenswert?

Danke nochmals für eure weiteren Antworten.

Beim längeren nachdenken kam in mir eine Frage auf: Wenn man 1,5 
Stop-Bits hätte, könnte man dann nicht jederzeit in die Synchronisation 
einsteigen? Man müsste ja nur waren bis zur ersten Lowlevel-Phase, die 
eine nicht ganzzahlige Dauer hätte (also z.B. 1,5 oder 2,5 oder 3,5 
oder ....) Die steigende Flanke danach MUSS dann auf jeden Fall die 
Steigende Flanke des Startbits sein.
Natürlich nur, falls ich keinen Denkfehler habe.  Kann man das so sehen?

von Klaus (Gast)


Lesenswert?

Karl-alfred Römer schrieb:
> Die steigende Flanke danach MUSS dann auf jeden Fall die
> Steigende Flanke des Startbits sein.
> Natürlich nur, falls ich keinen Denkfehler habe.  Kann man das so sehen?

Zwischen zwei Zeichen gibt es keine Zeitbeziehung. Wenn z.B. mit einem 
Stopbit gesendet wird, kann das nächste Zeichen auch in einem Abstand 
von 1,8 Bitzeiten kommen. Asynchron ist nun mal asynchron.

MfG Klaus

von Paul H. (powl)


Lesenswert?

Naja, ein Stopbit bedeutet, dass mindestens ein Stop-Bit gesendet 
wird. Wenn der Sender nicht hinterherkommt kann die Pausezeit auch mal 
länger dauern. 1 1/2 Stop-Bits bedeutet eine Pausezeit von mindestens 1 
1/2 Bit die wiederum eine Neusynchronisation nach einem gesendete Byte 
ermöglichen

von Karl-Alfred Römer (Gast)


Lesenswert?

Ach schade. Ich dachte, die Stopzeit wäre ziemlich exakt genau 1,5 Bit, 
wenn man 1,5 Stop-Bits einstellen würde.

Wenn das ein Mindestwert ist, könnte es ja auch 2 Stop-Bits sein, was 
dann wiederum auch zwei Datenbits sein könnten. :-(

Aber trotzdem Danke!

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.