Zitat Zitat von plastikboot Beitrag anzeigen
Ich habe in einem Drehgeber (Selbstbau) zwei Hallsensoren vom Typ Siemens TLE 4905L verbaut. Es geht um die langsame Drehung einer Scheibe.
Leider gibt es jetzt Stellungen der Drehscheibe, die ein "Flackern" des Hallsensors auslösen - d.h. der Interrupt springt massiv an und zählt wie verrückt nach oben.
Ich kann leider nur mit "Change" arbeiten, damit ich die Drehrichtung mit 2 Sensoren sicher ermitteln kann. Kennt jemand eine Möglichkeit den Hallsensor zu "beruhigen"?
Das ist ein "klassisches" Problem. Es läßt sich aber lösen, wobei ein Interrupt bei Flankenwechsel nicht die Lösung ist, sondern eher zur Vergrößerung des Problems beiträgt.

Lösungen findet man hier http://http://dse-faq.elektronik-kom...e-faq.htm#F.29 oder hier http://http://www.mikrocontroller.ne...cles/Drehgeber

Eine wirkliche kurze Zusammenfassung des Codes sei hier mal kopiert:

Von: MaWin 25.7.2001

Am einfachsten realisiert man das mit einer state machine als Tabelle. In C sieht das so aus.

int table[4][4]={{0,1,-1,0},{-1,0,0,1},{1,0,0,-1},{0,-1,1,0}};
int position=0; // zaehlen wir mal die absolute Position
volatile int quadrature_input; // bit 0 und bit 1 sind Quadratureingaenge
int new_quadrature_value, last_quadrature_value=quadrature_input;

Folgenden Code ausreichend oft wiederholen (in der Programm Hauptscheife oder einer Zeitgeber gesteuerten Interrupt Routine):

new_quadrature_value=quadrature_input;
position+=table[last_quadrature_value][new_quadrature_value];
last_quadrature_value=new_quadrature_value;
MfG Klebwax