mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Grundlagen UART: TX & RX Fehler


Autor: Icke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich versuche gerade die TX & RX-Fehler einer UART-Kommunikation zu 
verstehen. Das mit dem RX verstehe ich ja noch, dass wenn der 
Empfangstakt nicht 100% stimmt es zu Fehlinterpretationen des 
empfangenen Datenstroms kommt. Warum in einigen Datenblättern auch ein 
TX-Fehler angegeben ist verstehe ich jedoch nicht.

Ziel ist es, dass ich nicht nur die Grundlagen verstehe, sondern ich 
möchte/soll die Paketfehlerrate (PER) dieser Kommunikation berechnen. 
Und da tappe ich gerade völlig im Dunkeln, obwohl ich schon eine Weile 
rumgoogelt habe. Dabei bin ich jetzt aber auf dieses Forum gestoßen und 
bin voller zuversicht, dass ihr ein wenig Licht in die Dunkelheit meiner 
Unwissenheit bringen könnten.

Danke schon mal im Voraus für eure Hilfe!

Gruß
Icke

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Warum in einigen Datenblättern auch ein TX-Fehler angegeben ist verstehe
> ich jedoch nicht.
Ich auch nicht, weil ich kein entsprechendes DB habe... Magst du uns 
eins von deinen zeigen?

Ralf

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Icke schrieb:

> Warum in einigen Datenblättern auch ein
> TX-Fehler angegeben ist verstehe ich jedoch nicht.

Wenn bei einer Takterzeugung für eine UART beispielsweise 1,3% Fehler 
drinstehen, dann heisst das nicht, dass 1,3% aller Bits oder Bytes 
fehlerhaft sind, sondern dass der Takt um 1,3% neben dem Sollwert liegt.

Diesen Wert muss man auf beiden Seiten berücksichtigen, ggf. mit 
Vorzeichen. Wenn der Sender in der Frequenz um 1,3% zu hoch und der 
Empfänger um 1,7% zu tief liegt, dann beträgt der Gesamtfehler 3% und es 
wird schon arg knapp. Sind beide Vorzeichen gleich, dann sind es nur 
0,4% und das reicht locker.

