mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Externer Oszillator xmega


Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anfänger wrote:
> Leider funktioniert mein Programmcode. Kann mir jemand helfen?

Ja ne is klar.

Autor: YS-500 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Leider funktioniert mein Programmcode.
Na, ist doch schön.

Was willst Du uns damit sagen?

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meine Glaskugel sagt mir, dass da ein 'nicht' fehlt.

Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider funktioniert mein Programmcode NICHT! Soll es heißen! 
Entschuldigung... Wie sieht es aus kann mir jeman helfen?

Autor: Mike J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
8-o Wo haste den Xmega her ?

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du mußt, bevor Du den externen Oscillator über das OSC_CTRL-Register 
einschaltest, das OSC_XOSCTRL-Register passig einrichten.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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..

Autor: YS-500 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es wird warscheinlich wieder ext. Oszillator mit ext. Quarz verwechselt.

Autor: ce (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der externe Quarz darf nur max. 16MHz haben (nicht etwas 32MHz)!

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Praxis sagt etwas anderes ;-). Spezifikationen sind aber so, wie Du 
sagst.

Autor: Ganz neu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: Mikel86 (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
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.
//CPU
OSC.XOSCCTRL |= (1<<OSC_FRQRANGE0_bp) | (1<<OSC_FRQRANGE1_bp); //Frequency Range 12-16 MHz
OSC.XOSCCTRL |= (1<<OSC_XOSCSEL0_bp)| (1<<OSC_XOSCSEL1_bp); //0,4 - 16Mhz XTAL 256CLK


OSC.CTRL |= (1<<OSC_XOSCEN_bp); //extern Oszillator enable

for(;(OSC_STATUS & (1<<OSC_XOSCRDY_bp)) == 0;); //warten bis Quarz ready
OSC.PLLCTRL |= (1<<OSC_PLLSRC0_bp) | (1<<OSC_PLLSRC1_bp); //Clock Source
CCP = 0xD8;

CLK.CTRL |= (1<<CLK_SCLKSEL0_bp) | (1<<CLK_SCLKSEL1_bp); //System Clock Selection
OSC.CTRL &= ~(1<<OSC_RC2MEN_bp); //Disable 2MHz internal RC

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So sieht´s in ASM mit aktivierter PLL und RTC aus. Vielleicht hilft´s
ja.

Autor: Mikel86 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: R--- S--- (rene66)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: funky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

OSC.XOSCCTRL |= (1<<OSC_FRQRANGE0_bp) ; //Frequency Range 2-9 MHz
  OSC.XOSCCTRL |= (1<<OSC_XOSCSEL0_bp)| (1<<OSC_XOSCSEL1_bp) |((1<<OSC_XOSCSEL3_bp)); //0,4 - 16Mhz XTAL 256CLK

  OSC.PLLCTRL |= (1<<OSC_PLLSRC0_bp) | (1<<OSC_PLLSRC1_bp)| (1<<OSC_PLLFAC0_bp) |(1<<OSC_PLLFAC1_bp); //PLL ext. CLK Faktor3
  OSC.CTRL |=  (1<<OSC_XOSCEN_bp) |(1<<OSC_PLLEN_bp); //extern Oszillator enable

  for(;(OSC_STATUS & (1<<OSC_XOSCRDY_bp)) == 0;); //warten bis Quarz ready
  
  CCP = 0xD8; //IOProtect
  CLK.CTRL |= (1<<CLK_SCLKSEL2_bp);// | (1<<CLK_SCLKSEL1_bp); //SYSCLK PLL
  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

Autor: A. B. (funky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
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

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
>
> 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.

Schreib doch einfach
 
OSC.PLLCTRL |= OSC_PLLSRC_XOSC_gc | (3<<OSC_PLLFAC_gp);

Autor: funky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
 
  OSC.XOSCCTRL |=  (1<<OSC_FRQRANGE1_bp) | (1<<OSC_XOSCSEL0_bp) | (1<<OSC_XOSCSEL1_bp) | (1<<OSC_XOSCSEL3_bp); //0,4 - 16Mhz XTAL 256CLK

  OSC.PLLCTRL = 0xC4;

  OSC.CTRL =  (1<<OSC_XOSCEN_bp) | (1<<OSC_PLLEN_bp); //extern Oszillator&PLL enable
  while (!(OSC.STATUS & OSC_PLLRDY_bm));  // wait until PLL stable   
  CCP = 0xD8; //IOProtect
  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

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
funky schrieb:
> stimmt...das mit den GroupPosition Masken wäre noch ne Alternative

Und vor allem die GroupConfigurations benutzen!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.