Hallo, ich arbeite mich gerade in die USART bei meinem ATTiny ein. In dem AVR-GCC Tutorial hier hab ich folgendes Makro in meinen Code geholt: #define F_CPU 8000000UL #define BAUD 9600UL // Baudrate #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden #define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille, 1000 = kein Fehler. #if ((BAUD_ERROR<990) || (BAUD_ERROR>1010)) #error Systematischer Fehler der Baudrate groesser 1% und damit zu hoch! #endif Für eine Baudrate von 9600 ist alles in Ordnung, für 115200 ist der Fehler allerdings zu hoch. Gibt es eine Möglichkeit, dass ich die 115200 doch irgendwie zuverlässig zum Laufen bringe? Einen externen Quarz habe ich nicht, möchte es gerne mit dem internen machen. Danke vorab für eure Hilfe!
Julia_Foß schrieb: > Einen externen Quarz habe ich nicht, möchte es gerne mit dem internen > machen. 'Intern' ist kein Quarz, sondern nur ein einfacher Oszillator. Die Frequenzabweichungen können dann noch größer sein.
Ok, Danke. Auch wenn ich nicht weiß, wie mir das bei meiner Problematik weiterhilft...
Julia_Foß schrieb: > Auch wenn ich nicht weiß, wie mir das bei meiner Problematik > weiterhilft ??? Quarz anschließen?!
Könntest dir das OSCCAL0 Register mal ansehen, damit kannst du den Internal 8MHz RC Oscillator Kalibrieren. fosc = 7.3728MHz sollte 0% Error ergeben.
Ralf G. schrieb: > Julia_Foß schrieb: >> Auch wenn ich nicht weiß, wie mir das bei meiner Problematik >> weiterhilft > > ??? > Quarz anschließen?! Meine Frage war ob es auch ohne geht?!
Holger L. schrieb: > Könntest dir das OSCCAL0 Register mal ansehen, damit kannst du den > Internal 8MHz RC Oscillator Kalibrieren. > > fosc = 7.3728MHz sollte 0% Error ergeben. Danke! Das würde bedeuten, ich kann die interne Frequenz mehr oder weniger so einstellen wie ich möchte, oder gibt es da Grenzen?
Natürlich ist das begrenzt. Im DB Seite 293 Figure 26-77 gibt eine kleine Übersicht.
:
Bearbeitet durch User
Für den 441, da ich den 841 benutze, muss ich auf Seite 339 schauen richtig? Also wenn ich F_CPU auf 7372800UL stelle, arbeitet der µC auch auf Dauer zuverlässig. Da möchte ich mich irgendwie absichern.
Hi >Danke! Das würde bedeuten, ich kann die interne Frequenz mehr oder >weniger so einstellen wie ich möchte, oder gibt es da Grenzen? Kannst du. Aber wie lange? MfG Spess
Julia_Foß schrieb: > Für den 441, da ich den 841 benutze, muss ich auf Seite 339 > schauen > richtig? Also wenn ich F_CPU auf 7372800UL stelle, arbeitet der µC auch > auf Dauer zuverlässig. Da möchte ich mich irgendwie absichern. Das F_CPU = 7372800UL bedeute nur, dass der Compiler weis, was Sache ist. Die AVR Register muss der Programmierer auf einen sinnvollen Wert setzen. Um 7,3728 MHz zu erreichen muss man sich ein Abgeleichprogramm schreiben, einen Messeinheit zur Messung von Frequenzen besitzen und auch das Datenblatt lesen. Wenn man nun noch die Außentemperatur dazunimmt, erhält man einen Satz Abgleichparameter in Abhängigkeit zur Temperatur, denn der RC Oszillator ist auch davon abhängig. Dies muss man nun für jeden AVR µC durchführen.
Der Interne Oszillator erlaubt (ohne den Aufwand mit der Kalibrierung) keine zuverlässigen Betrieb der seriellen Schnittstelle - egal welche Baudrate. Zum Experimentieren reicht er aber meistens. Unabhängig davon kann der Baudraten Generator aus 8Mhz Systemtakt nur wenige Baudraten ausreichend genau erzeugen, nämlich 2400, 4800, 9600, 19200 und 38400 Baud (wenn wir uns mal auf die gängigen Werte beschränken). 115200 Baud gehen nicht. Ideal wäre ein Quarz mit den genannten 7,3728 oder 14,7456 Mhz, damit kann man alle gängigen Bauraten mit 0% BAUD_ERROR erzeugen.
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.