AB encoder auswerten geht problemlos mit interrupts.
Interrupt 1 für Kanal A, wird eingestellt auf Low und High Flanke,
Interrupt 2 für Kanal B, wird eingestellt auf Low und High Flanke,
In diese Interrupt fragen sie der Zustand von beide Kanalen ab, und passen dan die Zaehlerstand an :
volatile int Zaehler;
Interrupt 1{
If ((A==high)&(B==high)) Zaehler ++;
If ((A==low)&(B==high)) Zaehler --;
If ((A==high)&(B==low)) Zaehler --;
If ((A==low)&(B==low)) Zaehler ++;
}
Auf diese Weise wird Richtung auch beobachtet. Auch den Fall das ein Spur "ruckelt" wird damit sicher gestellt das nicht gezaehlt wird !
ISR Prioritäten soll man sich nicht zu fiel sorgen machen, bei Zwei Interrupts gleichzeitig, wird erst die eine, und dan die andere abgearbeitet. Bei eine 8-bitter (Arduino UNO), ist es wichtig um zu wissen das Interrupts zu jeden Zeipunkt auftreten konnen, auch wen da mit eine 16bit Zahl gerechnet werd ! Unter umstanden wird dan diese Berechnung beinflusst, wen gerade diese Variable in Interrupt geandert wird !
Variable die in ISR genutzt werden, wussen sie als "Volatile" declarieren, so das den Compiler die nicht "Weg optimiert". Z-spur Kanal ist nicht unbedingt notwendig, konnen sie verwenden für eine "Kalibrierung".
Lesezeichen