ATTINY841 USART 115200 Baud Problem bei 8 MHz

Gast #4896483
Lesenswert?
• ▲
▼
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!
Gast #4896555
Lesenswert?
• ▲
▼
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?
Gast #4896575
Lesenswert?
• ▲
▼
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.
Gast #4896605
Lesenswert?
• ▲
▼
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.
Gast #4896609
Lesenswert?
• ▲
▼
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.

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