www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Fehler im GCC Wiki? - Baudrate Berechnung


Autor: Thomas L. (tom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich versuche gerade den UART an einem Atmega8 zumlaufen zu bringen. 
Dabei bin ich auf die Formeln für die Berechnungen im Wiki gestossen:
// Berechnungen
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     // Reale Baudrate
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000) // Fehler in Promille 
...
UBRR = UBRR_VAL;

Nun habe ich das Ganze für 2MHz bei 9600Baud gerechnet:

(Vorsicht, ab hier meine Interpretation)
UBRR_VAL wird: 12,520833
BAUD_REAL wird: 9244,99
BAUD_ERROR wird -36,9 (Promille)
was natürlich viel zu gross ist. Im Datenblatt des Atmega8 ist für 
dieselben Werte ein Wert von 0,2% angegeben.
Etwa 0,16 erhalte ich, wenn ich anstatt 12,520833 genau 12 einsetze, was 
ja dann eigentlich auch im Register stehen sollte.

Nun meine Frage: Rechnet der Präprozessor da mit 12,520833 weiter, 
anstatt mit 12? Ist das ein Fehler im Wiki?

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas Linder wrote:

> Nun meine Frage: Rechnet der Präprozessor da mit 12,520833 weiter,
> anstatt mit 12? Ist das ein Fehler im Wiki?

Nein, er rechnet mit 12, da er immer abrundet, bzw. von Anfang an ohne 
Komma rechnet.

Autor: Thomas L. (tom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal danke - noch eine kurze Frage: Rechnet der Präprozessor immer 
mit Integer Werten?

Mittlerweile: Fehler gefunden: Wird F_CPU NUR im Makefile definiert, so 
wirft er einen Fehler (ich schätz mal weil er F_CPU nicht richtig 
auflösen kann), sobald man F_CPU in der C Datei definiert, gehts (auch 
wenn dann eine Warning kommt von wegen zweiter Definition).

Bischen eigenartig ist das schon.

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas Linder wrote:
> Erstmal danke - noch eine kurze Frage: Rechnet der Präprozessor immer
> mit Integer Werten?

Ja, solange man ihn nicht zu etwas anderem zwingt (explizit oder 
implizit).

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

Bewertung
0 lesenswert
nicht lesenswert
Thomas Linder wrote:
> Erstmal danke - noch eine kurze Frage: Rechnet der Präprozessor immer
> mit Integer Werten?

Wenn man es genau nimmt, dann rechnet der Präprozessor gar nicht.
Der Präprozessor macht Textersetzungen.

Erst der eigentliche Compiler stellt dann fest, dass in diesem
Ausdruck nur konstante Zahlenwerte vorkommen und dass er das
selber ausrechnen kann.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>BAUD_ERROR wird -36,9 (Promille)
>was natürlich viel zu gross ist.

Im Datenblatt S.150 wird ein maximaler Fehler von ca.+/-4% und ein 
angestrebter Fehler von +/- 1,5% angegeben.

MfG Spess

Autor: Thomas L. (tom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@spess53:

Nunja, das sind aber auch die Extremwerte, auf Seite 159 wird alles mit 
einem Fehler unter 0,5 gesondert "markiert" und auch wenn dort steht 
dass auch größere Fehler noch akzeptiert werden, so würde ich doch 
möglichst nah am eigentlichen Wert bleiben wollen.
Du hast natürlich Recht damit, dass meine Aussage "Viel zu groß" ein 
Schas ist ;)

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Auf der von dir genannten Seite (und den nachfolgenden) sind die Fehler 
angegeben, die sich mit der entsprechenden Einstellung ergeben. Dabei 
sind 'akzeptable' Fehler fett und 'nicht akzeptable' Fehler in 
Normalschrift angegeben.
Noch etwas anderes: Bei 'Integer'-Berechnungen ist die Reihenfolge sehr 
entscheident: (x/y)*z <> (x*Z)/y.

MfG Spess

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.