Forum: Mikrocontroller und Digitale Elektronik Frage zum UART Rahmen


von Max (Gast)


Lesenswert?

Hallo Community,

heute hatte ich eine Prüfung (uC-Technik) und bin schon die ganze Zeit 
am grübeln, ob ich die eine Aufgabe richtig gelöst hab. Vielleicht könnt 
ihr mir das kurz und schmerzlos verraten.

Folgendes:

a) Übertragen Sie 0111 0011 über den UART (8Bit  gerade Parität  ein 
Stoppbit)

Meine Antwort

StartBit|0|1|1|1|0|0|1|1|1(par)|StoppBit

hier bin ich mir relativ sicher. Aber bei b nicht ganz

b) das gleiche, jedoch nur 5 Bit im Rahmen

Meine Antwort

StartBit|0|1|1|1|0|1(par)|StoppBit|StartBit|1|1|1|1(par)|StoppBit

Im zweiten Frame bin ich mir nun nicht sicher. Immerhin hab ich da ja 
nur 3 statt 5 Datenbits übertragen... Ist das so richtig?

Dank euch, kann einfach nicht so lange warten, bis das Ergebnis kommt...
von ... (Gast)


Lesenswert?

Max schrieb:
> Immerhin hab ich da ja
>
> nur 3 statt 5 Datenbits übertragen... Ist das so richtig?

Dein UART darf keine verschiedenen Frames senden, also mal 5 Bit und mal 
3 Bit. Woher soll der Empfänger wissen was komm?
von Krapao (Gast)


Lesenswert?

a) UART überträgt LSB zuerst, deine Lösung MSB...

b) Nur 3 Bits im 2. Frame geht nicht, gibt Frame error. Du musst ein 
Padding mit 2 bzw. 1 Bit(s) machen. Ob du mit 0 auffüllst oder 1 ist 
wurscht. Bloß muss der Empfänger wissen, was du machst. 2 oder 1 Bits. 
Bei 5 Databits wird manchmal mit 1,5 Stoppbits gearbeitet: 1. Frame 1 
Stoppbit, 2. Frame 2 Stoppbits.

RS232 und http://de.wikipedia.org/wiki/RS-232
von Max (Gast)


Lesenswert?

Übertragen Sie 0111 0011 über den UART (5Bit  gerade Parität  ein
Stoppbit)

Ah... Mist... Also so wäre das richtig?


Start|1|1|0|0|1|1(par)|Stopp|Start|1|1|0|0(pad)|0(pad)|0(par)|Stopp


Eine Frage hätt ich dann noch:

Wie bzw. mit welchem Register teile ich dem Empfänger mit ob ich mit 0 
oder mit 1 auffülle? Oder ist das allgemein festgelegt?
von slow (Gast)


Lesenswert?

Nix Register, das macht Dein Protokoll.
von Max (Gast)


Lesenswert?

?? Jetzt bin ich überfordert! Welches Protokoll? Wenn ich einfach 
zwischen 2 Mega8 übertragen will? Kannst du das bitte genauer erklären?
von Karl H. (kbuchegg)


Lesenswert?

Max schrieb:
> ?? Jetzt bin ich überfordert! Welches Protokoll? Wenn ich einfach
> zwischen 2 Mega8 übertragen will? Kannst du das bitte genauer erklären?

Du vereinbarst einfach mit dir selber (oder mit dem anderen 
Programmierer), dass das so ist.
Solche willkürlichen Vereinbarungen nennt man 'Protokoll'.
von Karl H. (kbuchegg)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Max schrieb:
>> ?? Jetzt bin ich überfordert! Welches Protokoll? Wenn ich einfach
>> zwischen 2 Mega8 übertragen will? Kannst du das bitte genauer erklären?
>
> Du vereinbarst einfach mit dir selber (oder mit dem anderen
> Programmierer), dass das so ist.
> Solche willkürlichen Vereinbarungen nennt man 'Protokoll'.

Denn jetzt kommt nämlich der Zaubertrick. Er beginnt mit der 
Fragestellung: Woher weiß eigentlich der Empfänger, welches der beiden 
Bytes, die er empfängt das 1. Byte und welches das 2.te Byte ist, so 
dass er die Bits wieder richtig zusammensetzen kann?

