Conversion Timer ==>temps

Fermé
flolarajasse Messages postés 103 Date d'inscription jeudi 12 novembre 2009 Statut Membre Dernière intervention 23 juin 2011 - 16 févr. 2010 à 12:42
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 - 16 févr. 2010 à 14:03
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
A voir également:

3 réponses

lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
16 févr. 2010 à 13:29
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
flolarajasse Messages postés 103 Date d'inscription jeudi 12 novembre 2009 Statut Membre Dernière intervention 23 juin 2011 14
16 févr. 2010 à 13:31
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
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
16 févr. 2010 à 14:03
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