Welche Baudrate erreicht ihr mit 16 Mhz

Moderator Persönliche Seite #366947
Lesenswert?
• ▲
▼
Das Datenblatt eines jeden AVR enthält eine Liste von Baudraten
und Vorteilern in Abhängigkeit von der CPU-Frequenz, mitsamt dem
damit erzielbaren Baudratenfehler.  Da kannst du nachgucken.

Da 16 MHz nicht durch die ,,Standard''-Baudraten teilbar ist,
haben die erzeugten Baudraten allesamt einen kleine Fehler.
Fehler unter 1 % gelten allgemein als tolerabel.

Faustformel: bei 1 MHz kann man mit gesetztem U2X (8-fach
oversampling statt 16-fach) 9600 Bd generieren.  Bei 16 MHz
sind also 38400 Bd auch ohne U2X locker drin.  Oberhalb 38400 Bd
gibt es keine Standard-Baudraten mehr.  Im PC-Bereich wurden dort
noch 57600 und 115200 hinzu erfunden, da es die einzigen beiden
verbliebenen Möglichkeiten des Vorteilers der Standard-UART waren.
Mit welchem Fehler sich diese bei 16 MHz erzeugen lassen => siehe
Datenblatt.
Gast #366954
Lesenswert?
• ▲
▼
Hallo

Ich habe nun ein 14,745600 MHz Quartz gekauft und aufs STK500 Board
gesteckt und den Jumper umgesteckt und den Code angepasst. Leider
empfange ich von jetzt an das falsche Zeichen.

Ich habe die Fuse auf:
"Ext.Crystal/Resonator High Frequenz. Startup Time 16k + 0ms"
gesetzt, wie auch andere andere Einstellungen ohne Erfolg probiert.
Bin jetzt total Ratlos.

Wer findet den Fehler?



USART_Initial(void)
{
  #ifndef F_CPU
  #define F_CPU 14745600
  #endif
  #define UART_BAUD_RATE 9600
  #define UART_BAUD_CALC(UART_BAUD_RATE,F_OSC)
((F_CPU)/((UART_BAUD_RATE)*16L)-1)

  UBRRH=(uint8_t)(UART_BAUD_CALC(UART_BAUD_RATE,F_CPU)>>8);
  UBRRL=(uint8_t)UART_BAUD_CALC(UART_BAUD_RATE,F_CPU);

  UCSRB = (1<<RXEN)|(1<<RXCIE)|(1<<TXEN)
|(1<<UCSZ1)|(1<<UCSZ0);  //Empfangen, Senden aktivieren
  UCSRC = (1<<URSEL)|(1<<USBS)|(1<<UCSZ1);      //Set frame format: 
8data,
1stop bit
}
Gast #366959
Lesenswert?
• ▲
▼
Nein, die Standard-UART im PC (8250, 16450 bzw. seit bald 15 Jahren
16550) verwendet als Baudratengenerator einen Quarz(-oszillator) mit
1,8432 MHz. Das durch 16 geteilt ergibt 115200.

Schneller geht es nur mit speziellen Schnittstellenkarten oder
USB-Seriell-Adaptern.
Gast #366961
Lesenswert?
• ▲
▼
> Nein, die Standard-UART im PC (8250, 16450 bzw. seit bald 15 Jahren
> 16550) verwendet als Baudratengenerator einen Quarz(-oszillator) mit
> 1,8432 MHz. Das durch 16 geteilt ergibt 115200.

Die heutigen Super-I/Os haben diese Begrenzung schon lange nicht mehr

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.