Hallo! Um einen AVR Xmega mit 32MHz zu betreiben hat man mindestens zwei Möglichkeiten: 1. Interner 32MHz RC Oszillator 2. Interner 2MHz/32MHz + PLL x16 3. (bei meiner Frage aktuell nicht relevant) Externer Quarz + PLL Ob 32 oder 2MHz RC Oszillator - beide haben ziemlich ähnliche Werte bei Temperaturdrift und Stabilität. Hat die Nutzung der PLL irgendwelche Vorteile? CLKper4 oder CLKper2 wird nicht benötigt, es geht nur um den CPU-Takt. Grüße, Bernhard
> Hat die Nutzung der PLL irgendwelche Vorteile?
Die PLL brauchst du, um eine höhere Taktfrequenz zu erzeugen, als der
Oszillator bereit stellt. Aber ich denke, das war nicht die eigentliche
Frage.
Ich hatte mal einen Xmega mit 32MHz R/C Oszillator+PLL verwendet und
festgestellt, dass die serielle UART Kommunikation manchmal instabil
ist. Das Problem verschwand sofort, nachdem ich die PLL zusätzlich mit
dem 32kHz Oszillator synchronisierte.
1 | // Set clock source to 32Mhz using the internal R/C Oscillator.
|
2 | OSC.CTRL|=OSC_RC32MEN_bm; |
3 | while (!(OSC.STATUS & OSC_RC32MRDY_bm)); |
4 | CCP=CCP_IOREG_gc; |
5 | CLK.CTRL=CLK_SCLKSEL_RC32M_gc; |
6 | // Synchronize to the calibrated 32kHz oscillator (needed for the UART)
|
7 | OSC.CTRL&=(~OSC_RC2MEN_bm); |
8 | OSC.CTRL|= OSC_RC32KEN_bm; |
9 | while (!(OSC.STATUS & OSC_RC32KRDY_bm)); |
10 | OSC.DFLLCTRL &= ~OSC_RC32MCREF_bm; |
11 | DFLLRC32M.CTRL |= DFLL_ENABLE_bm; |
Warum dadurch irgendwas besser wurde, hab ich selbst nicht verstanden. Aber seit dem nutze ich genau diesen Code immer wieder (vier mal) und hatte keine Probleme mehr mit UART.
DFLL sollte man schon immer aktivieren. Schau Dir mal die Diagramme im Datenblatt an. Die Stabilität ist schon deutlich besser mit DFLL. Ohne DFLL: Bei 3.6V schwankt der 32MHz Oszillator von -40 bis 100°C von 36Mhz bis 31MHz 5MHz Unterschied! Mit DFLL: Bei 3.6V schwankt der 32MHz Oszillator von -40 bis 100°C von ~31.75Mhz bis ~32.15MHz 400kHz Unterschied. Aber zurück zu meiner Frage: Hat die PLL bei CLK = 32MHz irgendwelche anderen Vorteile? Ohne PLL ist die CPU sicher etwas sparsamer.
Aber denke dran, dass selbst mit DFLL der intrne Oszillator nicht 100% genau ist,egaö ob mit internen oder externen 32kHz Quarz abgeglichen. Z.B. können dann Sinusfrequenzen auf einem DAC mittels DDS immernoch merkbar ungenau sein. Da braucht man dann einen externen Quarz mit sehr wenig Drift. Mit der PLL kannst du 128MHz Takt erzeugen, den teilst du durch 4 und hast deine 32MHz zusätzlich. Dann kannst du die CPU mit 32MHz takten, aber z.B. die Hires der Timer mit 128MHz, womit diese 16-fach bessere Auflösung bekommen (die Frequenz hingenen kann nicht erhöht werden hierdurch).
RC ist nie 100% genau - das sollte jedem bewusst sein.
Bei anderen Anwendungen nutze ich einen externen Quarz.
HIRES und EBI geht auch mit höherem Takt mit PLL - auch klar.
Sei es drum, darum geht es ja nicht.
>CLKper4 oder CLKper2 wird nicht benötigt, es geht nur um den CPU-Takt.
Für UART und Baudraten unter 100000, Temperaturdifferenzen im Innenbereich sowie die üblichen MC—Apps langt der interne Osc eigentlich immer!
M. schrieb: > Für UART und Baudraten unter 100000, Temperaturdifferenzen im > Innenbereich sowie die üblichen MC—Apps langt der interne Osc eigentlich > immer! Welche Vorteile hat die PLL bei 115200 Baud? Ob PLL oder RC der Takt ist immer 32MHz
> Dann kannst du die CPU mit 32MHz takten, > aber z.B. die Hires der Timer mit 128MHz, womit diese 16-fach bessere > Auflösung bekommen Ah, cool. Das wusste ich noch nicht.
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.