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

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