Start- und Stopbit unterscheiden (RS232)

OP #1199789
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
#1199796
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
#1199800
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.
Gast #1199802
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.
OP #1199806
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?
#1199819
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.
Gast #1199833
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.
#1199843
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.
Moderator Persönliche Seite #1199850
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.
#1199873
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren