mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Fehlertoleranz bestimmen


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
beschäftige mich seit geringer zeit mit µC -> PC mit USART.
jetzt ist mir hier im forum was aufgefallen und zwar von:

Hubert, der schreibt:
Thema: wahrscheinlich einfaches USART Problem
Autor: Hubert
Datum: 22.03.2005

Du hast dir sicher im Datenblatt die UBRR Settings angeschaut und dabei
festgestellt das diese geraden Frequenzen nicht das ideale sind. Wenn
dann die interne Frequenz auch noch daneben ist dann hast du rasch mehr
als die 0,2% Fehlertoleranz.


meine frage ist wie berechne und aus welchen parametern kann ich die
fehlertoleranz bestimmen.

mfg
Peter

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das steht im Datenblatt an der Stelle, an der die Programmierung des
Baudratenerzeugers beschrieben wird.
Der Prozessortakt wird durch ganzzahlige Werte geteilt, um die
Zielbaudrate zu erzeugen. Dabei wird zunächst ein fester Divisor von 16
angewandt, da eine UART zur korrekten Synchronisation den 16fachen
Baudratentakt benötigt.
(AVRs bieten auch einen "double speed"-Modus an, bei dem erhöhte
Anforderungen an die Genauigkeit der Baudrate gestellt werden).

Aus dem so aus 1 MHz resultierenden Maximalwert von 62500 (resp. 12500
im "double-speed"-Modus) lässt sich, wie Du unter Zuhilfenahme eines
Taschenrechners leicht herausfinden kannst, der Wert 9600 nicht genau
erzeugen.
Eigentlich wäre ein Divisor von 6.51 erforderlich, möglich sind aber
nur 6 oder 7, was in 57600 bzw 67200 resultiert.
Der erste Wert ist etwa 8% kleiner, der zweite Wert hingegen etwa 7%
größer als der gewünschte Wert.

(Im "double-speed"-Modus sieht die Angelegenheit mit einem
Soll-Divisor von 13.02 schon deutlich besser aus, mit einem
tatsächlichen Divisor von 13 liegt der erzielte Wert etwa 0.2% unter
dem gewünschten).


Der Begriff "Fehlertoleranz" ist etwas irreführend, weil er das
Tolerieren eines Fehlers suggeriert.

Ab einer gewissen Abweichung vom Soll (==Fehler) wird diese nicht mehr
toleriert, d.h. eine gewisse Toleranz wird überschritten.

Welche Toleranzen beim Empfangen von Daten mit der UART des AVR
akzeptiert werden, siehst Du auf Seite 158 des Mega16-Datenblattes
beschrieben. Die Toleranz hängt hier auch von der verwendeten Wortlänge
ab.
Auf Seite 166 des gleichen Datenblattes sind für einige
Prozessortaktfrequenzen die erzielbaren Baudraten inklusive der
resultierenden Fehler angegeben.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
erstmal danke für die antwort. habe gerade nach dem datenblatt für ein
mega 16 gesucht und komischer weise nirgendswo etwas gefunden, auf die
schnelle, wenn jemand den link hat her damit.

also wenn ich richtig verstanden habe soll der prozessortakt 16 mal
grösser sein als die baudrate damit man die schnittstelle ideal
synchronisieren kann.


Rufus T. Firefly schrieb:
Aus dem so aus 1 MHz (TAKTFREQUENZ) resultierenden Maximalwert von
62500 (resp. 12500 im "double-speed"-Modus) lässt sich, wie Du unter
Zuhilfenahme eines Taschenrechners leicht herausfinden kannst, der Wert
9600 nicht genau erzeugen.

wie und wieso komme ich auf 12500 im "double-speed"-Modus?
62500/5 aber wieso???


Rufus T. Firefly schrieb:
Eigentlich wäre ein Divisor von 6.51 erforderlich, möglich sind aber
nur 6 oder 7, was in 57600 bzw 67200 resultiert.
Der erste Wert ist etwa 8% kleiner, der zweite Wert hingegen etwa 7%
größer als der gewünschte Wert.


wieso teilt man jetzt weiter das verstehe ich überhaupt nicht. und was
hat ein weiterer devisor zu sagen???  teilt man weiter damit man auf
9600 boud kommt, die gängige übertragungsboudrate (bestimmt?!?) aber
was hat dan die 6 oder 7 zusagen?? bzw der weitere devisor????


Rufus T. Firefly schrieb:
(Im "double-speed"-Modus sieht die Angelegenheit mit einem
Soll-Divisor von 13.02 schon deutlich besser aus, mit einem
tatsächlichen Divisor von 13 liegt der erzielte Wert etwa 0.2% unter
dem gewünschten).

wie komme ich auf die 13 ???

62500/13=4808


danke jetzt schon für die hilfe, bin schon ganz gespannt wieso das so
ist???

mfg
Peter

Autor: Hubert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter
Hast du dir schon mal die Mühe gemacht das Datenblatt zu lesen? Unter
www.atmel.com/products findest du alles was du braucht.
Dann list du mal den Abschnitt USART genau durch. Unter Clock
Generation  findest du die genaue Beschreibung. Am Ende des Abschnitts
sind auch Example of Baudrate Settings. Dort siehst du im Überblick die
geeignetsten Taktfrequenzen.

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Datenblätter der von Atmel hergestellten Prozessoren findet man bei
Atmel.

Im Satz

  "Aus dem so aus 1 MHz resultierenden Maximalwert von 62500
  (resp. 12500 im "double-speed"-Modus)"

verschwand eine Null. Richtig ist:

  "Aus dem so aus 1 MHz resultierenden Maximalwert von 62500
  (resp. 125000 im "double-speed"-Modus)"

Deine Konfusion rührt wohl in erster Linie daher, daß Du Dich vom
"double-speed"-Modus ins sprichwörtliche Bockshorn jagen ließest.

Ersetze also die fehlende Null und lies' Dir mein Elaborat einfach
nochmal durch.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
habe mir mir das datenblatt durchgelesen und es sind paar sachen klarer
geworden.schreibe es mal nieder ob es wirklich so ist???

also der erste devisor ist immer 16, zur idealen synchroniesierung. so
und dann kommt es drauf an ob speed modus (asynchron) oder synchron
modus. man sucht einen ganzzahligen devisor der so nah wie möglich an
der gewünschten boudrate liegt, und dieser devisor ist das UBRR
(UBRR-Register [0-4095]). da mein englisch nicht so gut ist, habe ich
nicht verstanden was das UBRR genau ist bzw. bedeutet. bischen
verwirrend für mich mit den registern.
kann mir das jemand erklären???
danke für eure hilfe, hoffe das ich kein misst erzähle.

mfg
Peter

frohe ostern!!!

Autor: Hubert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
UBRR ist genau dieses Register aus dem der Kontroller in zusammenhang
mit der Taktfrequenz entnimmt welche Baudrate du willst.
Der Divisor steht also im UBRR-Register

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der erste Divisor ist im "high-speed-Modus" 8, daher die veränderten
Werte.

Davon abgesehen hast Du das soweit richtig verstanden.

Pedanterie: Es heisst Baud. Und Divisor.

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.