www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bqudrqteneinstellung


Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.