Conversion Timer ==>temps

flolarajasse Messages postés 115 Statut Membre -  
lermite222 Messages postés 9042 Statut Contributeur -
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
Configuration: Windows XP
Firefox 3.5.7

3 réponses

  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    Si j'ai compris...je ne connaîs plus le C mais comme tu demande l'algo, le voila en VB
    Sub HMS()
    Dim NbS As Long
    Dim Heure As Double, Minute As Double, Seconde As Integer
        NbS = 39080
        Heure = Fix(NbS / 3600)
        Minute = Fix((NbS - (Heure * 3600)) / 60)
        Seconde = NbS - (Heure * 3600) - (Minute * 60)
    End Sub

    Résultat >> 10:51:20

    A+
    0
  2. flolarajasse Messages postés 115 Statut Membre 14
     
    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 n'est pas égal à 500ms( moitié de ma période).Si vous voyez d'où mon erreur provient, faites signe.

    Merci =)
    0
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Ca change tout a fait de ce que tu dis dans ton premier poste !!
    Tu dois mettre la période de saisie à 0,001 seconde au lieu de 1seconde et adapter les calculs en fonctions.
    Mais avec les arguments que tu donne tu devrais avoir des résultats en 1000ièm de seconde .. Non ?
    NB : il y une API windows qui peu te calculer ça façilement. J'ai pas le nom sous la main mais si ça t'intéresse je la rechercherais.
    Edit : l'API c'est...
    Public Declare Function GetTickCount Lib "kernel32" Alias "GetTickCount" () As Long

    Calcul en millionième de seconde
    0