Forum: Mikrocontroller und Digitale Elektronik µC Taktung: krumme Werte Warum?


von Adrian E. (ahsd)


Lesenswert?

Hallo,

ich verstehe eine Sache bei der angegebenen Taktung im Makefile noch 
nicht ganz. Warum sind das in Beispiel Makefiles oft so krumme Werte wie 
"F_CPU = 14745600" ?

Kann ich jede Zahl wählen innerhalb des Bereiches, den mein Atmel µC 
hinbekommt?

Gibt es eine Übersicht der standard Taktung verschiedener Atmel Modelle?

Liebe Grüße,
Adrian.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

14745600 ist ein super gerader Wert um eine exakte Baudrate von 115200 
Baud erzeugen zu können.

Die alten Atmel-Prozessoren haben leider schlechte Teiler und deshalb 
benötigt man solche Quarze.

von me (Gast)


Lesenswert?

Nein.
Du gibst die Frequenz an, die dein Taktgeber (z.b. Quarz) wirklich hat.
Baudratenquarze haben solche "krummen" Werte aus gutem Grund ;)

von Michael M. (eos400dman)


Lesenswert?

Du musst hier den Takt eintragen, mit dem dein AVR versorgt wird. Die 
Angabe dient nur zu Berechnung von Delays usw. Damit kannst du NICHT 
einstellen wie schnell der AVR läuft und mit welchem Takt er arbeitet.

Wenn du zum Beispiel einen 8MHz Quarz an deinem µC angeschlossen hast, 
dann muss du hier 8000000 eintragen.

Die "krummen" Werte haben damit zu tun, dass mit ihnen durch 
entsprechende Teiler die Baudraten von zum Beispiel 9600 Baud recht 
einfach und genau erreicht werden kann.

Viele Grüße Michael

von Johannes T. (johannes_t)


Lesenswert?

Eine Erklärung für den krummen Wert 14745600 findest du hier:
http://www.mikrocontroller.net/articles/Baudratenquarz

von Adrian E. (ahsd)


Lesenswert?

Dann war das wohl noch ein Irrtum meinerseits. Ich gehe jetzt noch von 
dem internen Oszillator aus. Stelle ich den Takt (bzw Teiler) nicht im 
Makefile ein?

von Oliver H. (Firma: OliverHeinrichs.de) (dobson)


Lesenswert?

Nein. Das geschieht über die sogenannten Fuses und natürich die 
Aussenbeschaltung des µC (falls benötigt).

von Adrian E. (ahsd)


Lesenswert?

Alles klar, dann habe ich das durcheinandergeworfen. Danke!

von Luther B. (luther-blissett)


Lesenswert?

Die krummen Quarze haben idR. immer was mit der konkreten Anwendung zu 
tun und der Notwendigkeit bestimmte Signale mit ausreichender 
Genauigkeit zu erzeugen. Hier ist eine Liste von Quarzfrequenzen und 
ihrem Zweck:

http://en.wikipedia.org/wiki/Crystal_oscillator_frequencies

von Adrian E. (ahsd)


Angehängte Dateien:

Lesenswert?

So, dann stellt sich die nächste Frage:

Ich schaue mir gerade den Online Fuse Calculator an:
http://www.engbedded.com/fusecalc

Jetzt habe ich die Auswahl zwischen den verschiedenen Taktraten, aber 
was bedeuten die Optionen dahinter? (Start-Up-Time) Was soll ich für 
ganz einfache Standard Schaltungen nehmen?

: Bearbeitet durch User
von Peter R. (pnu)


Lesenswert?

Oszillatorschaltungen mit Quarz brauchen wegen der hohen Schwinggüte des 
Quarzes recht lange, bis die für den Takt notwendige Schwingamplitude 
erreicht ist.

Zusammen mit Quarz also immer die längste Wartedauer zwischen 
Spannungsanlegen und Start des Prozessors (start-up-time) zu nehmen, 
meist sind das bei AVRs 64ms.

