Fehler im GCC Wiki? - Baudrate Berechnung

OP #742580
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:
1
// Berechnungen
2
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
3
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     // Reale Baudrate
4
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000) // Fehler in Promille 
5
...
6
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?
OP #742591
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.
#742643
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.
Gast #742689
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
OP #742716
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 ;)
Gast #742743
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren