Atxmega128A4: PLL geht nur mit dem 2 MHz RC

OP #5299638
Lesenswert?
• ▲
▼
Der Thread-Titel beschreibt ziemlich genau mein Problem grade. Da ich 
mit Atxmegas praktisch keine Erfahrung habe, erhoffe ich mir hier Rat.

Mein Code bisher:
1
int main(void)
2
{
3
    setUpAvr();
4
    
5
    for(;;){
6
        /* insert your main loop code here */
7
        // Pin toggeln um zu sehen ob der Atmega angelaufen ist
8
        // mit Oszi ueberprueft
9
        PORTB.OUTTGL = (1 << PIN1);
10
    }
11
    return 0;   /* never reached */
12
}
13
void setUpAvr(void){
14
    /* insert your hardware initialization here */
15
    OSC.PLLCTRL = OSC_PLLSRC_RC32M_gc | 0x01;
16
    OSC.CTRL |= OSC_PLLEN_bm;
17
    while (!(OSC.STATUS & OSC_PLLRDY_bm));
18
    CCP = CCP_IOREG_gc;
19
    CLK.CTRL = CLK_SCLKSEL_PLL_gc;
20

21
    PORTB.DIR |= (1 << PIN1);
22
}
Und genau der Code läuft nicht.

Ersetze ich
1
OSC.PLLCTRL = OSC_PLLSRC_RC32M_gc | 0x01;
gegen
1
OSC.PLLCTRL = OSC_PLLSRC_RC2M_gc | 0x10;
läuft obiger Code.

Intention ist, dass ich einen externen 14,7456 MHz Quarz am Atxmega habe 
und diesen mittels PLL verdreifachen will. Auch das geht nicht. Dass der 
Quarz aber ansich geht habe ich schon geprüft indem ich nicht die PLL 
als Taktquelle wähle sondern nur den Quarz:
1
void setUpAvr(void){
2
    /* insert your hardware initialization here */
3
    OSC_XOSCCTRL = OSC_XOSCSEL_XTAL_16KCLK_gc | OSC_FRQRANGE_12TO16_gc;
4
    OSC.CTRL |= OSC_XOSCEN_bm;
5
    while (!(OSC.STATUS & OSC_XOSCRDY_bm));
6
    CCP = CCP_IOREG_gc;
7
    CLK.CTRL = CLK_SCLKSEL_XOSC_gc;
8

9
    PORTB.DIR |= (1 << PIN1);
10
}
Mit diesem Code läuft der Atxmega. Auch wenn ich so als Taktquelle den 
32 MHz RC wähle läuft der Atxmega. Aber warum geht das mit der PLL nicht 
bzw. warum geht das mit PLL nur mit dem 2 MHz RC? Ich hab da sicher noch 
was falsch drin, nur was? Ich sehe es grade nicht wirklich, vielleicht 
kann mir hier jemand helfen.
#5299680
Lesenswert?
• ▲
▼
Hi,

du hast den 32 MHz Osc. nicht aktiviert. Den musst du erst aktivieren 
wenn dann mit der PLL was machen willst.

Das nutze ich bei einem Atxmega32e5 für dein 32 MHz Osc mit der PLL
1
void Clock_Init(void)
2
{
3
  //Interner 2MHz Oszi
4
  OSC.XOSCCTRL =  OSC_X32KLPM_bm | OSC_XOSCSEL1_bm;  // 32 kHz Quarz settings.
5
  OSC.CTRL = OSC_RC32MEN_bm  | OSC_XOSCEN_bm;
6
  // Warten bis Oszillator stabil ist
7
  while ((OSC.STATUS & OSC_RC32MEN_bm) == 0);
8
  //while ((OSC.STATUS & OSC_XOSCEN_bm) == 0);
9
  
10
  // I/O Protection
11
  CCP = CCP_IOREG_gc;
12
  // Prescaler
13
  CLK.PSCTRL = CLK_Prescaler;
14
  // PLL Sorce und PLL Faktor
15
  OSC.PLLCTRL = OSC_PLLSRC_RC32M_gc | (PLL_Faktor << OSC_PLLFAC_gp);
16
  // PLL enable
17
  OSC.CTRL = OSC_PLLEN_bm ;
18
  while ((OSC.STATUS & OSC_PLLRDY_bm) == 0);
19
  // I/O Protection
20
  CCP = CCP_IOREG_gc;
21
  //System Clock selection
22
  CLK.CTRL = CLK_SCLKSEL_PLL_gc;
23
  // DFLL ein (Auto Kalibrierung)
24
  //DFLLRC32M.CTRL = DFLL_ENABLE_bm;
25
  
26
}

Gruß JackFrost

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.