Bei Keramikschwingern ist die Schwinggüte um den Faktor 100 schlechter, 
da kann  man auch kürzere Startzeiten nehmen.

Bei RC-Oszillatoren, die schon nach wenigen Takten volle Amplitude haben 
gehts ohne Wartezeit. Ebenso wenn der Takt von einem externen Oszillator 
bereits geliefert wird.

Brauchen tut man die kurzen Startzeiten meistens nur in Ausnahmefällen.

von Adrian E. (ahsd)


Lesenswert?

Alles klar, danke für die gute Erklärung!

von atmel (Gast)


Lesenswert?

Markus Müller schrieb:
> 14745600 ist ein super gerader Wert um eine exakte Baudrate von 115200
> Baud erzeugen zu können.
>
> Die alten Atmel-Prozessoren haben leider schlechte Teiler und deshalb
> benötigt man solche Quarze.

Und wie machen das neue Prozessoren? Die brauchen keine Baudratenquarze 
weil sie gute Teiler haben? Schon drüber nachgedacht, was das für ein 
Schwachsinn ist?

von Georg A. (georga)


Lesenswert?

> Die brauchen keine Baudratenquarze weil sie gute Teiler haben?

Naja, irgendwelche Quarze werden sie schon noch brauchen. Aber keine 
Vielfachen mehr der Art 19200*16*x...

> Schon drüber nachgedacht, was das für ein Schwachsinn ist?

Wieso, stimmt doch. Heute gibts entweder PLLs oder fractional Divider 
dafür.

von Lötlackl *. (pappnase) Benutzerseite


Lesenswert?

atmel schrieb:
> Schon drüber nachgedacht, was das für ein
> Schwachsinn ist?

Ohne Dir zu nahe treten zu wollen, aber schon mal was von "fractional 
baud rate generator" gehört?

von Georg A. (georga)


Lesenswert?

BTW: Die F_CPU-Angabe wird nur von den _delay*-calls der avr-libc 
benutzt, weil sie damit ausrechnen können, wieviele NOPs sie für welche 
Verzögerung brauchen. AFAIK gibt es sonst keine Verwendung für F_CPU.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

atmel schrieb:
> Markus Müller schrieb:
>> 14745600 ist ein super gerader Wert um eine exakte Baudrate von 115200
>> Baud erzeugen zu können.
>>
>> Die alten Atmel-Prozessoren haben leider schlechte Teiler und deshalb
>> benötigt man solche Quarze.
>
> Und wie machen das neue Prozessoren? Die brauchen keine Baudratenquarze
> weil sie gute Teiler haben? Schon drüber nachgedacht, was das für ein
> Schwachsinn ist?

Bei einem STM32 kann ich bei 16MHz einen Teiler von 139 einstellen um 
115107 Baud mit einer Fehlerrate von 0,08% zu erreichen.

Beim Atmel muss man bei 16MHz einen Teiler von 9 einstellen um eine 
Baudrate von 111111 zu erreichen mit einer Fehlerrate von 3,55% zu 
haben. (Interner Teiler von 16)

Das sind die Unterschiede zu modernen "fractional Divider". Andere µC 
haben z.B. auch nur einen internen Teiler von 8 (kleinere PIC's), ob das 
AVR auch kann weiß ich jetzt nicht auswendig.

von Amateur (Gast)


Lesenswert?

Dein Beispielquarz hat genauso eine gerade Frequenz wie ein Uhrenquarz 
mit 32.768 Hz. Geteilt durch 2^15, ein in der Computertechnik gerader 
Teiler, ergibt das 1 Hz oder einen Tick pro Sekunde.

Die serielle Übertragung wird vielfach mit dem 16-fachen (ein im 
Computer grader Teiler) der Übertragungsfrequenz also 16 x 115200 = 
1.843.200 Hz kontrolliert. Dieser Wert mal 15 ergibt Deine ominösen 
14.745.600 Hz.

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.