Forum: Mikrocontroller und Digitale Elektronik XMEGA bei 48Mhz intern CLK nicht richtig delay_ms()


von Vipper (Gast)


Lesenswert?

Hallo,
Ich nutze momentan Xmega mit Atmel Studio ASF. Bei 48Mhz intern clock 
habe ich Problem mit der Funktion delay_ms(). Bei delay_ms(20) gibt der 
Funktion immer 40ms. Bei delay_ms(1) gibt er 2ms.

Versuch mit _delay_ms() ergibt gleichen Problem
Hat jemand Lösung für mich?
Danke

von Luther B. (luther-blissett)


Lesenswert?

F_CPU richtig?

von Vipper (Gast)


Lesenswert?

F_CPU setze ich direkt mit 48000000

von Marcel (Gast)


Lesenswert?

PLL richtig eingestellt?

von Robert W. (robwa)


Lesenswert?

Ich dachte 32 MHz ist die Obergrenze bei den XMegas. Wenn ich im Atmel 
Productselector auf 8-Bit-AVR und Takt >=33MHz einschränke, bekomme ich 
0 Ergebnisse. Bei 32 MHz bekonne ich alle XMegas aufgelistet.

von Thomas F. (tomasf)


Lesenswert?

Clock-Takt != CPU-Takt. Dazwischen ist ein Teiler. Der kann in diesem 
Fall auch nicht 1 sein, da die CPU nur bis 32 MhZ spezifiziert ist. Nur 
das USB-Modul kann mit 48 Mhz arbeiten.

von Vipper (Gast)


Lesenswert?

Für allen Funktionen von Xmega (wie DMA, Timmer, USART, SPI, I2C) ist es 
für 48Mhz system clock kein Problem, nur mit delay_ms() ist immer um 
Faktor zwei. Vielleicht liegt es nur bei der Funktion delay_ms() selbst. 
Hat jemand schon mal das gleichen Problem wie Ich ?

von Mirco C. (Firma: s@Td) (mcontroller)


Lesenswert?

Wenn die CPU mit 24 Mhz läuft (sie kann nicht mit 48Mhz laufen) und du 
F_CPU auf 48Mhz setzt hast du den Faktor 2 drinne, da die delay Funktion 
auf F_CPU zurückgreift.

Probier mal F_CPU runterzusetzen bis der delay passt. Dann hast du die 
Frequenz mit der die CPU tatsächlich läuft.

: Bearbeitet durch User
von Marcel (Gast)


Lesenswert?

Die XMega können mit 48MHz laufen, auch wenn im Datenblatt steht, dass 
32MHz max. sind. Die Mega können laut Datenblatt auch nur 20MHz, 
trotzdem kann man die mit 28MHz laufen lassen, um z.B. eine VGA Ausgabe 
zu realisieren.

Ich habe meine XMega immer innerhalb der 32MHz laufen lassen, daher kann 
ich dir mit dem delay auch nicht weiterhelfen. Wenn du das unbedingt 
brauchst, mach dir einen 1kHz Timer mit Millisekunden-Zähler und bau 
deine eigene delay-Funktion.

von Vipper (Gast)


Lesenswert?

Wegen anderen Funktionen habe ich leider alle sieben Timern genutzt. 
Xmega verion USB ist von Factory kalibriert mit 48Mhz für RC32 clk 
source. Ich nutze auch die Source für interne clock weil ich bei der 
Schaltung die Extern Oszillator verzichtet habe. Das einzige Möglichkeit 
für mich ist die Anpassung delay_ms .

von Basti (Gast)


Lesenswert?

Hallo Viper,

du kannst auch USB auf 48 MHz setzen und dein CPU Clock aus dem 2 MHz 
Takt per PLL auf 32 MHz bringen... ohne das dein Controller 24 MHz oder 
48 Mhz laufen muss...

Die 48 MHz sind in der tat ganz gut möglich soweit ich das probiert 
hatte... In der alten ASF 1.4 zB. hat noch alles gepasst, wenn man auf 
48 MHz CPU hoch ging, dass wurde dann später abgeändert... hatte da 
glaube auch Probleme mit dem Delay... Ich vermute, deine CPU läuft auf 
24 MHz, weil die ASF das 48 MHz vielleicht geblockt hat... alternativ 
kann es natürlich auch die neue Delay Funktion sein... die kannst du ja 
anpassen, wenn du unbedingt auf 48 MHz laufen möchtest...

Grüße

Basti

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.