Hallo Ich wollte mal fragen welche maximale Baudrate ihr mit einem ATMega32 mit einem 16Mhz Quarz erreicht habt/könnt? Welcher Wert ist noch vertretbar ? Gruss Kapitän Blei
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.
Nimm die üblichen 11,0592 oder 14,7456MHz, dann sind 115200 Baud kein Problem. Peter
Hab mit einem MEga16 die 1 Mbit geschafft. Der Aufbau war wie folgt: PC -> USB/RS232 Wandler (FTDI232) -> Mega16 Die Übertragung verlief in beide Richtungen fehlerfrei.
2Mbit/s @16MHz sind auch möglich, wenn man den U2X setzt. Maximal habe ich bisher 3MBit bei einem tiny2313 @ 24MHz verwendet. Lieft wunderbar mit Software CTS.
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 }
"Startup Time 16k + 0ms" Das ist falsch, Quarze brauchen 5..20ms zum anschwingen, also immer +64ms auswählen und bei >8Mhz die CKOPT nicht vergessen. Peter
@Kapitän Blei, hast du F_CPU auch im makefile angepasst? Das hat vorrang!
Jow das habe ich was übersehen. Ich habe vergessen das Makefile anzupassen. Jetzt funzt es. Danke an beide Gruss Blei
Hallo Ist es normal, dass der PC nicht mehr als 115200 schafft? Oder könnte man dies irgendwie verbessern? Gruss Michael
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.
Externer Quarz + Startup-Einstellungen sind übrigens beim STK500 falsch, dort müsste man genau genommen "externer Oszillator" einstellen, denn der STK500 bringt seinen eigenen Oszillator mit. Da dieser auch ständig schwingt, braucht man sich nicht um die Startup-Zeit kümmern.
> 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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.