Forum: Mikrocontroller und Digitale Elektronik Start- und Stopbit unterscheiden (RS232)


von Der M. (steinadler)


Lesenswert?

Hallo ihr Lieben,

ich habe grad irgendwie ein Verständnisproblem. Wie kann man denn das 
Stopbit von einem Pegelwechsel innerhalb des Datenbytes erkennen?

Wie erkenn ich zum Beispiel bei einem Datenbyte von 0b01010101 ein 
Stopbit???

Es handelt sich dabei um 8N1

Vielen Dank schon mal.

Gruß
micha

von Detlev T. (detlevt)


Lesenswert?

Hallo Micha,

die Datenübertragung bei RS232 erfolgt nicht über Pegelwechsel, sondern 
über die Pegel selbst, die deshalb immer zur rechten Zeit da sein 
müssen. Es ist nur ein Pegelwechsel nötig, damit der Empfänger seine 
"Uhr" am Anfang danach synchronisieren kann, nur dafür sorgen Start und 
Stoppbit.

Gruß, DetlevT

von Peter (Gast)


Lesenswert?

wenn du nur den Datenstrom hast überhaupt nicht. Aber meist macht der 
Sender ja kurz eine pause. Und nach einer Pause kommt immer ein Start 
Bit.

von H.Joachim S. (crazyhorse)


Lesenswert?

An einem Pegelwechsel kannst du bei UART-Übertragung rein weg gar nichts 
erkennen (ausser dem Beginn des Startbits). Dort wird der Empfänger 
synchronisiert, ab da gibt die Zeit die Abtastzeitpunkt vor (Baudrate).
Und da man eben aus den Pegelwechseln nichts erkennen kann, füllt das 
Thema 10% der Beiträge hier: Sender und Empfänger müssen mit möglichst 
gleichem Takt arbeiten.

von STK500-Besitzer (Gast)


Lesenswert?

Die Datenübertragung der RS232 hat immer ein bestimmtes Datenformat:
Startbit - Datenbits - Stopbit.
Die Anzahl der Datenbits kann man variieren, wobei sie dem Sender und 
dem Empfänger bekannt sein müssen.
8N1 heisst ja nichts anderes als, dass die Übertragung aus insgesamt 10 
Bits besteht. Das Startbit erkennt man an einer Flanke (welche Richtung, 
weiß ich gerade nicht; vermutlich fallend). Die restlichen Bits zählt 
man dann einfach.
Wenn der Empfänger nicht schon lief und eine Übertragung mitten im Byte 
empfängt, dann empfägt er Mist. Dazu gibt es dann Protokolle, die eine 
entsprechende Fehlererkennung besitzen, eine Ebene über der eigentlichen 
Schnittstellen-Kommuunikation.

von Der M. (steinadler)


Lesenswert?

Mir gehts nicht um den Pegelwechsel an sich.

Das Problem hat Peter sich richtig erkannt, wie mir scheint.

Wenn ich Das Start-Bit erkennen will (Soft-UART) und schalte meinen 
Controller im Moment einer momentanen Übertragung ein, erkenne ich ja 
dann auch irgendwelche low-Bits im Datenbyte als Start-Bit, oder?

Ist die "Ruhezeit" irgendwo definiert?

von Peter (Gast)


Lesenswert?

Sicher kann man davon ausgehen das bei 8N1 nach 9 0-Bits und dann einer 
1 das die 1 das Startbit ist.

von was-willst-du (Gast)


Lesenswert?

Ganz einfach, Startbit ist vor dem Stopbit. Und hat noch eine andere 
Flanke. Also nach dem Startbit die Datenbits abzählen, evtl Parity 
mitzählen und dann kommt das Stopbit

von Karl H. (kbuchegg)


Lesenswert?

Micha R. wrote:

> Ist die "Ruhezeit" irgendwo definiert?

