Bqudrqteneinstellung

Gast #302687
Lesenswert?
• ▲
▼
Hallo,

ich verwende fuer die Einstellung der Baudrate immer das Beispiel aus
dem AVR-GCC Tutorial:

  #ifndef F_CPU
  #define F_CPU 3686400           /* Oszillator-Frequenz in Hz */
  #endif
  #define UART_BAUD_RATE 9600
  #define UART_BAUD_CALC(UART_BAUD_RATE,F_OSC)
((F_CPU)/((UART_BAUD_RATE)*16L)-1)

Frage: Was ist F_OSC? bzw muesste in der letzten Zeile nicht beidemale
F_OSC oder beidemale F_CPU stehen?


Bei der Initialisierung schreibe ich:
UBRRH=(uint8_t)(UART_BAUD_CALC(UART_BAUD_RATE,F_CPU)>>8);
UBRRL=(uint8_t)UART_BAUD_CALC(UART_BAUD_RATE,F_CPU);

Ich verwende also nur F_CPU. Ich bin kein SPeziqlist mit den #defines
und sonstigen PräProz Direktiven...
Bitte um kurze Aufklaerung wieso es trotzdem funktioniert.

mg,
Johannes
Gast #302688
Lesenswert?
• ▲
▼
In der Tat müssen in Macros die Parameterliste und die verwendeten
Parameter gleich heißen und sollten nicht wie andere Symbole heißen.

In dem Fall gehts trotzdem gut, da ein globaler Parameter genau so
heißt, wie der im Macro verwendete.
Der dem Macro übergebene Parameter wird ignoriert.


Peter
Gast #302689
Lesenswert?
• ▲
▼
Aha,

habs mir fast gedacht... vielleicht unternimmt verbessert ihr das dann
im AVR-GCC Tutorial. Ich habs gerade versucht, aber da kam irgendein
Databank error mit irgendwelchen technical problems...

richtig heisst es also:
#define UART_BAUD_CALC(UART_BAUD_RATE,F_OSC)
((F_OSC)/((UART_BAUD_RATE)*16L)-1)

mg,
Johannes
Gast #302690
Lesenswert?
• ▲
▼
Wenn jetzt wieder jemand meint, daß eine 'gerade' Quarzfrequenz (8,
12, 16,... MHz) zu 'schlechten' Baudraten führt, liegt es daran, daß
dieses Makro nicht rundet.
Mein Vorschlag:

void set_baudrate(long bd)
{
long temp;
  temp=((CPU_CLOCK/16/(bd/10)+5)/10) - 1;  /* runden !!! */
  UBRR0L=temp%256;
  UBRR0H=temp/256;
}

P.S.: ich weiß, daß man bei geschickterer Formulierung 3 Bits sparen
kann.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.