PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : DrehEncoder Problem (2 Interrupts?)



Marten83
23.08.2007, 08:47
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

PicNick
23.08.2007, 11:54
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.

Marten83
23.08.2007, 12:06
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.

StevieL
23.08.2007, 12:47
Hallo Marten83,

ich hatte das Problem, dass bei meinem Encoder immer zwei Impulse aus einer Rastung gemacht wurden. Ich habe das so gelöst:



_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

Marten83
23.08.2007, 13:07
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):

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

Vielen Dank an Alle

Marten83

StevieL
23.08.2007, 13:15
Hallo Marten83,

Encbit ist ein Flag (bit), welches pro Impuls getoggelt wird. Bei jedem zweiten Impuls wird eine Variable hoch oder runtergezählt.

Jürgen75
10.07.2008, 23:09
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