Erkennen ob eine Variable hochzählt bzw runterzählt

Gast #3892700
Lesenswert?

Hallo erstmal,

ich habe folgende Problemstellung:
mit einem Drehgeber (Datenblatt: 
http://www.pollin.de/shop/downloads/D240313D.PDF) sollte ich eine Zahl 
abspeichern jede Drehung wird dabei die Variable um 1 erhöht. Bei einer 
Richtungsänderung soll der Wert dieser Variable dann in ein Array 
abgespeichert werden und anschließend der neue Wert gezählt und bei 
einer Weiteren Richtungsänderung wieder in das Array abgespeichert 
werden. Mein Problem dabei ist, dass ich nicht weis wie ich erkenne das 
der Drehgeber die Richtung geändert und dabei den Wert abspeichern kann.

Danke schon mal im Voraus.

Mit freundlichen Grüßen,
MB
Gast #3892706
Lesenswert?

Wenn du einfach nur hoch oder runter zählst geht das gar nicht.
Wenn du den Zahlenstrahl anschaust wirst du merken, dass die 
Richtungsinformation nicht abgespeichert wird. Entweder du nimmst eine 
2. Variable oder verwendest eine Kodierung, über welche die Richtung 
bekannt ist.
Gast #3892713
Lesenswert?

Falls du aber nur wissen willst, ob du die Variable hoch oder 
runterzählen musst:
Signal B low und:
fallende Flanke A: incrementieren
steigende Flanke A: decrementieren.
Signal B high und:
steigende Flanke A: incrementieren
fallende Flanke A: decrementieren.
Gast #3892737
Lesenswert?

Das Ziel ist es einen Code über den Drehgeber eingeben zu können, dieser 
besteht aus vier Zahlen (diese werden in ein Array abgespeichert) und um 
dies zu ermöglichen wird bei z.B. einer Drehung nach rechts der in das 
Array abzuspeichernde Wert um eines erhöht, sobald nun nach links 
gedreht wird, wird der Wert in das Array abgespeichert (dabei kann der 
Wert von 0-9 gehen und der Wert wird nach der Richtungsänderung auf 0 
gesetzt) und nun wird beim links drehen runtergezählt  und der 
abzuspeichernde Wert hat einen Wert von 0- -9 und dies folgt dann 
weitere 2 Mal und am Ende sollten im Array vier Variablen stehen die ich 
wieder auslesen kann.
Gast #3892743
Lesenswert?

Die meisten Encoder haben einen Taster integriert. Wenn man nicht dreht, 
sondern auf die Achse drückt, wird der Taster betätigt und du kannst den 
Wert übernehmen. Auch der von dir verlinkte Encoder hat so einen Taster.
Also drehen, um den Anzeigewert zu ändern (hoch und runter) und wenn die 
richtige Ziffer in der Anzeige steht, drückst du auf den Encoder und der 
angezeigte Wert wird übernommen.
So wie du es vorhast, ist es (vornehm ausgedrückt) etwas unüblich.
Gast #3892911
Lesenswert?

MB schrieb:
> Das Ziel ist es einen Code über den Drehgeber eingeben zu können,
> dieser
> besteht aus vier Zahlen (diese werden in ein Array abgespeichert) und um
> dies zu ermöglichen wird bei z.B. einer Drehung nach rechts der in das
> Array abzuspeichernde Wert um eines erhöht, sobald nun nach links
> gedreht wird, wird der Wert in das Array abgespeichert (dabei kann der
> Wert von 0-9 gehen und der Wert wird nach der Richtungsänderung auf 0
> gesetzt) und nun wird beim links drehen runtergezählt  und der
> abzuspeichernde Wert hat einen Wert von 0- -9 und dies folgt dann
> weitere 2 Mal und am Ende sollten im Array vier Variablen stehen die ich
> wieder auslesen kann.

Ist doch alles kein Problem. Du musst einfach nur die Flanken auswerten. 
Dafür gibts mehere Lösungen, z.B. direkt mit IRQs. Die können aber bei 
Jitter blöde Sachen machen.
Einfacher wäre es, z.B. alle 50ms die beiden Werte auszulesen und dann 
mit den vorherigen Werten zu vergleichen.
Daraus ergibt sich die Drehrichtung. Davon abhängig kannst du entweder 
den Arraywert ändern oder zum nächsten Element springen.

Es scheint nicht gefordert zu sein, dass du keine zusätzlichen Variablen 
verwenden darfst.

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