Forum: Mikrocontroller und Digitale Elektronik ATTINY841 USART 115200 Baud Problem bei 8 MHz


von Julia_Foß (Gast)


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!

von Ralf G. (ralg)


Lesenswert?

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.

von Julia_Foß (Gast)


Lesenswert?

Ok, Danke. Auch wenn ich nicht weiß, wie mir das bei meiner Problematik 
weiterhilft...

von Ralf G. (ralg)


Lesenswert?

Julia_Foß schrieb:
> Auch wenn ich nicht weiß, wie mir das bei meiner Problematik
> weiterhilft

???
Quarz anschließen?!

von Holger L. (max5v)


Lesenswert?

Könntest dir das OSCCAL0 Register mal ansehen, damit kannst du den 
Internal 8MHz RC Oscillator Kalibrieren.

fosc = 7.3728MHz sollte 0% Error ergeben.

von Julia_Foß (Gast)


Lesenswert?

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

von Julia_Foß (Gast)


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?

von Holger L. (max5v)


Lesenswert?

Natürlich ist das begrenzt.
Im DB Seite 293 Figure 26-77 gibt eine kleine Übersicht.

: Bearbeitet durch User
von Julia_Foß (Gast)


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.

von spess53 (Gast)


Lesenswert?

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

von Karl M. (Gast)


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.

von Stefan F. (Gast)


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.

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
Noch kein Account? Hier anmelden.