Da du den Encoder ja nicht soooo schnell drehen kannst, würde ich ohne Interrupt einfach die A-B Pins regelmäßig abfragen und zusammen mit dem vorherigen Wert über eine Lookup-Tabelle auswerten.
Hallo!
Folgendes:
Ich bastel ja an meiner Wetterstation rum. Komme auch Schritt für Schritt voran.
Nun habe ich den Wunsch ein Menü mittels DrehEncoder steuern zu können.
So weit so gut. Habe schon den Encoder-Befehl von Bascom ausprobiert, der macht aber 4 Impulse aus einer Rastung.
Deswegen habe ich mittels D-FF Eine Richtung und einen Takt erzeugt.
Den habe ich auch mittels debounce-Befehl ausgewertet und funktioniert. Leider werden oft Impulse verschluckt weil die Schleife zu lange dauert.
Ich habe mir gedacht das ganze mittels Interrupt zu lösen. Leider habe ich allerdings auch eine DCF77 mit dranhängen, wo ja auch ein interner Interrupt jede sekunde ausgelöst wird.
Ich möchte jetzt nicht wenn ich den Encoder drehe zufällig den Interrupt stören und Sekunden verlieren.
Und Prioritäten kann man ja anscheinend auch nicht vergeben.
Hat da jemand Erfahrungen wie man sowas lösen kann?
Vielen Dank
Marten83
Da du den Encoder ja nicht soooo schnell drehen kannst, würde ich ohne Interrupt einfach die A-B Pins regelmäßig abfragen und zusammen mit dem vorherigen Wert über eine Lookup-Tabelle auswerten.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Das geht leider nicht.
Nach jeder Rastung habe ich wieder die gleiche Schalterstellung im Encoder.
Ich probier das jetzt einfach so mit dem Interrupt. Auf ne Sekunde kommt es ja auch nicht an.
Hallo Marten83,
ich hatte das Problem, dass bei meinem Encoder immer zwei Impulse aus einer Rastung gemacht wurden. Ich habe das so gelöst:
Code:_left: Toggle Encbit If Encbit = 1 Then Decr Enc_temp End If Return _right: Toggle Encbit If Encbit = 1 Then Incr Enc_temp End If Return
Gruß, Stefan
Danke für die Anregung.
Ich kann mir das so auf die schnelle nicht mit deinem Encbit zusammenreimen, aber ich habe das bei mir jetzt mit Interrupt gemacht und funktioniert bestens.
Wenn mal n Sekündchen verloren geht (doch selten)
Dann wird es durch das DCF77-Signal ja wieder ausgeglichen.
Hier mein Code (wen's interessiert):
Vielen Dank an AlleCode:Enable Interrupts Config Int0 = Rising Enable Int0 On Int0 Prog ... Prog: Waitus 200 'Wichtig, da das D-FF erst nach einem Takt die Richtung aktualisiert Set C 'Merkerbit zum löschen des Displays If Pind.1 = 0 Then Rotate Anzeige , Left Else Rotate Anzeige , Right End If Return
Marten83
Hallo Marten83,
Encbit ist ein Flag (bit), welches pro Impuls getoggelt wird. Bei jedem zweiten Impuls wird eine Variable hoch oder runtergezählt.
Gruß, Stefan
Hallo,
sorry das ich den alten Thread nochmal ausgrabe.
Aber ich hab auch das Problem das ich immer mind. 2-3 impulse bei einer Rasterung bekomme.
Es kommt zwar gleich die "links" Antwort aber kurze danach eine "rechts" beim linksdrehen. Genau so aber umgekehrt in der anderen Richtung...
Ist das dann sowas ähnliches wie Entprellen ?
Wie kann ich das Problem beheben ?
Ich benutze den Encoder-Befehl ziemlich genau so wie er in der Hilfe steht.
Vielen Dank im voraus !
M.f.G.
Jürgen
Lesezeichen