Bascom Menüsteuerung mit Drehimpulsgeber

OP #2708409
Lesenswert?

Hallo,

ich bin gerade dabei eine Menüsteuerung in Bascom zu erstellen, welches 
man mit einem Drehencoder bedient. Per Taster klappt die Menüsteuerung 
schon sehr gut, nur mit dem Drehencoder will das nicht hinhauen.

Drehencoder ist ein ALPS von Reichelt (STEC12E08. Dieser wird per 
Timerinterrupt periodisch abgefragt (ca. jede ms). Alleine bekomme ich 
den Drehencoder auch schon ganz gut abgefragt, wenn er bloß einen Wert 
erhöhen bzw. verkleinern soll. Also bei Drehung nach Rechts Incr Zahl 
und nach links eben Decr Zahl.

Jetzt will ich statt den Tastern für das Menü den Drehencoder benutzen 
(Drehung nach rechts, geht der Cursor nach unten und drehung nach Links 
geht der Cursor nach oben)

Funktioniert in dem Programm, welches im Anhang dabei ist auch schon. 
Nur eben nicht sauber. Sozusagen nur jede zweite oder dritte 
Rasterstellung bewirkt eine Änderung des Cursors. Manchmal aber auch 
schon nach einer Rasterung - So wie es sein soll.

Der Fehler liegt wahrscheinlich darin, dass ich bei einem 
Zustandswechsel des Drehencoders eine Variable setze, die dann in der 
Menüroutine in eine Aktion (Cursor rauf oder runter) verwandelt wird und 
dann die Variable wieder Resetet.

Da der Interrupt das Programm aber an jeder beliebigen Stelle anhällt um 
nach dem Drehencoder zu sehen, dann kann es schonmal vorkommen, dass ich 
den Encoder betätige, die Variable gesetzt wird, aber in der Menüroutine 
ohne Aktion gleich wieder resettet wird.

Also so:

Timer fragt Encoder ab...
Timerroutine bemerkt Zustandsänderung - Auswertung - Dreencoder nach 
Rechts gedreht - Variable = 1

Zurück im Programm:

Wenn Variable = 1 dannn Cursor hoch
Danach Variable = 0

Wenn jetzt aber der Interrupt genau dazwischen einsetzt:

Wenn Variable = 1 dannn Cursor hoch
Interrupt wird abgefragt und Variable wird auf 1 gesetzt
Danach Variable = 0

Dann kann das klar nicht funktionieren.


Nur wie bekomme ich es sonst hin. Wahrscheinlich ist es so einfach aber 
ich steh grad total auf dem Schlauch. Über einen kleinen Gedankenschubs 
wäre ich sehr Dankbar
Angehängte Dateien:
#2708586
Lesenswert?

@  Florian H. (heringflorian)

>Der Encoder Befehl von Bascom funktioniert mit diesem ALPS Encoder
>nicht, da dieser mehr als nur einen Tick pro Rasterung bringt.

Auch dieses Problem ist lösbar, auch mit dem Encoderbefehl.

>Mit Prellen habe ich eigentlich kein Problem. 10nF Kondensatoren
>Parallel zu den Ausgängen nach Masse bewirken Wunder ;)

Un verbrutzeln dir langsam aber sicher deine Kontakte. Nicht sinnvoll.
OP #2708637
Lesenswert?

Viele Wege führen nach Rom....

Ich könnte das auch mit dem Bascom Encoder Befehl realisieren. Aber 
siehe mein erster Satz.

Habe ausßerdem gerade festgestellt, das die Kondensatoren eigentlich gar 
nicht nötig wären. Funktioniert auch ohne genauso gut wie mit.

Einerseits hast du recht mit dem Kontakteverbruzeln abere andererseits 
haben 10nF bei 5 Volt nicht so die Zerstörungswut. Wäre was anderes wenn 
da ein 1 F Kondensator dran hängen würde. Dann wären die Kontakte beim 
ersten mal hinüber :D
OP #2708659
Lesenswert?

Und wenn man keinen Widerstand nimmt, dann würde der Entladestrom 
Theoretisch unendlich hoch sein... (Der für Nano/Picosekunden anliegt) 
Meine Kontakte bei meinen Tasten müssten eigentlich schon alle hinüber 
sein. Tausende betätigungen und funktionieren noch tadellos.

Mache das so nach Empfehlung von einem Bascom Fachbuch.

Aber wie gesagt, habe gerade herausgefunden, dass es auch ohne 
Kondensator funktioniert und somit wird ohne Kondensator betrieben.

Nur hilft das bei meinem Problem nicht weiter...
Gast #2709138
Lesenswert?

Hallo,

Im zugehörigen Datenblatt gibt es übrigends einen Schaltungsvorschlag, 
der das Prellen verringern soll und gleichzeitig den Strom stark 
begrenzt.

Nur der Vollständigkeit halber und wenn man unnötig viele Bauteile 
verbraten will.

Gruss
Gast #2709149
Lesenswert?

ich habe jetzt dein Programm nicht angeschaut, aber so wie du 
beschreibst, setzt du im interrupt ein Flag und resettest in der Main.

