mikrocontroller.net

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


Autor: Der Micha (steinadler)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Detlev T. (detlevt)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: H.Joachim Seifert (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Der Micha (steinadler)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Peter (Gast)
Datum:

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

Autor: was-willst-du (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Der Micha (steinadler)
Datum:

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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.