Pic32mx mplab v8.92
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

Pic32mx mplab v8.92



  1. #1
    davidif

    Pic32mx mplab v8.92


    ------

    Bonjour,

    Afin de me familiariser avec ce micro, je fait quelque essai de configu et ne comprend pas une chose, pourquoi l'horloge de mon système cadence à 80MHZ alors qu'il devrait etre a 160Mhz d'après la programmation ci-dessous:

    Code:
    /*********************************************************************
     *
     *      PIC32MX 
     *
     *********************************************************************
     *
     * FileName:        main.c
     *
     * Dependencies:    plib.h
     *
     * Processor:       PIC32MX
     *
     * Complier:        MPLAB C32
     *                  MPLAB IDE
     *
     * Company:     
     *
     * auteur: 			
     *
     *********************************************************************/
    #include <plib.h>
    
    #include "fonction.h"
    #define extern
    #include "definition.h"
    #undef extern
    
    
    
    #if defined (__32MX360F512L__) || (__32MX460F512L__) || (__32MX795F512L__) || (__32MX430F064L__)
    
    
    #pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_1, FPLLODIV = DIV_1, FWDTEN = ON
    #pragma config POSCMOD = OFF, FNOSC = FRCPLL, FPBDIV = DIV_1
    
    #endif
    
    
    
    void init_port(void)
    {
        // Clear PORTA bits so there are no unexpected flashes when setting
        // them to output in the next step
        mPORTDClearBits(BIT_2 |BIT_1 | BIT_0);
    	mPORTBClearBits(BIT_8|BIT_9 |BIT_10 | BIT_11);
    	
        // Make lower four bits of PORTD as output
        mPORTDSetPinsDigitalOut(BIT_3 |BIT_2 |BIT_1 | BIT_0);
    	mPORTBSetPinsDigitalOut(BIT_8|BIT_9 |BIT_10 | BIT_11);
    
    }
    
    void init_timer1(void)
    {
    	// Configure Timer 1 using PBCLK as input, 1:256 prescaler
        // Period matches the Timer 1 frequency, so the interrupt handler
        // will trigger every one second...
        
    	//OpenTimer1(T1_ON | T1_SOURCE_INT | T1_PS_1_1, PERIOD);
    	T1CONbits.ON=1;	   //enable clock timer1
    	T1CONbits.TCS=0;   //internal clock
    	T1CONbits.TCKPS=0; //Prescalaire 1:1
    
    	INTClearFlag(INT_T1);
    
    	
    
        // Set up the timer interrupt
        //INTEnable(INT_T1, INT_ENABLED);
    	ConfigIntTimer1(T1_INT_ON | T1_INT_PRIOR_2);
    
    }
    
    
    
    // Configure the Timer 1 interrupt handler
    void __ISR(_TIMER_1_VECTOR, ipl2) Timer1Handler(void)
    {
    
        	// Clear the interrupt flag
        	INTClearFlag(INT_T1);
    	
    	
    
      		mPORTDToggleBits(BIT_2 | BIT_1 | BIT_0);
    		mPORTBToggleBits(BIT_8|BIT_9 |BIT_10 | BIT_11);
    
    
    
    }
    
    
    
    
    
    
    int main(void)
    {
        	
    	// Enable multi-vector interrupts
        INTConfigureSystem(INT_SYSTEM_CONFIG_MULT_VECTOR);
        INTEnableInterrupts();
        INTEnableSystemMultiVectoredInt();//ClrWdt();
        
    
    
    	init_timer1();
    	init_port();
    	init_variable();//ClrWdt();
    	//PORTSetPinsDigitalOut(IOPORT_D,BIT_3);
      
    
     		while (1)
    		{
    
    		}
    
    
    return 0;
    }
    Mon timer met 816uS pour compter de 0000 à FFFF, donc correspond à 80Mhz et non pas 160Mhz comme configuré.

    Avez vous une idée
    Merci

    -----

  2. #2
    guillaume83

    Re : Pic32mx mplab v8.92

    Citation Envoyé par davidif Voir le message
    Mon timer met 816uS pour compter de 0000 à FFFF, donc correspond à 80Mhz et non pas 160Mhz comme configuré.

    Avez vous une idée
    Merci

    bonjour, la fréquence max des pic32mx est de 100mhz (32MX450xxx) et 80MHZ (pic 32MX460xxx)
    donc , pas possible de monter à 160 mhz.
    @+

  3. #3
    davidif

    Re : Pic32mx mplab v8.92

    Merci Guillaume83 pour ta réponse, effectivement je n'ai pas regardé la limite technique en fréquence qui est de 80Mhz pour les PIC32MX5XX/6XX/7XX d'après mes docs, malgrés que j'ai testé pouvoir aller jusqu'a 96Mhz en FPLLMUL = MUL_24, je me suis basé uniquement sur le code qui d'après lui m'amenait à FPLLMUL = MUL_20 donc 160Mhz je ne savais pas que le micro limitait au dessus de 100Mhz.

    Que je fasse FPLLMUL = MUL_20, FPLLIDIV = DIV_1 ou FPLLMUL = MUL_20, FPLLIDIV = DIV_2 j'ai toujours mes 80Mhz, je suis donc limité, mais par contre je ne comprend pas une chose ?

    Poourquoi n'ai-je pas la même fréquence quand je fais FPLLMUL = MUL_20, FPLLIDIV = DIV_1, FPLLODIV = DIV_2 ou FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1 ? on divise par deux dans les deux cas que je sache ?

  4. #4
    guillaume83

    Re : Pic32mx mplab v8.92

    Bonsoir,
    fpllidiv (Frequence Pll In Diviseur) est avant la pll, il est utilisé pour addapter la fréquence d'entree (4MHZ<F entree PLL< 5MHZ)en fonction du quartz utilisé.
    fpllodiv(Frequence Pll Out Diviseur) est en sortie de la PLL, il est utilisé pour diviser la fréquence de sortie de la PLL en fonction des besoins .

    EX:

    Fréquence quartz: 8Mhz
    fpllidiv=2 -> F entrée PLL=4mhz ->pll multiplier=20 ->frequence sortie Pll=80mhz -> fpllodiv=2 sysclk=40mhz

    Fréquence quartz: 4Mhz

    1: fpllidiv=1 -> F entrée PLL=4mhz ->pll multiplier=20 ->frequence sortie Pll=80mhz -> fpllodiv=2 sysclk=40mhz
    2: fpllidiv=2 -> F entrée PLL=2mhz ->pll multiplier=20 ->frequence sortie Pll=40mhz -> fpllodiv=2 sysclk=20mhz (exemple hors spécification microchip car f entree pll doit etre 4MHZ<F entree PLL< 5MHZ


    dans tous les cas, 80mhz et 4MHZ<F entree PLL< 5MHZ sont des valeurs garanties par microchip. il est possible de les dépasser mais alors les résultats ne sont plus garantis par microchip

    @+

  5. A voir en vidéo sur Futura
  6. #5
    RISC

    Re : Pic32mx mplab v8.92

    David,

    Tu as oublié une chose très importante qui doit se trouver au début de chaque programme pour un PIC32 :
    Code:
    #define FCY 80000000UL
    ...
    SYSTEMConfigPerformance( FCY);  // configurer pour la performance maximum

    NB : le PIC32 divise par 1 : Fcy = Fosc

    a+

  7. #6
    davidif

    Re : Pic32mx mplab v8.92

    En fait Risc, ce que tu définis au début c'est la fréquence de fonctionnement du pic si je ne me trompe pas ? c'est a dire que tu définis 80Mhz.
    #define FCY 80000000UL
    avec
    SYSTEMConfigPerformance( FCY); // configurer pour la performance maximum
    Moi j'ai défini cette fréquence à 8Mhz
    #pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = ON
    // Mode oscillateur int, pas de PLL, FPB/1
    #pragma config POSCMOD = OFF, FNOSC = FRC, FPBDIV = DIV_1
    et ça fonctionne correctement .

  8. #7
    RISC

    Re : Pic32mx mplab v8.92

    Salut,

    Si tu n'as pas besoin de tourner à 80MHz pas de PB, par contre il faut quand même faire :
    Code:
    #define FCY 8000000UL    // entrer la fréquence réelle à laquelle travaille le PIC 
    ...
    SYSTEMConfigPerformance( FCY);  // configurer pour la performance maximum
    A 8MHz, tu n'auras aucun wait state pour aller chercher des instructions, la limite tant 30MHz

    SYSTEMConfigPerformance( FCY) va optimiser les initialisations internes pour donner le maximum de performance à la fréquence choisie par l'utilisateur.
    Cette fonction retourne je crois FPBDIV, s'il n'est pas à 1 tu utilises la macro pour le reforcer à 1 si nécessaire.

    a+

  9. #8
    davidif

    Re : Pic32mx mplab v8.92

    a quoi sert les wait stat ? effectivement j'ai mis cette instruction en texte puisqu'une fois la fréquence défini dans les pragma elle n'était plus nécessaire, enfin je croyais
    SYSTEMConfig(SYS_FREQ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);
    et que veut dire le UL à la fin
    #define FCY 8000000UL // entrer la fréquence réelle à laquelle travaille le PIC
    tu me dis qu'au minimum la fréquence doit être de 30Mhz et dans l'idéale pour bien fonctionner un micro doit être à combien ?

    Merci

  10. #9
    RISC

    Re : Pic32mx mplab v8.92

    Salut,

    Pour les "wait states" .. voir la documentation de la FLASH du PIC32 ou encore mieux :Si tu comprends pas ce mot utilises la macro que je t'ai conseillée :
    SYSTEMConfigPerformance( FCY); // configurer pour la performance maximum
    C'est justement fait pour ne pas avoir à s'occuper de cela ;=)

    La fréquence maximum du PIC32 est 80MHz mais si tu n'as pas besoin de tourner à 80MHz n'importe quelle autre fréquence plus basse est acceptable.


    Pour UL (unsigned long) à la fin, voir la documentation sur le langage C

    a+
    Dernière modification par RISC ; 19/10/2013 à 23h00.

  11. #10
    davidif

    Re : Pic32mx mplab v8.92

    Ok merci pour l'info RISC, d'ailleurs pourrais tu m'aider sur un autre sujet dont je n'arrive pas à avancer
    http://forums.futura-sciences.com/el...s-pic32-2.html
    Problème qui pourtant me paraissai pas compliqué à la base

    Merci

Discussions similaires

  1. PIC32MX boîtier VTLA
    Par mgduc dans le forum Électronique
    Réponses: 7
    Dernier message: 25/08/2013, 05h30
  2. Routine Interruption Pic32MX
    Par invitee13c535c dans le forum Électronique
    Réponses: 6
    Dernier message: 28/01/2013, 20h33
  3. RTCC Pic32Mx
    Par invite024026d4 dans le forum Électronique
    Réponses: 13
    Dernier message: 23/11/2012, 09h07
  4. Timer PIC32MX
    Par invitee8f75e57 dans le forum Électronique
    Réponses: 3
    Dernier message: 26/07/2012, 08h38
  5. PWM Sur PIC32MX
    Par inviteddae56c8 dans le forum Électronique
    Réponses: 2
    Dernier message: 23/09/2011, 22h25
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...