Hallo,
ich hab mir von csd-electronics einen Drehencoder gekauft.
Hab den jetzt an meinen Atmega16 hängen
Den A-Ausgang hab ich an einen Interrupt(INT2 da kein anderer mehr frei ist)
Ich frage in der ISR nur ab ob der B-Ausganbg 0 oder 1 ist und je nach dem springe ich zu einem label wo er die variable incrementiert oder decrementiert.
Nun mein Problem:
Im großen und ganzen funtkioniert es schon, nur überspringt er mir manchmal werte oder geht in die Falsche Richtung ( ich dreh hoch, er zählt runter) etc.
Ich vermute das es am Kontaktprellen liegt.
Nur wie kann ich das Entprellen?
Per Software hab ich mal nach dem aufruf eine kleine Pause ( 500us) eingefügt. Das bringt etwas aber es ist nicht berauschend.
Per Hardware habe ich mir gedacht kleine RC Kombinationen zwischen Encoder und Controller zu hängen.
mfg Benedikt
Also es gibt verschiedene Möglichkeiten .. aber im Prinzip läßt man einen Zähler laufen und schreibst in eine Variable pro Taste .. und schaust nach einer gewissen Zeit z.b. 100ms nach ob die Taste noch gedrückt ist und wertest das dann erst als gedrückt aus ... so kannst Du z.b. auch unterscheiden, ob die Taste kurz oder lang gedrückt wurde ... bei den Drehgebern gehst Du genauso vor, nur solltest Du einen Ausgang auf einen INT setzen und dort dann nachsehen, was der zweite Ausgang liefert .. daraus ermittelt man die Drehrichtung ...
Ich kann mir keine Signatur leisten - bin selbständig!
Hallo,
ich programmiere in Bascom.
Ich versteh nicht ganz wie ich ich den encoder entprellen soll.
Soll ich mit A einen Interrupt auslösen, dann eine zeit Starten und dann nachsehen ob B da ist oder nicht.?
mfg Benedikt
nun, mit Bascom kenn ich micht nicht aus .. das kapselt vieles ... da gabs ja oben den debounce-befehl ... wie der auch immer aufgebaut ist.
Du must halt zwei ports abfragen, einer davon sollte einen interrupt auslösen .. dann fragst Du beide ab, siehe Datenblatt des encoders weißt Du dann die Richtung ...
Ich kann mir keine Signatur leisten - bin selbständig!
Hallo,
Ich habe es mit dem debounce befehl probiert.
Nur nach einem Interruptaufruf kann ich auf dem gleichen Pin keinen Debounce befehl mehr anwenden.
Hat jemand kein Beispielprogramm für Bascom.
Würde es etwas nützen wenn ich RC-Glieder zwischen µC und Encoder schalt
mfg Benedikt
Ein RC-Glied (Tiefpass) hilft bestimmt. Du musst aber zwei Bauteile mehr verlöten.
Hallo,
Die 2 Bauteile sind egal.
Weis sonst niemand wie man so einen drehencoder per software entprelltß
Danke
mfg Benedikt
Ich kenne mich mit AVR-Mikrocontrollern zwar nicht so gut aus, aber da müsste es doch eine Möglichkeit geben Interrupts zu sperren?
Am Anfang der Interrupt-Routine sperrst du also den Interrupt und startest einen Timer welcher nach 100ms überläuft. Der Timer löst beim Overflow einen anderen Interrupt aus, in welchem du den gesperten Interrupt wieder freigibst.
Hallo,
leider kenne ich deinen Drehimplusgeber nicht.
Hochwertige funktionieren mit Lichtschranken. Da prellt normal nicht so viel.
Wenn es sich um Schalter handelt, dann könntest du das ganze doch mit Flip-Flops entprellen: Ein Ausgang am Set-Eingang des FF, der andere Ausgang am Rücksetz-Eingang. Mit einem 2ten FF könntest du dir die Richtung anzeigen lassen.
Mit einem 74HCT74 sollte das möglich sein.
CU
Rob
Lesezeichen