Conversion Timer ==>temps
Répondre à la discussion
Affichage des résultats 1 à 17 sur 17

Conversion Timer ==>temps



  1. #1
    flolarajasse

    Question Conversion Timer ==>temps


    ------

    Bonjour,
    J'ai réalisé un programme en C qui est censé calculer la durée entre 2 impulsions sur une patte de mon PIC(signal carré fournit grâce à un GBF, fréquence quelconque).Pour cela, je me suis servit du Timer1 de mon PIC.Exemple, lorsque je suis à 1Hz, le programme m'affiche 39080 ; ma question est : quelle est l'équation qui permet de trouver la durée entre mes deux impulsions?(logiquement 1Hz donc 1 seconde)!
    Je peux vous poster le programme si vous voulez.
    Merci

    -----

  2. #2
    louloute/Qc

    Re : Conversion Timer ==>temps

    男人不坏,女人不爱

  3. #3
    Jojop37

    Re : Conversion Timer ==>temps

    Bonjour.
    Les 39080 affichés,ne correspondraient-ils pas au rapport fréquence lue/horloge interne?
    A+
    Jojop37
    Jojop37

  4. #4
    sdec25

    Re : Conversion Timer ==>temps

    A quoi ça sert de poster 2 fois la même chose ?
    http://forums.futura-sciences.com/el...ons-pic-4.html
    Tu n'as pas eu de réponse à 11h alors tu repostes une heure après ? Sauf que maintenant il y a une réponse sur l'autre topic.
    Les doublons sont interdits, et c'est très désagréable de poster une réponse et de voir qu'il y a la même question ailleurs.

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

    Re : Conversion Timer ==>temps

    pardon à 1Hz il affiche 59300 cycles. J'ai procédé à quelques calculs mais je ne retombe pas sur mes pattes :
    Fréquence interne =40MHz /4/8(pré-diviseur réglé à 8 dans mon programme)
    =1,25MHz ==> donc la durée d'un cycle est 0,8µs.
    Or 59300 cycles * 0,8µs = 47.7ms donc n'est pas égal à 500ms( moitié de ma période).Si vous voyez d'où mon erreur provient, faites signe.

    Merci =)

  7. #6
    sdec25

    Re : Conversion Timer ==>temps

    timer 16 bits : valeur max = 65535

  8. #7
    flolarajasse

    Re : Conversion Timer ==>temps

    Je sais que la valeur max =65535.Mais pourquoi est-ce que mes calculs ne correspondent pas?

  9. #8
    sdec25

    Re : Conversion Timer ==>temps

    Citation Envoyé par flolarajasse Voir le message
    Je sais que la valeur max =65535.Mais pourquoi est-ce que mes calculs ne correspondent pas?
    500 ms correspond à combien de cycles ?

  10. #9
    flolarajasse

    Re : Conversion Timer ==>temps

    Citation Envoyé par sdec25 Voir le message
    500 ms correspond à combien de cycles ?
    Petite rectification ; Fréquence interne =48MHz /4/8 =1,5MHz.
    Donc durée d'un cycle est égale à 0.67µs.

    500ms correspond à 746268 cycles?euh...il y a une légère erreur là,non?

  11. #10
    sdec25

    Re : Conversion Timer ==>temps

    Citation Envoyé par flolarajasse Voir le message
    500ms correspond à 746268 cycles?euh...il y a une légère erreur là,non?
    Non il n'y a pas d'erreur. 48 Mhz c'est rapide et 500ms c'est beaucoup.
    Et sinon mesurer le temps entre un front montant et un front descendant ce n'est pas fiable, si tu n'as pas un signal avec rapport cyclique de 50% ça ne fonctionne pas pour mesurer la période.

  12. #11
    flolarajasse

    Re : Conversion Timer ==>temps

    Je ne veux pas mesurer la période, juste la durée entre un front montant et un front descendant...

  13. #12
    flolarajasse

    Re : Conversion Timer ==>temps

    Bonjour,
    Quelqu'un peut il m'aider?
    Je vais utiliser la méthode de compter le nombre de débordements du Timer1,(étant donné que mes résultats ne concordent pad) mais je galère un peu.Quand faut-il que j'incrémente ma variable "nb_debordements"?Dans mon interruption?Dans le main?Désolé je n'ai encore jamais utilisé cette notion de débordements...

    Merci de vos réponses
    Voici mon programme :

    unsigned int16 time = 0;
    unsigned int16 oldtime ;
    unsigned int nb_debordements;

    #int_EXT
    void EXT_isr(void)
    { disable_interrupts(GLOBAL);
    set_timer1(0); // mettre timer1 à 0
    enable_interrupts(GLOBAL);

    }

    #int_EXT1
    void EXT1_isr(void)
    { disable_interrupts(GLOBAL);
    time = get_timer1(); // on récupère la valeur de timer1
    enable_interrupts(GLOBAL);
    }

    void main(void)
    {
    enable_interrupts(GLOBAL);
    enable_interrupts(INT_EXT);
    enable_interrupts(INT_EXT1);
    ext_int_edge(0, L_TO_H); //déclencher interruption0 sur front montant
    ext_int_edge(1, H_TO_L); //déclencher interruption1 sur front descendant

    setup_timer_1(T1_INTERNAL|T1_D IV_BY_8);

    usb_init_cs(); //fonction due à l'envoi des données par USB

    do
    {
    usb_task(); //fonction due à l'envoi des données par USB
    usb_debug_task(); //fonction due à l'envoi des données par USB

    if(oldtime !=time)
    {
    printf(usb_cdc_putc,"La duree entre 2 fronts est de %lu\n\r", time);
    oldtime=time;
    }
    }
    while (TRUE);

    }



    Merci

  14. #13
    flolarajasse

    Re : Conversion Timer ==>temps

    Donc j'ai rajouté une interruption Timer1 qui incrémente une variable lors de chaque débordement mais il m'affiche des valeurs incompréhensibles par la variable "nb_debordements" :

    unsigned int16 time = 0;
    unsigned int16 oldtime ;
    unsigned int8 nb_debordements =0;

    #int_EXT
    void EXT_isr(void)
    { disable_interrupts(GLOBAL);
    set_timer1(0); // mettre timer1 à 0
    enable_interrupts(GLOBAL);

    }

    #int_EXT1
    void EXT1_isr(void)
    { disable_interrupts(GLOBAL);
    time = get_timer1(); // on récupère la valeur de timer1
    enable_interrupts(GLOBAL);
    }

    #int_TIMER1
    void TIMER1_isr(void)
    {
    disable_interrupts(GLOBAL);
    nb_debordements++;
    enable_interrupts(GLOBAL);
    }

    void main(void)
    {
    enable_interrupts(GLOBAL);
    enable_interrupts(INT_EXT);
    enable_interrupts(INT_EXT1);
    enable_interrupts(INT_TIMER1);
    ext_int_edge(0, L_TO_H); //déclencher interruption0 sur front montant
    ext_int_edge(1, H_TO_L); //déclencher interruption1 sur front descendant

    setup_timer_1(T1_INTERNAL|T1_D IV_BY_8);

    usb_init_cs();

    do
    {
    usb_task();
    usb_debug_task();

    if(oldtime !=time)
    {
    printf(usb_cdc_putc,"Nb de debordements : %d et reste %lu\n\r",nb_debordements, time);
    oldtime=time;
    }
    }
    while (TRUE);

    }


    Ma variable nb_debordements prend aussi bien des valeurs positives que négatives et qui vont à plus de 100 donc totalement illogique!

    Merci de votre aide

  15. #14
    flolarajasse

    Re : Conversion Timer ==>temps

    Problème résolu.Il faut remettre à 0 la variablr nb_debordements dans EXT_isr()

  16. #15
    sdec25

    Re : Conversion Timer ==>temps

    Personnellement j'initialiserais nb_debordements aussi quand je mets le timer à 0.
    Tu peux aussi activer les interruptions Timer1 lors d'un front montant, et les désactiver lors d'un front descendant (ou désactiver le timer 1 quand tu ne t'en sers pas).

    Sinon ta méthode est pas mal mais a un inconvénient. En supposant qu'il n'y a qu'une interruption en même temps (je crois que c'est le cas sur ton PIC) et que le temps de traitement d'une interruption est non négligeable, si l'interruption timer1 a lieu juste avant l'interruption front descendant, cette dernière va être retardée. Mais bon ce n'est pas très grave et ça n'empêche pas ton programme de fonctionner.

  17. #16
    Jojop37

    Re : Conversion Timer ==>temps

    Bonjour.
    Il ne peut y avoir de rapport entre la fréquence d'oscillation et le temps entre le font montant et descendant,mise à part qu'il n'y en aura qu'un seul par cyclecar le niveau haut peut avoir n'importe quelle durée ,mais toujours inférieure au cycle d'horloge.
    A+
    Jojop37
    Jojop37

  18. #17
    flolarajasse

    Re : Conversion Timer ==>temps

    après plusieurs opérations et suivant la fréquence du signal que tu injectes, tu trouves une tension!!!=)

Discussions similaires

  1. Conversion de base : connaître le nième chiffre sans faire toute la conversion
    Par RVmappeurCS dans le forum Mathématiques du supérieur
    Réponses: 5
    Dernier message: 02/07/2009, 19h14
  2. Timer pour gestion temps réel 18f2550
    Par Tyller dans le forum Électronique
    Réponses: 29
    Dernier message: 08/03/2009, 17h03
  3. timer
    Par invite04c4fc21 dans le forum Électronique
    Réponses: 2
    Dernier message: 24/02/2007, 13h00
  4. Timer....??
    Par bimo dans le forum Logiciel - Software - Open Source
    Réponses: 14
    Dernier message: 15/09/2006, 15h18
  5. Timer
    Par invite7814d6c5 dans le forum Électronique
    Réponses: 3
    Dernier message: 13/04/2006, 14h36
Découvrez nos comparatifs produits sur l'informatique et les technologies.