Static
08.04.2006, 11:12
Ich hab mir aus ner Maus eine Gabellichtschranke und so ein encoder Rad (in diesem Fall ein Zahnrad) ausgebaut.
Die Lichtschranke beinhaltet zwei Sensoren die Nebeneinander liegen. Ich kriege also pro Zahn der sich durch die Lichtschranke bewegt zwei versetzte Impulse. Jetzt würde ich nur gern wissen, wie ich aus diesem Signal die Drehrichtung am elegantesten ermitteln kann.
Hab schon einiges versucht und auch hier im Forum gesucht, aber irgendwie klappt das nich so wie ich mir das gedacht habe.
Ich habs jetzt so programmiert, dass bei jeder H/L Flanke an einer der Beiden Lichtschranken ein Interrupt ausgelöst wird. In diesem Interrupt wird geprüft ob der Zahn schon bei der anderen Lichtschranke vorbeigekommen ist und wenn ja der Zähler dementsprechend erhöht. Wenn nein wird ein Flag gesetzt, damit die andere Interruprroutine von der 2. Lichtschranke dann weiß, dass der Zacken bereits bei der ersten Lichtschranke war.
Onint0:
'Int0-Routine
If Hl1 = 1 Then
Incr Count
D = 1
Hl0 = 1
Hl1 = 0
Gosub Anzeige
Else
Hl0 = 1
End If
Return
Onint1:
If Hl0 = 1 Then
Decr Count
D = 1
Hl0 = 0
Hl1 = 1
Gosub Anzeige
Else
Hl1 = 1
End If
Return
Hat jemand eine einfachere Idee oder am besten auch ein Beispiel Code, wie man die Drehrichtung mit so einer Doppellichtschranke feststellen kann?
Die Lichtschranke beinhaltet zwei Sensoren die Nebeneinander liegen. Ich kriege also pro Zahn der sich durch die Lichtschranke bewegt zwei versetzte Impulse. Jetzt würde ich nur gern wissen, wie ich aus diesem Signal die Drehrichtung am elegantesten ermitteln kann.
Hab schon einiges versucht und auch hier im Forum gesucht, aber irgendwie klappt das nich so wie ich mir das gedacht habe.
Ich habs jetzt so programmiert, dass bei jeder H/L Flanke an einer der Beiden Lichtschranken ein Interrupt ausgelöst wird. In diesem Interrupt wird geprüft ob der Zahn schon bei der anderen Lichtschranke vorbeigekommen ist und wenn ja der Zähler dementsprechend erhöht. Wenn nein wird ein Flag gesetzt, damit die andere Interruprroutine von der 2. Lichtschranke dann weiß, dass der Zacken bereits bei der ersten Lichtschranke war.
Onint0:
'Int0-Routine
If Hl1 = 1 Then
Incr Count
D = 1
Hl0 = 1
Hl1 = 0
Gosub Anzeige
Else
Hl0 = 1
End If
Return
Onint1:
If Hl0 = 1 Then
Decr Count
D = 1
Hl0 = 0
Hl1 = 1
Gosub Anzeige
Else
Hl1 = 1
End If
Return
Hat jemand eine einfachere Idee oder am besten auch ein Beispiel Code, wie man die Drehrichtung mit so einer Doppellichtschranke feststellen kann?