Gerer les débordements d'un timer
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Gerer les débordements d'un timer



  1. #1
    invitead364e96

    Gerer les débordements d'un timer


    ------

    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:
    Code:
    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
    }
    voici ce qu'il y a dans le main
    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;
    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.
    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.

    -----

  2. #2
    invitead364e96

    Exclamation Re : Gerer les débordements d'un timer

    Un petit UP au passage !!!


  3. #3
    invite0c083bae

    Re : Gerer les débordements d'un timer

    Hello

    pour faire simple, tu peux incrémenter une variable à chaque débordement d'un timer. Par exemple, le timer1 qui fait 16bits.

    Sa valeur de dépassement est 65535 dans ton timer1 tu fais VariableIncremTmr1++ donc dès que le timer va dépasser 65535 la variable va passer à 1 puis 2 puis 3. Donc si par exemple ta fréquence est 128 000 tu auras la variable qui fera 1, le "reste" qui sera égale à 62465 ( 128000 - 65535) d'où pour ton calcul de fréquence :

    Fréquence = (VariableIncremTmr1 * 65535) + Reste
    = ( 1 * 65535) + 62465
    = 128 000

    Je sais pas si mon explication est assez claire mais c'est dans cette logique qu'il faut partir

    Edit : et pense bien à transtyper comme je te l'avais dit car ta variable tu vas la déclarer en 8Bits car tu feras jamais dépasser ton timer plus de 256fois et ce 8Bits tu vas le multiplier par du 16 Bits donc bien mettre (int16)VariableIncremTmr1 * 65535 ET pour être encore plus juste mettre un "Long" derrière 65535 donc pour résumer le calcul idéal ((int16)VariableIncremTmr1 * 65535L) + Reste

  4. #4
    invitead364e96

    Re : Gerer les débordements d'un timer

    Citation Envoyé par Julien21000 Voir le message
    Hello

    pour faire simple, tu peux incrémenter une variable à chaque débordement d'un timer. Par exemple, le timer1 qui fait 16bits.

    Sa valeur de dépassement est 65535 dans ton timer1 tu fais VariableIncremTmr1++ donc dès que le timer va dépasser 65535 la variable va passer à 1 puis 2 puis 3. Donc si par exemple ta fréquence est 128 000 tu auras la variable qui fera 1, le "reste" qui sera égale à 62465 ( 128000 - 65535) d'où pour ton calcul de fréquence :

    Fréquence = (VariableIncremTmr1 * 65535) + Reste
    = ( 1 * 65535) + 62465
    = 128 000

    Je sais pas si mon explication est assez claire mais c'est dans cette logique qu'il faut partir
    C'est exactement ce que j'ai fait sauf que ma variable s'apelle temps et pour le calcul je l'ai bien pris en compte mais le souci c'est qu sa ne fonctionne que quand le timer ne déborde pas sinon le calcul devient n'importe et sa change de valeur tout le temps.
    Et le timer compte jusqu'a 65536 (il faut compter le 0 nan ).
    Enfin bref sa ne fonctionne pas, j'en suis toujour au meme point.

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

    Re : Gerer les débordements d'un timer

    J'ai pas vraiment le temps de lire ton code mais tu l'affiches sur quoi ta fréquence ?

    Et 65535 car on va de 0 à 65535 donc ça fait 65536 valeurs

  7. #6
    invitead364e96

    Exclamation Re : Gerer les débordements d'un timer

    Citation Envoyé par Julien21000 Voir le message
    J'ai pas vraiment le temps de lire ton code mais tu l'affiches sur quoi ta fréquence ?

    Et 65535 car on va de 0 à 65535 donc ça fait 65536 valeurs
    Non mais ta pas compri lol, ma fréquence est dans une variable que je regarde en faisant un watch.
    Le calcul est bon car sa marche pour une valeur superieur a la limite de débordement du timer.
    Mais si j'entre une frequence ou je suis sur que le timer va déborder, sa ne marche plus, et si tu ne lit pas mon code c'est peut etre pour sa que tu ne comprend pas le probleme que j'ai.
    J'espere être clair car c'est pas facile comme sa

  8. #7
    invitead364e96

    Re : Gerer les débordements d'un timer

    Un petit UP au passage.
    Si quelqu'un sait comment les gerer je suis preneur.
    Merci A+.


Discussions similaires

  1. comment les gérer les fixations de prises et interrupteurs sur torchis + enduit terre
    Par invited6ba8fd7 dans le forum Bricolage et décoration
    Réponses: 3
    Dernier message: 12/05/2010, 17h18
  2. [Blanc] Débordements de mousse sur indesit WITXL 129
    Par invitea5e30807 dans le forum Dépannage
    Réponses: 10
    Dernier message: 25/09/2008, 22h15
  3. [Blanc] Débordements d'eau
    Par invitea5e30807 dans le forum Dépannage
    Réponses: 1
    Dernier message: 24/09/2008, 22h07
  4. Gérer la découverte d'un site majeur en paléontologie
    Par invite17b5b576 dans le forum Paléontologie
    Réponses: 1
    Dernier message: 29/04/2008, 14h55
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...