mode capture sur dsPIC
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

mode capture sur dsPIC



  1. #1
    invitef3ff390d

    mode capture sur dsPIC


    ------

    bonjour,

    j'utilise le dsPIC33fj256gp710, je dois réaliser un programme avec le mode capture pour pouvoir lire une fréquence. le problème est que mon programme ne passe pas la boucle de capture et je ne comprends pas pourquoi. pouvez vous m'aider à trouver l'erreur svp?
    voici le code utilisé:


    //cette fonction fonctionne
    void Frequency(uint32 frequency )
    {
    uint32 periode;

    if (frequency >= 200)
    {
    T1CONbits.TCKPS=1;
    periode= (0.5* 10000000) / frequency ;
    PR1= periode / (4* 0.25 * T1CONbits.TCKPS);
    PR1=PR1/2;
    }

    if (frequency < 200)
    {
    T1CONbits.TCKPS=2;
    periode= (0.5* 10000000) / frequency ;
    PR1= periode / (4* 0.25 * T1CONbits.TCKPS);
    PR1=PR1/8;
    }

    if (frequency <= 50)
    {
    T1CONbits.TCKPS=3;
    PR1= (77000/frequency);
    }

    }



    // initialisation du timer 2 qui me sert dans la capture
    void Init_timer2( void )
    {
    TMR2 = 0; // clear timer1 register
    PR2 = TMR2_PERIOD; // set period1 register
    T2CONbits.TCS = 0; // set internal clock source
    T2CONbits.TCKPS = 0; // set prescaller div by 1


    IFS0bits.T2IF = 0; // clear interrupt flag
    IEC0bits.T2IE = 1; // enable interrupts
    SRbits.IPL = 3; // enable CPU priority levels 4-7
    T2CONbits.TON = 1; // start the timer
    }



    // initialisation de la capture
    void init_capture ()
    {
    IC1CONbits.ICM = 0b00; // Disable Input Capture 1 module
    IC1CONbits.ICTMR = 1;
    IC1CONbits.ICI = 0b11; // Interrupt on every second capture event
    IC1CONbits.ICM = 0b011;
    IC1CONbits.ICBNE = 0;
    IC1CONbits.ICOV = 0;
    IC1CONbits.ICSIDL = 0;
    IPC0bits.IC1IP = 1; // Setup IC1 interrupt priority level
    IFS0bits.IC1IF = 0; // Clear IC1 Interrupt Status Flag
    IEC0bits.IC1IE = 1;

    }


    unsigned int timePeriod= 0;

    void __attribute__((__interrupt__, no_auto_psv)) _T2Interrupt(void)
    {
    IFS0bits.T2IF = 0;
    }


    // aparament le pb se trouve dans cette boucle car le compilateur MPLab ne passe pas dedans
    void __attribute__((__interrupt__, no_auto_psv)) _IC1Interrupt(void)
    {
    unsigned int t1,t2,frequence;
    t1=IC1BUF;
    t2=IC1BUF;
    IFS0bits.IC1IF=0;

    timePeriod = t2-t1;
    frequence= 1 / timePeriod;

    }





    int main(void)
    {
    int frequence;
    // Effacer toutes les interruptions
    clearIntrflags();

    // Initialiser le timer1
    Init_timer();

    Init_timer2();

    init_capture ();


    je vous remercie de l'aide que vous pourrez m'apporter

    -----

  2. #2
    RISC

    Re : mode capture sur dsPIC

    Salut,

    Il existe des exemples de code pour les dsPIC33 pour la plupart des périphériques.
    Tu trouveras certainement quelquechose concernant le mode capture ici : http://www.microchip.com/codeexamples

    D'autre part je te conseille d'utiliser un dsPIC33FJ256GP710A plutôt qu'un dsPIC33FJ256GP710 car il posède moins de bugs.

    a+

  3. #3
    invitef3ff390d

    Re : mode capture sur dsPIC

    j'ai déjà fait le tour des datasheet et autres j'ai les méme config et pourtant ça ne marche pas

Discussions similaires

  1. Mode capture PIC
    Par krimo-30 dans le forum Électronique
    Réponses: 18
    Dernier message: 20/11/2013, 23h33
  2. Dspic mode veille
    Par invitebd0c1fdf dans le forum Électronique
    Réponses: 3
    Dernier message: 05/06/2010, 16h30
  3. mode capture CCPx
    Par invite69641788 dans le forum Électronique
    Réponses: 2
    Dernier message: 20/05/2010, 22h31
  4. Mode capture sur 18F
    Par invited6358b87 dans le forum Électronique
    Réponses: 0
    Dernier message: 24/02/2007, 16h54
  5. mode capture du PIC16F627 ?
    Par invite164b8116 dans le forum Électronique
    Réponses: 3
    Dernier message: 03/10/2006, 18h39
Découvrez nos comparatifs produits sur l'informatique et les technologies.