[Autre] Simulation MPLAB X Stopwatch
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

Simulation MPLAB X Stopwatch



  1. #1
    invite6f4ace37

    Simulation MPLAB X Stopwatch


    ------

    Bonjour,

    J'effectue quelques tests sur MPLAB, j'ai une fonction et je veux savoir son temps d’exécution.

    J'ai donc découvert "Stopwatch" sur MPLAB et je voulais savoir si ma valeur concordait.

    J'ai donc un dsPIC33EP512MU814 qui d'après la doc peut tourner à 70 MHz. Apparemment l'architecture des PIC 16 bits fait que si mon PIC tourne à 70MHz alors ma fréquence d'instruction est de 70/2 = 35 MHz ?

    Donc si je veux une mesure exacte, il me faut configurer dans MPLAB la fréquence d'instruction à 35 MHz ?

    Je souhaite juste voir si j'ai bien compris que quelqu'un me le confirme. Je m'embrouille un peu avec les cycle horloge et instruction d'un PIC à un autre.

    Merci pour vos réponses.

    -----

  2. #2
    invite6f4ace37

    Re : Simulation MPLAB X Stopwatch

    Que mes valeurs soient juste ou pas il y a un second truc que je ne comprend pas.

    J'ai voulu comparer la valeur du Stopwatch avec une variable que j'incrémente toutes les 1us. (frequence du PIC fixé à 60MHz)
    Code:
      IEC0bits.T1IE	 = 1;
      IFS0bits.T1IF	 = 0;
      IPC0		 = IPC0 | 0x1000;
      PR1		 = 15;
    Et mon interruption :
    Code:
    void __attribute__((__interrupt__, __auto_psv__)) _T1Interrupt(void)
    {
      IFS0bits.T1IF	= 0;
      
      
      gCpt++;
      gCpt2++;
      if ( gCpt == 1000000 )
      {
          PORTDbits.RD2 = !PORTDbits.RD2;
          gCpt = 0;
      }
    }
    Sans interruption le stopwatch m'indique que ma fonction dure 1ms environ et si je rajoute l'interruption il m'indique 16ms ! Je trouve qu'il y a une énorme différence non ?
    Maintenant si je supprime la condition qu'il y a dans mon interruption, le résultat du stopwatch est de 24 ms !!!!

    Je comprend pas...

  3. #3
    spown

    Re : Simulation MPLAB X Stopwatch

    Bonjour/bonsoir est bienvenue sur FUTURA,

    Pour la question 1, elle est juste. Il faut configurer dans ' Instruction Frequency 35 Mhz ' pour le cas de 70 Mhz.

    Note : pas toutes les architectures 16 bits de PIC font 2 Fosc par Instruction. Il y en a des 4 Fosc par Ins. ( voir PIC24).

    Pour la 2eme question, je vois pas la déclaration du Timer ?!! Donnes le code complet.

    Comment gCpt est déclarée ?

    Finalement comment tu utilises ton Stopwatch ? Break ? step ??

  4. #4
    antek

    Re : Simulation MPLAB X Stopwatch

    Citation Envoyé par spown Voir le message
    Note : pas toutes les architectures 16 bits de PIC font 2 Fosc par Instruction. Il y en a des 4 Fosc par Ins. ( voir PIC24).
    Sans doute Tosc

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

    Re : Simulation MPLAB X Stopwatch

    Oui, c'est plutôt Fosc/2 par Ins. et Fosc/4.

    Merci pour la remarque.

  7. #6
    RISC

    Re : Simulation MPLAB X Stopwatch

    Salut,
    Les dsPIC33EP fonctionnent effectivement jusqu'à Fcy = 70MHz (la programmation de la PLL permet d'atteindre Fosc = 140MHz).
    Il faut entrer la fréquence de simulation dans les propriétés du projet.
    a+

  8. #7
    invite6f4ace37

    Re : Simulation MPLAB X Stopwatch

    Citation Envoyé par spown Voir le message
    Pour la 2eme question, je vois pas la déclaration du Timer ?!! Donnes le code complet.

    Comment gCpt est déclarée ?

    Finalement comment tu utilises ton Stopwatch ? Break ? step ??
    Oui je lance le Timer au début de la fonction que je souhaite mesurer, donc normal. Juste pour info j'ai mis T1CON = 0x8000.

    gCpt est une variable globale sinon dès que je sors de l’interruption je perd mon compteur.

    Pour le StopWatch, j'ai un breakpoint sur ma fonction et sur l'instruction suivante et je mesure entre les 2 break.

    Mais j'ai du mal à mesurer la même chose avec mon timer ou le stopwatch... car je veux être sur de moi. Que la valeur théorique (simulation) soit la même qu'en pratique dans le PIC.

  9. #8
    invite6f4ace37

    Re : Simulation MPLAB X Stopwatch

    Je remonte un peu le sujet, j'aimerais bien trouver une solution..

    Y a t'il un moyen de savoir si j'ai bien configuré la PLL ? Savoir que j'ai la même fréquence qu'en simulation ?
    Code:
    void Init_Clock ()
    {
        PLLFBD = 66;                        // M = 68
        CLKDIVbits.PLLPOST = 0;       // N1 = 2
        CLKDIVbits.PLLPRE = 0;         // N2 = 2
        OSCTUN = 0;
        RCONbits.SWDTEN = 0;
    
        // Activer PLL
        __builtin_write_OSCCONH( 0x03 );
    
        // Oscillateur externe avec PLL
        __builtin_write_OSCCONL( OSCCON || 0x01 );
        
        // Wait for Clock switch to occur while
        (OSCCONbits.COSC!= 0b011);
        // Wait for PLL to lock while
        (OSCCONbits.LOCK!= 1);
    }
    Alors oui je ne savais pas que l'on pouvait monter à 140 MHz pour atteindre un fonctionnement à 70 MHz... Je pensais max 70MHz et ensuite la fréquence divisé. Merci RISC
    Donc du coup je souhaite travailler avec 140 MHz.

  10. #9
    spown

    Re : Simulation MPLAB X Stopwatch

    La variable gCpt doit être volatile. Il manque des while avant OSCCONbits.LOCK et OSCCONbits.COSC! .

    Comment tes bits de configurations sont configurés ?

    Tu comptes faire quoi avec ça ==> PORTDbits.RD2 = !PORTDbits.RD2; ??? un Toggle (XOR)?

  11. #10
    invite6f4ace37

    Re : Simulation MPLAB X Stopwatch

    Oui c'est vrai pour gCpt.

    Voilà mes bits de config :
    Code:
    /*******************************************************************************
     *  Configuration du dsPIC                                                     *
     ******************************************************************************/
    #pragma config GWRP = OFF                       // General Segment Write-Protect bit (General Segment may be written)
    #pragma config GSS = OFF                        // General Segment Code-Protect bit (General Segment Code protect is disabled)
    #pragma config GSSK = OFF                       // General Segment Key bits (General Segment Write Protection and Code Protection is Disabled)
    
    // FOSCSEL
    #pragma config FNOSC = FRC                      // Initial Oscillator Source Selection Bits (Internal Fast RC (FRC))
    #pragma config IESO = OFF                       // Two-speed Oscillator Start-up Enable bit (Start up with user-selected oscillator source)
    
    // FOSC
    #pragma config POSCMD = XT                      // Primary Oscillator Mode Select bits (XT Crystal Oscillator Mode)
    #pragma config OSCIOFNC = OFF                   // OSC2 Pin Function bit (OSC2 is clock output)
    #pragma config IOL1WAY = OFF                    // Peripheral pin select configuration (Allow multiple reconfigurations)
    #pragma config FCKSM = CSECMD                   // Clock Switching Mode bits (Clock switching is enabled,Fail-safe Clock Monitor is disabled)
    
    // FWDT
    #pragma config WDTPOST = PS32768                // Watchdog Timer Postscaler Bits (1:32,768)
    #pragma config WDTPRE = PR128                   // Watchdog Timer Prescaler bit (1:128)
    #pragma config PLLKEN = ON                      // PLL Lock Wait Enable bit (Clock switch to PLL source will wait until the PLL lock signal is valid.)
    #pragma config WINDIS = OFF                     // Watchdog Timer Window Enable bit (Watchdog Timer in Non-Window mode)
    #pragma config FWDTEN = OFF                     // Watchdog Timer Enable bit (Watchdog timer enabled/disabled by user software)
    
    // FPOR
    #pragma config FPWRT = PWR128                   // Power-on Reset Timer Value Select bits (128ms)
    #pragma config BOREN = ON                       // Brown-out Reset (BOR) Detection Enable bit (BOR is enabled)
    #pragma config ALTI2C1 = ON                     // Alternate I2C pins for I2C1 (ASDA1/ASCK1 pins are selected as the I/O pins for I2C1)
    #pragma config ALTI2C2 = OFF                    // Alternate I2C pins for I2C2 (SDA2/SCK2 pins are selected as the I/O pins for I2C2)
    
    // FICD
    #pragma config ICS = PGD1                       // ICD Communication Channel Select bits (Communicate on PGEC1 and PGED1)
    #pragma config RSTPRI = PF                      // Reset Target Vector Select bit (Device will obtain reset instruction from Primary flash)
    #pragma config JTAGEN = OFF                     // JTAG Enable bit (JTAG is disabled)
    
    // FAS
    #pragma config AWRP = OFF                       // Auxiliary Segment Write-protect bit (Auxiliary program memory is not write-protected)
    #pragma config APL = OFF                        // Auxiliary Segment Code-protect bit (Aux Flash Code protect is disabled)
    #pragma config APLK = OFF                       // Auxiliary Segment Key bits (Aux Flash Write Protection and Code Protection is Disabled)

    PORTDbits.RD2 = !PORTDbits.RD2; est la juste pour faire clignoter une led. Je voulais voir si je rentrais bien dans l'interruption.

  12. #11
    spown

    Re : Simulation MPLAB X Stopwatch

    Et cette LED tu la vois clignoter en vrai ?
    Si ton gCpt est de type int, il va jamais dépasser 65535.

    Donnes le code complet je vais le tester chez moi.

    L'information en goutte à goutte démotive les gens de répondre.

Discussions similaires

  1. MPLAB X IDE et simulation
    Par invite1f39ae77 dans le forum Électronique
    Réponses: 3
    Dernier message: 12/11/2013, 22h20
  2. Simulation microcontroleur PIC & MPLAB
    Par invite83d62f95 dans le forum Électronique
    Réponses: 2
    Dernier message: 10/06/2011, 18h45
  3. Pb MPLAB Simulation
    Par invite3c35244f dans le forum Électronique
    Réponses: 3
    Dernier message: 27/07/2010, 09h15
  4. simulation sur MPLAB
    Par invitea045cfc8 dans le forum Électronique
    Réponses: 49
    Dernier message: 13/06/2010, 22h34
  5. Simulation Mplab
    Par invite6844fe5f dans le forum Électronique
    Réponses: 2
    Dernier message: 23/04/2010, 20h15
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...