Murus
15.09.2005, 20:48
Hallo zusammen,
Ich steuer momentan ein Servo mit zwei Tastern an. Wenn man einen Taster drückt, dann macht er einen Schritt in die eine, mit dem anderen Taster macht er einen Schritt in die andere Richtung.
Nur: der macht bei einem Tastendruck z.T. gleich mehrere Schritte in die eine Richtung. Man kann zählen. Er soll 20 Schritte machen (also 20mal drücken. Nur: Er ist schon z.T. schon nach 15 Schritten am Anschlag. Der Taster prellt.
Ich mach das ganze so:
In der Do-loop-Hauptschleife wird das Servo auf seiner Position gehalten:
do
servo(1)=A
loop
Dann wird über die zwei externen Interrupts INT0 und INT1, an denen die beiden Taster hängen, der Wert von A verändert. Wenn ich also eine Taste drücke==> nen Interrupt auslöse, ändert das Servo seine Position, was es auch brav macht. Nur prellen die Taster... Es werden z.T mehrere Interrupts nacheinander ausgelöst. Und für so etwas muss man doch interrupts nehmen, oder? Geht doch gar net anders, da er ja in der Hauptschleife das Servo beschäftigen muss...
Wie entprelle ich die Sache?
Mit Waitms in der Interrupt-Schleife?? Oder gibts da auch einen Debounce-Befehl? Wie anzuwenden, falls ja?
Herzliche Grüsse
Mario
Ich steuer momentan ein Servo mit zwei Tastern an. Wenn man einen Taster drückt, dann macht er einen Schritt in die eine, mit dem anderen Taster macht er einen Schritt in die andere Richtung.
Nur: der macht bei einem Tastendruck z.T. gleich mehrere Schritte in die eine Richtung. Man kann zählen. Er soll 20 Schritte machen (also 20mal drücken. Nur: Er ist schon z.T. schon nach 15 Schritten am Anschlag. Der Taster prellt.
Ich mach das ganze so:
In der Do-loop-Hauptschleife wird das Servo auf seiner Position gehalten:
do
servo(1)=A
loop
Dann wird über die zwei externen Interrupts INT0 und INT1, an denen die beiden Taster hängen, der Wert von A verändert. Wenn ich also eine Taste drücke==> nen Interrupt auslöse, ändert das Servo seine Position, was es auch brav macht. Nur prellen die Taster... Es werden z.T mehrere Interrupts nacheinander ausgelöst. Und für so etwas muss man doch interrupts nehmen, oder? Geht doch gar net anders, da er ja in der Hauptschleife das Servo beschäftigen muss...
Wie entprelle ich die Sache?
Mit Waitms in der Interrupt-Schleife?? Oder gibts da auch einen Debounce-Befehl? Wie anzuwenden, falls ja?
Herzliche Grüsse
Mario