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.
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.
Nein. Du gibst die Frequenz an, die dein Taktgeber (z.b. Quarz) wirklich hat. Baudratenquarze haben solche "krummen" Werte aus gutem Grund ;)
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
Eine Erklärung für den krummen Wert 14745600 findest du hier: http://www.mikrocontroller.net/articles/Baudratenquarz
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?
Nein. Das geschieht über die sogenannten Fuses und natürich die Aussenbeschaltung des µC (falls benötigt).
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
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?
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.
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?
> 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.
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?
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
