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