- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 17

Thema: xmega rtc + pll

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.04.2010
    Beiträge
    356

    xmega rtc + pll

    Hallo,
    Ich habe ein Problem mit meinem Xmega 32a4:
    Ich wollte heute die RTC ausprobieren, was in einem Standalone Programm auch funktionierd hat.
    Dann hab ich sie in mein Programm eingebaut und plötzlich geht nichts mehr.
    Die RTC löscht das Busy Flag nicht mehr, also Fehler suche:
    Jetzt bin ich so weit, das ich den Fehler auf die PLL eingrenzen konnte.
    In meinem Hauptprogramm verwende ich diese um aus meinem 16MHz externem Quarz die 32 MHz für den uc bereitzustellen.
    Verwende ich eine andere Taktquelle,(2MH intern/32MHz intern/16MHz Quarz) so macht sie was sie soll, nur bei der PLL bleibt sie stehen.
    Wie kann das sein ?
    Die RTC verwendet doch eine ganz andere Taktquelle(bei mir 32khz intern) ?
    Ich habe im Datenblatt keinen Hinweis der gleichen gefunden.
    Mein Hauptprogramm:
    Code:
    // Init clocking (32Mhz generated from 16Mhz external)
        // Init clocking (32khz generated internaly for RTC)
        Clock_init(CLOCK_EXTERNAL);
        PLL_init();
        Clock_init_rtc();
        // Wait and init RTC clock
        while ( RTC_Busy() ){};
        RTC_Initialize( 1024, 0, 0, RTC_PRESCALER_DIV1_gc );
        RTC_SetIntLevels( RTC_OVFINTLVL_LO_gc, RTC_COMPINTLVL_OFF_gc );
        // Enable all interrupt levels
        PMIC.CTRL |= PMIC_LOLVLEN_bm;
        // Enable global interrupts
        sei();
        // Set Led as output
        PORTE.DIRSET=(1<<PIN3);
        while(1)
        {        
        }            
    }
    
    /*! \brief RTC overflow interrupt service routine.
     *
     *    Called every second
     */
    ISR(RTC_OVF_vect)
    {
        PORTE.OUTTGL=(1<<PIN3);
    }
    Meine Clock routinen:
    Code:
    void Clock_init(uint8_t source)
    {
        if(source==CLOCK_INTERNAL_2){
            /*Internal 32MHz */
            OSC.CTRL |= OSC_RC2MEN_bm;
            while(!(OSC.STATUS & OSC_RC2MRDY_bm));
            CCP = CCP_IOREG_gc;
            CLK.CTRL = CLK_SCLKSEL_RC2M_gc;
        }else if(source==CLOCK_INTERNAL_32){
            /*Internal 32MHz */
            OSC.CTRL |= OSC_RC32MEN_bm;
            while(!(OSC.STATUS & OSC_RC32MRDY_bm));
            CCP = CCP_IOREG_gc;
            CLK.CTRL = CLK_SCLKSEL_RC32M_gc;
        }else if(source==CLOCK_EXTERNAL){
            /* External Clock */
            OSC_XOSCCTRL = OSC_XOSCSEL_XTAL_16KCLK_gc | OSC_FRQRANGE_12TO16_gc;
            OSC.CTRL |= OSC_XOSCEN_bm;
            while(!(OSC.STATUS & OSC_XOSCRDY_bm));
            CCP = CCP_IOREG_gc;
            CLK.CTRL = CLK_SCLKSEL_XOSC_gc;
        }
        CCP = CCP_IOREG_gc;
        CLK.PSCTRL=0x00;
    }
    
    void PLL_init()
    {
        OSC.PLLCTRL = OSC_PLLSRC_XOSC_gc | 0x08;
        OSC.CTRL |= OSC_PLLEN_bm;
        while (!(OSC.STATUS & OSC_PLLRDY_bm));
        CCP = CCP_IOREG_gc;
        CLK.PSCTRL=0x03;
        CCP = CCP_IOREG_gc;
        CLK.CTRL = CLK_SCLKSEL_PLL_gc;
    }
    
    /* \brief Initiates the 32khz clock needed for the RTC.
    */
    void Clock_init_rtc()
    {
        /* Turn on internal 32kHz. */
        OSC.CTRL |= OSC_RC32KEN_bm;
    
        do {
            /* Wait for the 32kHz oscillator to stabilize. */
        } while ( ( OSC.STATUS & OSC_RC32KRDY_bm ) == 0);
    
    
        /* Set internal 32kHz oscillator as clock source for RTC. */
        CLK.RTCCTRL = CLK_RTCSRC_RCOSC_gc | CLK_RTCEN_bm;
    }
    Was mache ich an der PLL falsch ?
    Die RTC Routinen sind aus der Atmel Appnote und funktionieren auch.

    MFG Thalhammer

  2. #2
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    Blog-Einträge
    9
    Hey,

    schau mal hier habe ich eine Anleitung geschrieben wie man die RTC vom XMega nutzt:

    http://kampis-elektroecke.de/?page_id=1879

    Das Thema PLL wird hier abgehandelt:

    http://kampis-elektroecke.de/?page_id=883

    Vielleicht hilft dir das ja weiter
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.04.2010
    Beiträge
    356
    Genau genommen hab ich nach deinen Tutorials und den Appnotes gearbeitet(Vileicht fällt dir auch die namens gleichheit mit dem Hinweis auf den Fehlenden USART Beispielcode auf ).
    Das Problem ist halt das es nur solange funktionierd wie ich den PLL nicht nutze.
    kommentiere ich die Zeile aus läuft es prima, sobald sie drin ist bleibt er bei der RTC_busy schleife stehen.

  4. #4
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    Blog-Einträge
    9
    Ich nehme mal an du kommentierst die Zeile "PLL_init();" aus?
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.04.2010
    Beiträge
    356
    Zitat Zitat von Kampi Beitrag anzeigen
    Ich nehme mal an du kommentierst die Zeile "PLL_init();" aus?
    Ja genau.
    So ich konnte jetzt den Fehler noch weiter eingrenzen:
    Ich habe die PLL auf 128MHz konfiguriert (Multi und dann einen Prescaler von 4 um auf
    32MHz CPU Takt zu kommen, da ich für die Hires Erweiterung 128MHz Per4 Takt brauche.
    Hab jetzt testweise die PLL auf Multi 2 gestellt und den Prescaler auf 0 und dann geht die RTC auch.
    Es liegt also garnicht an der PLL direkt sondern an der Kombi aus Multi 8 und Prescaler.
    Aber eigentlich dürfte doch keinen Einfluss haben ?

  6. #6
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    Blog-Einträge
    9
    Schau dir mal auf Seite 80 das Bild an:

    http://www.atmel.com/Images/doc8077.pdf

    Außerdem dividiert die Zeile

    CLK.PSCTRL = 0x03

    durch 4 und nicht durch 8 (siehe Seite 8.
    Durch 8 wäre 101 = 5.
    Laut Bild sollte der RTC Clock aber komplett unabhängig von dem SysCLK sein....

    Edit:

    Mir ist gerade eingefallen, dass der XMega nur bis zu einem bestimmten Takt zuverlässig läuft. Vielleicht waren die 128MHz einfach zu fix und die PLL konnte sich nicht stabilisieren?
    Der Multiplikator ist auch, denk ich mal, nur dafür ausgelegt um aus einem langsamen Takt 32MHz machen zu können und nicht um 32MHz auf was weiß ich hoch zu drehen.
    Ich vermute ganz stark, dass die PLL einfach nur nicht das PLL-Ready Bit gesetzt hat, weil der Takt vielleicht nicht sauber war.
    Geändert von Kampi (22.02.2013 um 20:27 Uhr)
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

Ähnliche Themen

  1. XMega Clock,PLL, Prescaler einstellen in Bascom Demo
    Von chr-mt im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 29.11.2021, 14:54
  2. encoder Anschluss für PLL auf Romeo all in one
    Von robvoi im Forum Elektronik
    Antworten: 0
    Letzter Beitrag: 05.06.2012, 13:28
  3. PLL Synth. 1,6MHz bis 16 Mhz
    Von dreadbrain im Forum Elektronik
    Antworten: 54
    Letzter Beitrag: 14.01.2010, 16:47
  4. PLL Baustein 4046
    Von hacker im Forum Elektronik
    Antworten: 41
    Letzter Beitrag: 14.01.2009, 15:14
  5. Resonator mit PLL
    Von cengiz77 im Forum Elektronik
    Antworten: 43
    Letzter Beitrag: 15.07.2005, 18:45

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests