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.
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?
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.