Ich möchte gerne den externen Oszillator des ATxmega ansprechen. Habe folgenden Code: OSC.CTRL = OSC_XOSCEN_bm; //Externer Oszillator while( !(OSC.STATUS & OSC_XOSCRDY_bm)) //Warten bis eingeschwungen CCP = 0xD8; //Schutz (Konfiguration übernehmen) CLK.CTRL = CLK_SCLKSEL1_bm | CLK_SCLKSEL0_bm; // Externer Clock CLK.PSCTRL = 0x00; //Prescaler 1 Leider funktioniert mein Programmcode. Kann mir jemand helfen?
Anfänger wrote:
> Leider funktioniert mein Programmcode. Kann mir jemand helfen?
Ja ne is klar.
> Leider funktioniert mein Programmcode.
Na, ist doch schön.
Was willst Du uns damit sagen?
Leider funktioniert mein Programmcode NICHT! Soll es heißen! Entschuldigung... Wie sieht es aus kann mir jeman helfen?
Du mußt, bevor Du den externen Oscillator über das OSC_CTRL-Register einschaltest, das OSC_XOSCTRL-Register passig einrichten.
Leider hast du nur spärlich Informationen gegeben. Quarz oder externer Takt? Welche Frequenz? Du musst auch noch Prescaler/PLL einstellen. Siehe OSC.XOSCCTRL u.a..
Es wird warscheinlich wieder ext. Oszillator mit ext. Quarz verwechselt.
>Der externe Quarz darf nur max. 16MHz haben (nicht etwas 32MHz)!
Nee, das nicht, aber es muß ein Grundtonquarz sein und da ist bei 25Mhz
Schluß. Ist aber gerade nicht die Frage gewesen.
Travel Rec. wrote: >>Der externe Quarz darf nur max. 16MHz haben (nicht etwas 32MHz)! > > Nee, das nicht, aber es muß ein Grundtonquarz sein und da ist bei 25Mhz > Schluß. Ist aber gerade nicht die Frage gewesen. Also das XMega Datenblatt sagt 0.4 - 16MHz darf der Quarz max. haben.
Die Praxis sagt etwas anderes ;-). Spezifikationen sind aber so, wie Du sagst.
Also meine Spezifikationen sind: Ich habe einen Oszillator (kein Quarz) mir 14,7546Mhz. Takt-angeschlossen an Xtal1 (External Clock). Ich benötige den vollen Takt (Prescaler = 1)
Hi, hat schon jemand den Quarz oder Oszillator zum laufen gebracht? Ich habe das gleiche Problem dass mir der xmega nicht auf 16Mhz extern läuft. Habe einen 16Mhz Quarz an xtal1 und xtal2 dran.
1 | //CPU
|
2 | OSC.XOSCCTRL |= (1<<OSC_FRQRANGE0_bp) | (1<<OSC_FRQRANGE1_bp); //Frequency Range 12-16 MHz |
3 | OSC.XOSCCTRL |= (1<<OSC_XOSCSEL0_bp)| (1<<OSC_XOSCSEL1_bp); //0,4 - 16Mhz XTAL 256CLK |
4 | |
5 | |
6 | OSC.CTRL |= (1<<OSC_XOSCEN_bp); //extern Oszillator enable |
7 | |
8 | for(;(OSC_STATUS & (1<<OSC_XOSCRDY_bp)) == 0;); //warten bis Quarz ready |
9 | OSC.PLLCTRL |= (1<<OSC_PLLSRC0_bp) | (1<<OSC_PLLSRC1_bp); //Clock Source |
10 | CCP = 0xD8; |
11 | |
12 | CLK.CTRL |= (1<<CLK_SCLKSEL0_bp) | (1<<CLK_SCLKSEL1_bp); //System Clock Selection |
13 | OSC.CTRL &= ~(1<<OSC_RC2MEN_bp); //Disable 2MHz internal RC |
So sieht´s in ASM mit aktivierter PLL und RTC aus. Vielleicht hilft´s ja.
Ich habe das Problem jetzt gelöst. statt CLK.CTRL |= (1<<CLK_SCLKSEL0_bp) | (1<<CLK_SCLKSEL1_bp); muss man CLK.CTRL = 0x03; schreiben. Warum weis ich zwar auch noch nicht, aber ich denk mal dass die erste Schreibweise zu lange dauert.
Ich habe das hier versucht um den Controller mit einem exteren Quarz (16Mhz) laufen zu lassen. ldi temp,0x03 ; sts CLK_CTRL,temp aber wenn ich im Simulator duchkickere lässt sich so das Register CLK_CTRL nicht setzten. (einach nur externer Takt für den Controller)
Hi, kann mir jemand evtl. auf die Sprünge helfen was ich falsch mache? Ich habe einen 7,372MHz QUarz an XTAL1,2 angeschlossen und möchte PLL als Systemclock benutzen
1 | OSC.XOSCCTRL |= (1<<OSC_FRQRANGE0_bp) ; //Frequency Range 2-9 MHz |
2 | OSC.XOSCCTRL |= (1<<OSC_XOSCSEL0_bp)| (1<<OSC_XOSCSEL1_bp) |((1<<OSC_XOSCSEL3_bp)); //0,4 - 16Mhz XTAL 256CLK |
3 | |
4 | OSC.PLLCTRL |= (1<<OSC_PLLSRC0_bp) | (1<<OSC_PLLSRC1_bp)| (1<<OSC_PLLFAC0_bp) |(1<<OSC_PLLFAC1_bp); //PLL ext. CLK Faktor3 |
5 | OSC.CTRL |= (1<<OSC_XOSCEN_bp) |(1<<OSC_PLLEN_bp); //extern Oszillator enable |
6 | |
7 | for(;(OSC_STATUS & (1<<OSC_XOSCRDY_bp)) == 0;); //warten bis Quarz ready |
8 | |
9 | CCP = 0xD8; //IOProtect |
10 | CLK.CTRL |= (1<<CLK_SCLKSEL2_bp);// | (1<<CLK_SCLKSEL1_bp); //SYSCLK PLL |
11 | OSC.CTRL &= ~(1<<OSC_RC2MEN_bp) & ~(1<<OSC_RC32MEN_bp); //Disable 2MHz&32MHz internal RC |
Ich gebe mir meine Clock mit CLKEVOUT auf einem Pin aus, und bekomme immer nur 2MHz wenn ich die PLL Clk auswähle. Konfiguriere ich direkt den externen Quarz dann sehe ich da aber meine 7,x MHz als Systemclock. Was mache ich denn falsch das meine PLL Clock nicht funktioniert? Danke schonmal
ich poste die Lösung nochmal...habs aber noch hinbekommen. Hatte irgendwo noch paar Dreher drinne. Und hiermit widerspreche ich auch mal der Behauptung das
1 | OSC.PLLCTRL |= (1<<OSC_PLLSRC0_bp) | (1<<OSC_PLLSRC1_bp)| (1<<OSC_PLLFAC0_bp) |(1<<OSC_PLLFAC1_bp); |
einfacher zu lesen ist als OSC.PLLCTRL = 0x43 oder so, da OSC_PLLSRC0_bp keinerlei Rückschluss auf die eigentliche Bitposition im Byte mehr zuläßt. Ist sicherlich Ansichts&Gewöhnungssache aber ich finde OSC.PLLCTRL = 0x43 samt gutem Kommentar Einleuchtender als so ewig lange Bezeichnungen
A. B. schrieb: > ich poste die Lösung nochmal...habs aber noch hinbekommen. Hatte > irgendwo noch paar Dreher drinne. > > Und hiermit widerspreche ich auch mal der Behauptung das >
1 | > OSC.PLLCTRL |= (1<<OSC_PLLSRC0_bp) | (1<<OSC_PLLSRC1_bp)| |
2 | > (1<<OSC_PLLFAC0_bp) |(1<<OSC_PLLFAC1_bp); |
> > einfacher zu lesen ist als > > OSC.PLLCTRL = 0x43 > > oder so, da OSC_PLLSRC0_bp keinerlei Rückschluss auf die eigentliche > Bitposition im Byte mehr zuläßt. Schreib doch einfach
1 | |
2 | OSC.PLLCTRL |= OSC_PLLSRC_XOSC_gc | (3<<OSC_PLLFAC_gp); |
1 | |
2 | OSC.XOSCCTRL |= (1<<OSC_FRQRANGE1_bp) | (1<<OSC_XOSCSEL0_bp) | (1<<OSC_XOSCSEL1_bp) | (1<<OSC_XOSCSEL3_bp); //0,4 - 16Mhz XTAL 256CLK |
3 | |
4 | OSC.PLLCTRL = 0xC4; |
5 | |
6 | OSC.CTRL = (1<<OSC_XOSCEN_bp) | (1<<OSC_PLLEN_bp); //extern Oszillator&PLL enable |
7 | while (!(OSC.STATUS & OSC_PLLRDY_bm)); // wait until PLL stable |
8 | CCP = 0xD8; //IOProtect |
9 | CLK.CTRL |= 0x04; |
hiermit wird PLL als Clocksource ausgewählt. Die PLL multipliziert den externen Takt mal 4 in dem Beispiel. stimmt...das mit den GroupPosition Masken wäre noch ne Alternative
funky schrieb: > stimmt...das mit den GroupPosition Masken wäre noch ne Alternative Und vor allem die GroupConfigurations benutzen!
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.