Une autre routine de pilotage d'encodeur en quadrature
Encore une autre façon de gérer un encodeur en asm.
Cette fois avec le principe du tableau 4x4 , tous les états précalculés inscrits dans le tableau: 1 pour sens H (horaire), 0xff pour le sens AH (anti horaire), 0 pour immo (immobile) et 0 pour erreur (rebond). C'est le principe utilisé en
industrie pour l'asservissement des gros servomoteurs entre-autres. Pas d'équations, tout est précalculé, cette fois on travaille directement en lisant le tableau.
En abscisse les états au moment T, en ordonnée les états T-1, on fait un ou logique entre l'état T-1 et l'état T et on s'en sert comme offset pour aller lire dans le tableau.
Exemple en sens AH:
Etat logique T-1=10 -> bits_old=xxxx10xx, état logique T-1=11 -> bits_new=xxxxxx11 (voir dans le code l'organisation de bits_new et bits_old)
ou logique avec les deux valeurs: xxxx10xx or xxxxxx11= xxxx1011
On obtient en scrutant le tableau xxxx1011 (11 décimal), la valeur 0xff
On additionne 0xff à ptr codé sur 1 octet, ce qui revient à faire ptr-1.
La gestion d'une erreur:
Le tableau reflète la table de vérité de l'encodeur, si par exemple en sens AH (anti-horaire) on est T-1=11, le tableau attend T=01, si c'est la valeur 11 lue sur les pins de
l'encodeur çà signifie qu'on est immobile, si c'est une autre valeur que 11 ou 01 on est en erreur (un rebond ou parasite), dans ces deux cas ptr n'est pas incrémenté ou décrémenté.
Ca ne fonctionne que pour le premier rebond mais c'est déjà çà, les autres riquent d'être lus comme bons ou erreurs, d'ou la nécessité de bien filtrer les pins encodeur.
C'est aussi simple que cela. Pour que la routine soit portable j'ai placé toutes les variables et le transfert
des datas en ram à n'utiliser qu'une fois en initialisation dans un fichier .inc, la routine à appeler pour piloter l'encodeur dans un fichier .asm séparé.

Le fichier .inc à placer au début du main à un endroit ou il ne sera lu qu'une fois.
La routine .asm à appeler pour lire l'encodeur, elle retourne les bits H (sens horaire), AH (sens anti-horaire) et immo (immobile), ainsi que la variable ptr qui contient le nombre de ticks générés.