Bonjour, j'ai un encodeur type code gray de façon à déterminer le sens de rotation.
J'utilise deux entrées du micro qui ont des interruptions dédiées (INTO et INT1).
Pour moi lorsque le sens change, on à la même sortie qui change d'état deux fois de suite, mes interruptions se font sur front montant ou descendant, voici le code:
Si on alterne int0 et int1 les variables incrémentées ne peuvent pas arriver à deux.Code:interrupt[2] void int0() //interruption sur INT 0 { var_a++; // incrementation de a if(var_a>=2)sens=1; // si on passe deux fois dans cette boucle on change de sens var_b=0; // remise à 0 de b } interrupt[3] void int1() //interruption sur INT 1 { var_b++; if(var_b>=2)sens=0; // si on passe deux fois dans cette boucle on change de sens var_a=0; }
Lorsqu'on change de sens on passe deux fois dans une interruption et là le sens change.
Mon problème est que lorsque je fait tourner dans le même sens ma variable "sens" change quand même.
J'ai l'impression que mon micro loupe des interruptions et donc ne remet pas les variables à 0, du coup il change de sens.
Comment je peut remédier à ça?
NB: en pièce jointe le schéma de câblage.
Merci.
-----