Salut à tous !
Comme le titre l'indique j'ai un petit souci avec un programme que j'ai réalisé. C'est un programme qui utilise le mode capture pour mesurer le temps entre 2 fronts montant et de la en déduire la fréquence par un calcul. Le programme fonctionne jusqu'au débordement du timer, une fois que le timer déborde, je n'ai plus la bonne valeur de la fréquence, c'est pour cela que je vous demande de l'aide pour voir si j'ai mal configuré quelquechose. J'utilise Mplab le compilateur c18 et je travaille sur un pic 18f6520.
Je joint un bout de mon code ou je montre comment je gere mon timer et débordement:
voici ce qu'il y a dans le mainCode:void itcomp(void) { if(PIR1bits.CCP1IF) // l'IT provient d'une capture { duree=CCPR1-ancien; // comptage entre les deux front ancien=CCPR1; // mémorise le CCPR1 actuel maj=1; // nouvelle mesure prete } PIR1bits.CCP1IF=0; //efface le drapeau d'IT if(PIR1bits.TMR1IF) // IT provient d'un débordement { temps++; // Incrémente la variable temps } PIR1bits.TMR1IF=0; // Efface le drapeau d'IT }
Encore une fois le code n'est pas complet je n'ai pas mis que sa dans mais c'est juste le débordement qui me parait etre bien géré mais je ne sait pas ce qu'il se passe sa ne fonctionne pas.Code:T3CONbits.T3CCP2=0; // mode comparaison entre TMR1 et CCPR1 CCP1CON=0x05;// capture mode sur fronts montants PIE1bits.CCP1IE=1;// active IT sur mode capture CCP1 RCONbits.IPEN=1; // Interruption prioritaires activées PIE1bits.TMR1IE=1; PIR1bits.TMR1IF=1; IPR1bits.TMR1IP=1; INTCONbits.GIE=1;// Toutes les IT démasquées autorisées TMR1H=0; TMR1L=0;
En tout cas merci à tous ceux qui prendront le temps de lire mon message (et oui, il est super long ) et de me répondre.
-----