Go Down

Topic: Réalisation d'un afficheur de vitesse pour voiture (Read 3 times) previous topic - next topic

jeec

Je reviens sur l'utilisation du convertisseur fréquence/tension. Sauf erreur de ma part, c'est une solution très utile pour fabriquer un compteur de vitesse ne faisant pas appel à de l'informatique embarquée, il suffit de brancher le convertisseur sur un appareil à cadran de type voltmètre, et c'est tout.

Dans mon cas, où je passe par l'arduino, je pense que cela ne ferait que compliquer le montage, et rajouter une marge d'erreur supplémentaire.

Christian_R


Comme je le précise, il n'y a aucune interruption qui pourrait perturber le fonctionnement.

Si, à mon avis il y a un bug.
L'état du signal n'est pas connu au moment où on exécute ce bloc :
Code: [Select]
while(valBitInfoVitesse==LOW)
    {
         valBitInfoVitesse=digitalRead(bitInfoVitesse);
      }
t=micros(); 

Si on a la chance d'être sur LOW, tout ira bien, on attend bien pour sortir de la boucle le passage sur High.
Mais si on est déjà pendant un état HIGH du signal, ce bloc est sauté sans attendre.
La variable t est censée mémoriser en sortie de cette boucle l'instant précis d'un front montant.
Au lieu de ça elle va mémoriser un instant quelconque pendant un état HIGH.
Christian

jeec

#7
Dec 23, 2012, 12:46 pm Last Edit: Dec 24, 2012, 09:05 am by jeec Reason: 1
Quand je fais:
Code: [Select]

while(valBitInfoVitesse==LOW)
    {
         valBitInfoVitesse=digitalRead(bitInfoVitesse);
    }

je ne fais qu'attendre un nouveau passage à l'état haut:

Soit je suis déjà à l'état haut (cet etat haut a déjà démarré, il ne m'interesse pas), et je ne rentrerai dans la boucle que quand l'état repassera à bas.
soit je suis à l'état bas, et je rentre dans la boucle.

C'est en sortant de la boucle, alors que l'état vient de passer à haut,  que je commence mon comptage.

Christian_R


cet etat haut a déjà démarré, il ne m'interesse pas

Il faut pourtant bien s'y intéresser, car il fixe quand même une valeur de t juste après cette boucle d'attente que l'on saute, avec une mauvaise valeur qui n'est pas celle d'un front.
Christian

jeec

#9
Dec 23, 2012, 02:06 pm Last Edit: Dec 24, 2012, 09:06 am by jeec Reason: 1
Bon, je vais essayer d'expliciter un peu plus:


L'instruction "t=micros(); " est exécutée au moment du passage à l'état haut.
Il s'agit maintenant de se mettre en attente de la fin de cet état haut, ce que réalise la boucle:
Code: [Select]

while(valBitInfoVitesse==HIGH)
    {
         valBitInfoVitesse=digitalRead(bitInfoVitesse);
    }

C'est le passage à l'état bas qui fait sortir de la boucle, et qui permet maintenant de calculer la demi-période (écart de temps entre le passage à l'état haut, soit t, et le passage à l'état bas, soit le temps présent ).


J'en reviens à mon problème de base, qui me semble quand même être lié à des perturbations CEM.

Go Up