Autor: Icke (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ein Datenblatt. Gerne.
Siehe Abschnitt 15.3.13, Seite 480.

Das sind zwar ein Berg von Gleichungen angegeben. Aber verstehen tue ich 
es noch nicht so recht.... ;(

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Icke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Danke für den Link. Allerdings stand da nicht mehr drin, als ich schon 
wusste ...

Die Frage ist, warum auch für TX ein Fehler angegeben ist, der zusdem 
vom RX-Fehler abweicht
UND
wie man die Paketfehlerwahrscheinlichkeit berechnet.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Die Frage ist, warum auch für TX ein Fehler angegeben ist...
Ganz einfach, übliche Baudraten sind ja "krumme Werte", sieht man sehr 
schön, wenn man den Kehrwert der Baudrate verwendet, um auf eine Bitzeit 
zu kommen. Beispielsweise ist eine Bitzeit bei 9600 Bd = 104,166µs, also 
sehr krumm.

Beim Empfang wird die Rx-Leitung üblicherweise mit dem 16fachen der 
eingestellten Baudrate abgetastet (beim 8051, ich vermute, bei AVR etc. 
ist es genauso). Warum der Verweis auf die Empfangsschaltung wichtig 
ist, siehst du weiter unten wg. der Formel. Hier also eine entsprechende 
Beispielrechnung für einen Standard-8051, Baudrate über Timer 1, Teiler 
= 1 -> entspricht höchstmöglicher Baudrate:

Fosc = 22.1184MHz
Systemtakt = Fosc / 12
gewünschte Baudrate = 115200 Bd

Ergibt:

22118400  12  16 / 1 = 115200

Deswegen braucht man diese "krummen" (Baudraten-)Quarzwerte. Hat man 
keinen Baudratenquarz zur Hand und muss einen glatten Wert verwenden, 
ergeben sich eben auch schon Fehler bei der Sendebaudrate, da diese von 
sich aus durch den internen Aufbau fehlerbehaftet ist.

Ralf

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
argl
da hat's wohl n Teil der Formel verklopft, sorry. Also, die o.g. Formel 
gilt für den Empfang, aber der Sendeteil des µCs arbeitet ja mit dem 
gleichen Oszillator, daher auch mögliche Fehler beim Senden. Und die 
Toleranzen der Quarze etc. fallen auch noch n bisschen mit ins 
Gewicht...

Ralf

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Ralf (Gast)

>Toleranzen der Quarze etc. fallen auch noch n bisschen mit ins
>Gewicht...

Kaum. Selbst ein Gurkenquarz mit +/-100ppm =0,01% hat keinerlei 
praktischen Einfluß.

MfG
Falk

Autor: Icke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso.
Wenn der Sendetakt nicht 100% passt kann es naürlich dennoch zu 
Empfangsfehlern kommen, auch wenn der RX-Takt 100% stimmen würde. ;)

Und wie sieht es jetzt mit der Fehlerwahrscheinlichkeit aus?

Autor: Icke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
BTW:
Ich schaffe es noch immer nicht mit den angegeben Gleichungen auf die in 
der Tabelle angegeben Fehlerraten zu kommen.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Icke schrieb:

> Und wie sieht es jetzt mit der Fehlerwahrscheinlichkeit aus?

Damit haben diese Zahlen und Formeln rein garnichts zu tun. Die 
Fehlerwahrscheinlichkeit lässt sich auch nicht allein aus der Baudrate 
errechnen, den das Zeitverhalten der Pegelwandler/Transceiver spielt 
dabei auch eine Rolle.

> Ich schaffe es noch immer nicht mit den angegeben Gleichungen auf die in
> der Tabelle angegeben Fehlerraten zu kommen.

Ich habe zwar dieses Manual nicht gelesen, bin aber einigermassen 
sicher, dass du so etwas wie Fehlerraten darin nicht finden wirst. Nicht 
jede Prozentangabe ist eine Wahrscheinlichkeit.

Autor: Icke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja gut, die Fehlerwahrscheinlichkeit nciht.
Aber eben den TX und RX Fehler, der -wie wir es in dieser Diskussion 
gelernt haben- durch den Clock kommt.

Und dafür sind in der Datenblatt Gleichungen angegeben....

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, ich habe mal ins Manual reingesehen. Ist etwas komplizierter als bei 
anderen UARTs.

UARTs sind traditionell meist recht simpel gestrickt. Der Baudratentakt 
wird durch 16 geteilt - manchmal ist auch 8 möglich. Daraus ergibt sich 
die verwendete Baudrate. Mit dem Startbit wird dieser 16-er Zähler 
gestartet und auf Halbzeit wird das Bit ausgewertet, oft als 
Mehrheitsentscheid bei 3 Abtastungen um diese Halbzeit herum.

Nachteil dieser Methode ist, dass sich aus "geraden" Taktfrequenzen wie 
1MHz selten die üblichen Baudraten genau genug ergeben, weshalb der 
taditionelle Ansatz in der Verwendung von Baudratenquarzen für die 
Taktgenerierung besteht. Das passt nicht jedem: Wer mal versucht hat, 
38400bd asynchron und 500Kbps CAN unter einen Hut zu bringen weiss was 
ich meine - eine der beiden Rate kann nicht exakt sein.

Neuere Controller grösserer Ordnung verwenden deshalb nicht selten eine 
Baudratengenerierung mit fraktionalem Vorteiler. Wie das exakt 
funktioniert ist dort selten angegeben, auch eine exakte Fehlerrechung 
findet sich selten. Was den Vorteil hat, dass man sich da nicht 
durchwühlen muss. Und den Nachteil hat, dass man den Faktor 16 immer 
noch im Boot hat, also bei niedrigen Taktfrequenzen trotzdem nur 
niedrige Baudraten hinbekommt. 4800bd bei 32KHz Takt sind da nicht drin.

TI ist mit dem USCI des MSP430 einen deutlich anderen Weg gegangen. 
Sowohl in der Technik, als auch in der Dokumentation. Die dabei 
verwendete Technik spart aufgrund niedriger Taktfrequenzen Strom, ist 
aber nicht wirklich leicht verständlich und leider auch strunzdumm 
erklärt. Aber man kann 4800bd bei 32KHz Takt verwenden.

Vollständig verstanden habe ich die Sache in der Kürze auch nicht, aber 
mir scheint, dass sich anders als bei der traditionellen Methode, deren 
Abweichung sich leicht als prozentualer Taktfehler rechnen lässt, bei 
der TI Methode ein Jitter ergibt. Die gesendete Signalflanke wie auch 
der Abtastpunkt beim Empfang landen je nach Quelltakt, Parameter und 
Bitposition mal vor mal nach dem eigentlich korrekten Zeitpunkt.

Beim Empfang gibt es dann zusätzlich noch einen Zeitfehler, der durch 
die Abtastung des Signals entsteht. Das Startbit wird nicht sofort mit 
der negativen Flanke verwendet, sondern das Signal wird zunächst mit dem 
Takt synchronisiert und dann erst wird die Änderung zur Synchronisation 
der Zeitbasis verwendet. Dadurch entsteht ein zusätzlicher Fehler von 
maximal einem Taktzyklus.

Das ist zwar traditionell auch nicht anders, aber wenn der Sample-Takt 
das 16fache der Baudrate beträgt, dann ist dieser Fehler wenig relevant 
und wird pratisch nie betrachtet. Bei einem 4-er Takt (9600bd bei 32KHz) 
ist dieser Abtastfehler jedoch nicht mehr zu vernachlässigen. Darin 
liegt der Grund für höhere Fehlerwerte bei Rx als bei Tx, und weshalb 
dies abhängig vom Taktverhältnis ist.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Icke schrieb:

> Ziel ist es, dass ich nicht nur die Grundlagen verstehe, sondern ich
> möchte/soll die Paketfehlerrate (PER) dieser Kommunikation berechnen.
> Und da tappe ich gerade völlig im Dunkeln,

Ich fürchte, das wirst du auch dann noch, wenn du die TI'sche Rechnung 
vollständig verstanden hast. Weil dafür mehr als nur der UART-Fehler 
massgeblich sein dürfte, denn üblicherweise fragt man nur dann nach 
einem PER, wenn sich zwischen Tx und Rx mehr befindet als nur ein Stück 
Draht. Und dann ist die TI'sche Rechnung nur ein Teil der 
Gesamtrechnung.

Ohne zusätzliche Komponenten zwischen Tx und Rx wird die Kommunikation 
entweder fehlerfrei funktionieren, oder abhängig von den übertragenen 
Daten weitgehend Schrott ergeben. Für eine PER sorgt der Kram 
dazwischen, bereichert um den TI'schen Taktfehler. Der TI'schen Anteil 
ist deterministisch.

Aber um deinen grauen Zellen weiteres Futter zu geben: Der sich aus dem 
UART-Verhalten ergebende Fehler ist abhängig von den übertragenen Daten. 
0x40 ist deutlich kritischer als 0xFB.

Autor: Icke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beruhigend, dass andere auch Probleme mit diesem Dokument haben. ;)


Ich denke mal, dass ich jetzt die Grundlagen verstanden habe.
Wie ich jetzt die PER ausrechnen soll, weiß ich allerdings noch immer 
nicht.

Würde das ja gern wie ein Mathematikee machen: "Ich definiere ..."
Ich definiere, das jedes Bit richtig erkannt wird. Damit beträgt die 
Bit- und die Paketfehlerwahrscheinlichkeit Null. :D
(Schön wär's!)

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.