Und da zeigt sich, dass dein Protokoll nicht besonders brauchbar ist. Es 
gestattet schlicht und ergreifend nicht, das in den Daten zu erkennen.

Der Sender möchte nacheinander die Bytes 11001110 und 00110100 
übertragen.
Der Empfänger bekommt eine Folge von 5-Bit Einheiten (in Bitform 
niedergeschrieben)

  11001 11000 00110 10000

woher weiß er dass
      11001 11000
und   00110 10000

jeweils zusammengehören? Die schlichte Antwort: er kann es nicht wissen.

Wenn das erste Paket verloren geht, dann erhält der Empfänger nur noch
  11000 00110 10000

und setzt daraus die 8-Bit Zahl

  11000001

zusammen. Das ist aber nicht das, was der Sender übertragen wollte! Noch 
nicht einmal annähernd.

Aber: Kein Mensch sagt, dass du 8 Bit in der Form 5 + 3 aufteilen musst. 
Du kannst mit der Gegenstelle vereinbaren (Protokoll!), dass du 8 Bit in 
der Form 4 + 4 aufteilst, wobei das erste Bit (das MSB) anzeigt, ob es 
sich um die ersten 4 Bit oder um die 2.ten 4 Bit handelt. Sagen wir mal, 
eine 1 im MSB zeigt an: das sind die ersten 4 Bit der 8-Bit Zahl

Dann werden die beiden Bytes 11001110 und 00110100 so von dir übertragen

     11100 01110 10011 00100

(natürlich immer ergänzt um Startbit, Stopbit, Parität, etc)

bekommt der Empfänger das hier zu Gesicht

01110 10011 00100

so kann er beim ersten 5-Bit Wert sofort anhand der 0 ganz links sagen, 
dass das die 2.ten 4 Bit sind. Erst im nächsten Paket ist ganz links 
eine 1 und er weiß: Huch, hier fängt eine neue Zahl an. Dieses Paket hol 
ich mir mal raus
    10011

schmeisse das Bit ganz links (das nur zur Erkennung diente) weg

    0011

und ich hab die obersten 4 Bit meiner 8 Bit Zahl. Das nächste Paket ist

    00100

was korrekt sein kann, weil ja ganz links eine 0 steht, welche es als 
die unteren 4 Bit kennzeichnet. Wieder das Bit ganz links weggeworfen

    0100

und an die bereits empfangenen 4 Bit dranngehängt

   00110100

und voila: da sind sie wieder: die 8 Bit in voller Pracht. Und das ganze 
selbst dann wenn das allererste 5-er Paket verloren gegangen ist.


Solche Vereinbarungen nennt man Protokoll. Und wie du siehst, kann man 
mit einem geschickt gewählten Protokoll zusätzliche Fähigkeiten in eine 
Übertragung einbauen.
von Dussel (Gast)


Lesenswert?

>?? Jetzt bin ich überfordert! Welches Protokoll? Wenn ich einfach
>zwischen 2 Mega8 übertragen will? Kannst du das bitte genauer erklären?
Der UART schreibt nur die Daten in das Empfangsregister, und zwar so 
viele Bit, wie eingestellt, bei dir also fünf. Wenn du nur drei Bit zu 
senden hast, musst du auffüllen, so dass es fünf werden damit der 
Empfänger-UART nicht meckert. Ob du nach deinen drei Bit noch zwei 
Einsen oder zwei Nullen (oder auch 10 oder 01) sendest, ist dem UART 
egal, solange er die eingestellten fünf Bit empfängt. Erst für das 
Programm ist es dann wichtig zu wissen, dass die letzten beiden Bit, die 
es aus dem Register holt, irrelevant sind.
von Max (Gast)


Lesenswert?

Alles klar Jungs. Jetzt hab ichs kapiert. Super Forum hier!
von Max (Gast)


Lesenswert?

Ach Mist. Eine Frage hab ich noch:

Muss zwischen den beiden Rahmen eigentlich ein Idle sein oder darf 
direkt vom StoppBit des ersten Rahmen zum Startbit des zweiten Rahmen 
übergegangen werden?
von Karl H. (kbuchegg)


Lesenswert?

Es kann direkt über gegangen werden.

Das Stopbit ist im Grunde ja nichts anderes als eine 'Idle'- Zeiten 
definierter Länge.
von Max (Gast)


Lesenswert?

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.