Nein.
Du hast das schon richtig erkannt. Wenn du in den Pegelstrom einer 
Leitung mittendrinn einsteigst, gibt es keine Möglichkeit eindeutig zu 
sagen: Hier beginnt das nächste Byte.

Wenn der Sender nicht regelmässig eine kleine Pause einlegt, empfängst 
du nur Mist.

Das Stoppbit an sich ist nur für den Sender interessant. Der Empfänger 
wertet es nicht aus. Praktisch gesehen zwingt die Anzahl der Stoppbits 
den Sender dazu, nach der Übertragung aller Bits eine kleine Pause 
einzulegen (aber nicht falsch verstehen. Diese Pause ist zu kurz um 
damit eine Synchronisierung zu erreichen). Die Idee dahinter war wohl, 
dem Empfänger ein klein wenig Zeit vor dem nächsten Byte zu verschaffen, 
damit er das eben empfangene Byte verarbeiten kann.

von Der M. (steinadler)


Lesenswert?

Muss ich denn dann immer davon ausgehen, dass in so einem Fall immer nur 
Mist empfangen wird?

von Peter (Gast)


Lesenswert?

ja, passiert sogar bei Hardware UART. Du kannst dann nur "raten" wenn 
also
das Stopbit nicht 0 ist dann, fange wo anders an. Nach genug daten und 
einen gescheiden algo sollte man es ermitteln können.

von Stefan E. (sternst)


Lesenswert?

Karl heinz Buchegger wrote:

> Das Stoppbit an sich ist nur für den Sender interessant. Der Empfänger
> wertet es nicht aus.

Klar tut er das (sollte es zumindest). Wenn der Empfänger im Bereich 
des(der) Stoppbit(s) einen Low-Pegel findet, gibt es einen 
Framing-Error.

> Die Idee dahinter war wohl,
> dem Empfänger ein klein wenig Zeit vor dem nächsten Byte zu verschaffen,
> damit er das eben empfangene Byte verarbeiten kann.

Sicher? Ich denke es geht eher darum, das nächste Startbit erkennen zu 
können. Die Kombination aus Stop- und Startbit garantiert, dass ein 
Zeichen immer mit einer Low-Flanke beginnt.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Karl heinz Buchegger wrote:

> Die Idee dahinter war wohl,
> dem Empfänger ein klein wenig Zeit vor dem nächsten Byte zu verschaffen,
> damit er das eben empfangene Byte verarbeiten kann.

Nein, das Stopbit erzwingt, dass das nächste Startbit einen
Pegelwechsel verursacht.  Auf diesen Pegelwechsel synchronisiert
sich der Empfänger neu.  Damit summiert sich ein Baudratenfehler
nur innerhalb der Bits eines Zeichens, aber nicht über die
Grenzen des Zeichens hinaus.

Beim mechanischen Fernschreiber hat das Stopbit in der Tat den
Decoder angehalten (mechanisch).  Die Flanke des Startbits hat
ihn dann über einen Magneten wieder freigegeben.  Ja, die Baudot-
Kodierung wurde damals wirklich komplett mechanisch abgetastet. ;-)

Aus diesen Zeiten dürfte es auch stammen, dass man anfangs zwei,
später 1,5 Bitzeiten für das Stopbit benutzt hat: andernfalls
riskiert man, dass bei leichter Differenz der Baudraten (d. h.
der Drehzahl der Motorwellen) der Empfänger noch nicht wieder
bereit ist, ein Startbit zu erkennen.

von Peter D. (peda)


Lesenswert?

Micha R. wrote:
> Muss ich denn dann immer davon ausgehen, dass in so einem Fall immer nur
> Mist empfangen wird?

Ja.

Man kann aber zur Synchronisation ein Byte senden, welches keinen 
inneren Pegelwechsel hat, z.B. 0xFF. Dann wird das nächste Startbit 
immer richtig erkannt.
Ich benutze das z.B. in meinem Bootloader.


Peter

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.