Nun wird die Durchlaufzeit der Main mit jeder Aktion, die du in Main 
durchführst länger werden und die Bedienung holperiger.

Wieso nicht auf bestehendes zurückgreifen.

Ich habe das damals so gemacht:

- Als Menü das Bascom State Machine Menü hier aus dem Forum.
- die Drehgeberauswertung vom noch lachenden Peter Dannegger, welche 
hier oder in anderen Forum auch als Bascom-Version vorliegt genommen.
- und zusätzlich, falls es um irgendwo um Veränderung von Werten in 
Größenordnungen geht, einen C-Schnipsel welcher eine "Beschleunigung des 
Drehgebers" umsetzt nach Bascom portiert.

Schlussendlich: Das Menü läuft prima und die beiden Drehgeber damals, 
welche Pro Umdrehehung 32 Ticks schafften, ließen sich mit einem 
Handdreh (geschätzte 270°) gut 400 Werte weiterstellen - wobei auch das 
Zifferngenaue Einstellen nicht verlorenging.
Persönliche Seite #2709154
Lesenswert?

Florian H. schrieb:
> Aber wie gesagt, habe gerade herausgefunden, dass es auch ohne
> Kondensator funktioniert und somit wird ohne Kondensator betrieben.

Das ich nicht lache...

Hier mal meine Erfahrung mit Drehimpulsgebern:


Ich habe bei meiner Modellbahnanlage eine Mobile Station 1 von Märklin 
als Fahrgerät im Einsatz (gehabt). Mit dem Drehimpulsgeber steuert man 
durch die Menüs und regelt die Geschwindigkeit der Züge. Die ersten 
Monate lief das auch super und ohne Prellen. Aber dann ging es los. Erst 
prellte es nur ein wenig, dann immer mehr. Und heute prellt es so stark, 
das die Bewegung um 1 Ritzeel wie eine 3 mal 360° Drehung verarbeitet 
wird. Das ist besonders lustig, wenn man einen Zug langsam anhalten will 
und das Ding rast aufeinmal mit Fullspeed los.
Gast #2709159
Lesenswert?

Florian H. schrieb:
> Und wenn man keinen Widerstand nimmt, dann würde der Entladestrom
> Theoretisch unendlich hoch sein...

Dann ist deine Theorie falsch und berücksichtigt nicht die Realteil der 
Impdanz deines Kondensator, die Induktivität deiner Verdrahtung und den 
gerade in der ersten, erodierenden Phase beim Schließen des Kontakts. 
Ein Stombegrenzungswiderstand in Serie zum Kontakt würde das Übel des 
Designs abmildern.
OP #2709326
Lesenswert?

@Werner: Deswegen ja Therotisch ;) Und Theoretisch und Realität haben 
oft nichts miteinander zu tun. Klar auch die Leitungen haben Widerstand 
usw. usf.

@Frageknoedel

Frageknoedel schrieb:
>>Mache das so nach Empfehlung von einem Bascom Fachbuch.
>
> darf man fragen, welches?

Das blaue von Stefan Hoffmann. Da wird die Methode mit den Kondensatoren 
beschrieben. Natürlich auch die mit Softwareentprellung.


Komisch jeder hackt hier grad auf meinen Anschluss des Drehgebers an den 
µC rum aber da komme ich bei meinem (Haupt)Problem nicht weiter.

Bascom schrieb:
> ich habe jetzt dein Programm nicht angeschaut, aber so wie du
> beschreibst, setzt du im interrupt ein Flag und resettest in der Main.
>
> Nun wird die Durchlaufzeit der Main mit jeder Aktion, die du in Main
> durchführst länger werden und die Bedienung holperiger.
>
> Wieso nicht auf bestehendes zurückgreifen.
>
> Ich habe das damals so gemacht:
>
> - Als Menü das Bascom State Machine Menü hier aus dem Forum.
> - die Drehgeberauswertung vom noch lachenden Peter Dannegger, welche
> hier oder in anderen Forum auch als Bascom-Version vorliegt genommen.
> - und zusätzlich, falls es um irgendwo um Veränderung von Werten in
> Größenordnungen geht, einen C-Schnipsel welcher eine "Beschleunigung des
> Drehgebers" umsetzt nach Bascom portiert.
>
> Schlussendlich: Das Menü läuft prima und die beiden Drehgeber damals,
> welche Pro Umdrehehung 32 Ticks schafften, ließen sich mit einem
> Handdreh (geschätzte 270°) gut 400 Werte weiterstellen - wobei auch das
> Zifferngenaue Einstellen nicht verlorenging.

Endlich mal ein Anhaltspunkt. Würdest du mir dein Programm mal schicken, 
damit ich mir das anschauen kann?
Gast #2709379
Lesenswert?

"Das blaue von Stefan Hoffmann. Da wird die Methode mit den 
Kondensatoren
beschrieben."
Von Kondensatoren sehe ich da nichts aber es werden erfreulicherweise 
verschiedene Methoden (Encoder-Befehl, 1 Interrupt, 2 Interrupts, 
Timer') vorgestellt. Kurz und knackig - so wie man es braucht. 
Super-Anregungen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren