Répondre à la discussion
Affichage des résultats 1 à 15 sur 15

PIC et PLL



  1. #1
    Gérard

    PIC et PLL


    ------

    Bonjour,
    Je travaille (c'est beaucoup dire ...) sur un projet avec un 18F26K22. Ce µC possède un oscillateur interne et une PLL.
    J'ai configuré l'oscillateur interne en 16MHz.
    Avec l'oscillateur interne, PLLCFG n'intervient pas.
    Mon programme :
    Début:
    portc3 = 1
    portc3 = 0 goto début

    Quel que soit la valeur de PLLEN, l'oscillo me donne le même signal sur RC3.
    Est ce que c'est normal ?

    Merci d'avance pour vos remarques.

    -----

  2. Publicité
  3. #2
    paulfjujo

    Re : PIC et PLL

    bonjour,


    il faudrait voir ta config ...

    il y a 2 endroit concernés par l'activation PLL
    voici un exemple ou je l'utilise pour un 18F46K22 (idem que 18F26K22 mais en 40 pins)
    avec FOSC interne=16Mhz x PLL => 64Mhz

    Code:
    // config dans le code
    // voir Help
    //  Topics
    //        Pic18 
    //            config bits settings
    //                    choisir PIC18F46K22
    
    #define OSCILLATEUR_INTERNE
    
    #ifdef OSCILLATEUR_INTERNE
    #pragma config FOSC = INTIO67, FCMEN = OFF, PLLCFG=OFF            // CONFIG1H
    #else
    #pragma config FOSC = HSHP, PLLCFG=OFF, FCMEN=OFF     
    #pragma config PRICLKEN=ON 
    #endif    
    #pragma config IESO=OFF,PWRTEN=OFF,BOREN=OFF,WDTEN=OFF,CCP2MX=PORTC1        
    #pragma config PBADEN=OFF,CCP3MX=PORTE0,T3CMX=PORTC0,P2BMX=PORTC0
    #pragma config MCLRE=EXTMCLR,STVREN=OFF,LVP=ON,XINST=OFF,DEBUG=OFF
    #pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF            // CONFIG5L
    #pragma config CPB = OFF, CPD = OFF                                  // CONFIG5H
    #pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF        // CONFIG6L
    #pragma config WRTB = OFF, WRTC = OFF, WRTD = OFF                    // CONFIG6H
    #pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF    // CONFIG7L
    #pragma config EBTRB = OFF                                           // CONFIG7H
    // config vue par pickit3 2200 3C19 9900 0084 C00F E00F 400F
    et au debut du main()


    Code:
     #ifdef OSCILLATEUR_INTERNE  
    //  the internal oscillator is set to the default frequency of 1 MHz.
    // The Internal Oscillator Frequency Select bits  (IRCF<2:0>)
    // select the frequency output of the internal oscillator block  
    // pour conserver 19200 bauds à 16Mhz sinon retombe à 1200 bauds
     OSCCON=0b01110000;  //HFINTOSC – (16 MHz)
    // OSCCONbits.IRCF2=1; //HFINTOSC – (16 MHz)
    // OSCCONbits.IRCF1=1;
    // OSCCONbits.IRCF0=1;
    //OSCCON=0b01010000;  //HFINTOSC – (4 MHz)
    //OSCCON=0b01100000;  //HFINTOSC – (8 MHz)
    //111 = HFINTOSC – (16 MHz)
    //110 = HFINTOSC/2 – (8 MHz)
    //101 = HFINTOSC/4 – (4 MHz)
    //100 = HFINTOSC/8 – (2 MHz)
    //011 = HFINTOSC/16 – (1 MHz)(3)
      OSCTUNE=0;
    //  OSCTUNEbits.PLLEN=0;  // 0= sans PLL => 1,2,4,8 ou 16Mhz  
      OSCTUNEbits.PLLEN=1;  // 1= avec PLL =>32Mhz ou 64Mhz  
    #endif
    Dernière modification par paulfjujo ; 21/11/2013 à 15h13.

  4. #3
    Gérard

    Re : PIC et PLL

    Merci pour ta réponse.

    Mes fuses :

    FOSC = INTIO7 ;valeur pour tester oscillateur interne, après FOSC = INTIO67
    ;clockout on A6, port fonction on A7
    PLLCFG = On
    PRICLKEN = On
    FCMEN = OFF
    IESO = OFF

    OSCCON = %01110011 ;j'ai mis les bit 0 et 1 à 1 pour choisir l'oscillateur interne

    Extrait de la doc µChip concernant OSCCON :
    bit 1-0 SCS<1:0>: System Clock Select bit
    1x = Internal oscillator block

    J'ai mis le bit 6 de OSCTUNE à 1, c'est PLLEN

    Je ne comprends pas ce qui ne fonctionne pas.

    Merci d'avance.

  5. #4
    paulfjujo

    Re : PIC et PLL

    bonsoir,


    C'est pourtant OK,
    j'ai testé avec ce ptit bout de programe (en C18)
    et un tempo entre les 2, mon oscillo de 60Mhz aurait des difficultes à visualiser le signal
    avec Fosc=64Mhz

    Code:
    void main(void)
    {
     
    #ifdef OSCILLATEUR_INTERNE  
    //  the internal oscillator is set to the default frequency of 1 MHz.
    // The Internal Oscillator Frequency Select bits  (IRCF<2:0>)
    // select the frequency output of the internal oscillator block  
    // pour conserver 19200 bauds à 16Mhz sinon retombe à 1200 bauds
        OSCCON=0b01110000; 
     // OSCCONbits.IRCF2=1; //HFINTOSC – (16 MHz)
     // OSCCONbits.IRCF1=1;
     // OSCCONbits.IRCF0=1;
      OSCTUNE=0;
      OSCTUNEbits.PLLEN=1;  // 1= avec PLL => 64Mhz ou 40Mhz   0 =sans PLL => 16Mhz  ou 10Mhz
    #endif   
        
    Init_Hardware() ;
    Led_Rouge=0;
     SLRCON=0; // standard rate for PORTA,B,C,D,E
    
     ici:
     LATCbits.LATC3=1;
     Tempo(1000);
     LATCbits.LATC3=0;
     Tempo(1000);
     goto ici;
    à l'oscillo j'ai environ 18mS de periode sans PLL OSCTUNEbits.PLLEN=0;
    et de 4,5mS avec OSCTUNEbits.PLLEN=1;

  6. #5
    Gérard

    Re : PIC et PLL

    Je n'ai pas mis SLRCON à 0 mais ça ne doit pas jouer.
    Je vois que tu écris dans le registre LATC et moi directement sur le sur PORTC.
    Est ce que ça change quelque chose ? Il me semble que non.

  7. A voir en vidéo sur Futura
  8. #6
    paulfjujo

    Re : PIC et PLL

    bonjour,

    Ecrire directement dans le port au lieu de LAT ne change rien ici.
    J'ai enlevé les tempo et capturé le signal obrneu avec PLL)0 et PLL=1
    on observe bien la duree de mise à 1 de RC3 ~0,25µS Bas de temps X à 0,1µS/div
    theoriquement avec PLL=0 Fosc=16Mhz => Cycle = 4/16=0.25µS
    et avec PLL=1 Fosc=64MHz => cycle = 4/64=0.0625µS theorique
    on observe une duree < à 0,08µS... sur l'oscillo , signal bien deformé car BP oscillo=60Mhz
    La PLL est donc bien active..
    J'ai rajouté le test PLLRDY ..qui le confirme.

    Config bits du fichier dans le fichier chargeur , A comparer
    Ma config:
    Config bits sur Pickit3 : 3800 3C19 9D00 0084
    C00F E00F 400F

    Ton programm est ecris avec quoi MikroBasic ?
    Attention avec MikroC, je me suis fais avoir avec les declaration FOSC
    à renseigner dans 2 endroits differents...

    Code:
    SLRCON=0; // standard rate for PORTA,B,C,D,E
      txt=&Texte[0];
      if (OSCCON2bits.PLLRDY==1)
      {
       strcpypgm2ram(txt,"\n\rSystem clock comes from 4xPLL.\r\n") ;
          }
          else
          {
          strcpypgm2ram(txt,"\n\rSystem clock comes from an oscillator, other than 4xPLL.\r\n") ;
      }
       k=PutStr_RS(txt);
    
      
     ici:
     //LATCbits.LATC3=1;
     PORTCbits.RC3=1;
     //Tempo(1000);
     //LATCbits.LATC3=0;
      PORTCbits.RC3=0;
    // Tempo(1000);
     goto ici;


    PLL_OFF.jpg
    PLL_ON.jpg

  9. Publicité
  10. #7
    Gérard

    Re : PIC et PLL

    Bonjour et merci pour le mal que tu te donnes.
    Ca fait presque 2 heures que je me bats avec cette PLL sans résultat.
    J'ai mis tous les bits de config pareil aux tiens (PK3), j'ai changé de PIC et toujours pas le résultat attendu.

    Pour me changer les idées, je vais faire chauffer le fer, j'ai vr&aiment besoin de ma vider la cervelle.

    Bon dimanche à tous.

  11. #8
    RISC

    Re : PIC et PLL

    Salut Gérard,

    Apparemment cet exemple fonctionne : http://www.microchip.com/forums/m691157.aspx

    a+
    Ma marotte ? les microcontrôleurs ;=)

  12. #9
    Gérard

    Re : PIC et PLL

    Salut RISC,
    J'ai la bonne configuration des fusibles, PLLEN = 1 dans OSCTUNE et pourtant ...
    En mesurant le fréquence avec l'oscillo sur RA6, quelle que soit la valeur de PLLEN, je mesure 4MHz, c'est que ma fréquence interne est de 16MHz et non de 64.

    Je n'ai pas beaucoup de latin et cet AM, je viens de tout perdre ...

  13. #10
    RISC

    Re : PIC et PLL

    Salut,

    J'ai retrouvé un vieux projet qui fonctionnait à 64MHz dont j'ai extrait quelques lignes :
    Code:
    // CONFIG1H
    #pragma config FOSC = INTIO7    // Oscillator Selection bits (Internal oscillator block, CLKOUT function on OSC2)
    #pragma config PLLCFG = ON      // 4X PLL Enable (Oscillator multiplied by 4)
    #pragma config PRICLKEN = ON    // Primary clock enable bit (Primary clock is always enabled)
    #pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor enabled)
    #pragma config IESO = OFF        // Internal/External Oscillator Switchover bit (Oscillator Switchover mode enabled)
    
    
    
    OSCCONbits.IRCF=0b111; //Oscillateur interne 16 MHz
    while (!OSCCONbits.HFIOFS); // 16 MHz stabilisé
    OSCTUNEbits.PLLEN=1;
    while (!OSCCON2bits.PLLRDY); // PLLx4 OK
    OSCCONbits.SCS=0b00; //Choix Oscillateur primaire
    Voir CLKOUT sur broche OSC2 (MODE INTIO67) tu devrais voir du 64MHz (y compris avant le basculement sur l'oscillateur primaire)

    a+
    Dernière modification par RISC ; 24/11/2013 à 23h34.
    Ma marotte ? les microcontrôleurs ;=)

  14. #11
    terriblement

    Re : PIC et PLL

    Code:
    #pragma config IESO = OFF        //Oscillator Switchover mode disabled
    #pragma config FOSC = INTIO67    //Internal oscillator block
    #pragma config PRICLKEN = ON	 //Primary clock enabled
    #pragma config FCMEN = OFF       //Fail-Safe Clock Monitor disabled (Pas pour oscillateur interne)
    #pragma config PLLCFG = ON       //Oscillator multiplied by 4 (Normalement pas besoin car oscillateur interne)
    #pragma config PWRTEN = ON       //Power up timer enabled
    #pragma config XINST = OFF       //Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
    #pragma config STVREN =	ON       //Stack full/underflow will not cause Reset
    
    //#pragma config P2BMX =  PORTB5   //P2B is on RB5
    #pragma config CCP2MX = PORTB3   //CCP2 input/output is multiplexed with RB3
    #pragma config PBADEN = OFF      //PORTB<5:0> pins are configured as digital I/O on Reset
    #pragma config CCP3MX = PORTB5   //P3A/CCP3 input/output is multiplexed with RB5
    #pragma config MCLRE = INTMCLR	 //RE3 input pin enabled; MCLR disabled
    #pragma config HFOFST = OFF      //HFINTOSC output and ready status are delayed by the oscillator stable status
    #pragma config T3CMX = PORTC0    //T3CKI is on RC0
    
    #pragma config BOREN = OFF       //Brown-out Reset disabled in hardware and software
    #pragma config BORV = 285        //VBOR set to 2.85 V nominal
    #pragma config WDTPS = 32768     //Watchdog Timer Postscale Select bits
    #pragma config WDTEN = OFF       //Watch dog timer is always disabled. SWDTEN has no effect.
    Code:
        //Configuration oscillateur
        OSCCONbits.IRCF = 0b111;    //110 = HFINTOSC/2 ? (8 MHz)
        OSCCONbits.SCS = 0b00;      //00 = Primary clock (determined by FOSC<3:0> in CONFIG1H).
        OSCCON2bits.MFIOSEL = 0;    //0 = MFINTOSC is not used
        OSCTUNEbits.PLLEN = 1;      //1 = PLL enabled
    voila pour un 46k22

  15. #12
    Gérard

    Re : PIC et PLL

    Ce matin, j'ai fait plusieurs essais. Avec un quartz, j'ai pu vérifier le fonctionnement de la PLL.
    En remettent la config avec oscillateur interne, ça fonctionne aussi.
    Honnêtement, je ne pourrais pas dire ce qui fait que ce soit bon maintenant.
    En regardant de plus prêt la figure 2-3 et la table 2-1 page 30 de la doc, je me suis rendu compte que pour l'oscillateur interne (FOSC<3:0> = 100x), PLLCFG ne joue aucun rôle. Je l'ai testé e c'est le cas.
    J'ai pour l'instant la valeur 1001 (Internal oscillator block, CLKOUT function on OSC2) ce qui permet de tester la sortie de l'oscillateur.
    OSCTUNE.7 = 1, c'est le bit PLLEN qui valide ou non la PLL.

    Ouf, il était temps.

    Merci à tous pour vos idées et suggestions.

  16. Publicité
  17. #13
    RISC

    Re : PIC et PLL

    Gérard,

    La famille des PIC18xxK22 possède la particularité de pouvoir configurer dans les bits de config ou en dynamique les paramètres normalement uniquement atteignable par les bits de config (choix de horloges, PLL,...). C'est cela qui rend le paramètrage "touchy"

    a+
    Ma marotte ? les microcontrôleurs ;=)

  18. #14
    Gérard

    Re : PIC et PLL

    Citation Envoyé par RISC Voir le message
    Gérard,

    La famille des PIC18xxK22 possède la particularité de pouvoir configurer dans les bits de config ou en dynamique les paramètres normalement uniquement atteignable par les bits de config (choix de horloges, PLL,...). C'est cela qui rend le paramètrage "touchy"

    a+
    Je crois qu'ils se sont creusés la tête pour que ça ne soit pas simple ...

  19. #15
    terriblement

    Re : PIC et PLL

    Citation Envoyé par Gérard Voir le message
    Je crois qu'ils se sont creusés la tête pour que ça ne soit pas simple ...
    +1

    Un vrai casse tete leurs datasheet sur les oscillateurs

Sur le même thème :