Forum: Mikrocontroller und Digitale Elektronik Überlauf bei Drehencoder


von feg_zeven (Gast)


Lesenswert?

Huhu.

Ich muss jetzt mal ganz doof fragen, aber wie bekomm ich bei der 
Verwendung eines Drehencoders einen "virtuellen Anschlag" am einfachsten 
hin, sodass nach 0xff nicht wieder 0x00 (und umgedreht) eingestellt 
werden kann?

viele Grüße.

von Harald W. (wilhelms)


Lesenswert?

feg_zeven schrieb:

> wie bekomm ich bei der
> Verwendung eines Drehencoders einen "virtuellen Anschlag" am einfachsten
> hin,

Indem Du Deine Auswerteschaltung oder -programm entsprechend auslegst.

von Falk B. (falk)


Lesenswert?

Durch deine Programmlogik.

1
int Posistion;
2
3
  position += read_enc();
4
  if (position < 0) position =0;
5
  if (position > 100) position =100;

von feg_zeven (Gast)


Lesenswert?

Oh, danke für den Hinweis....

von feg_zeven (Gast)


Lesenswert?

Danke Falk.

Einfache abfrage mit if hatte ich mir auch schon überlegt, aber bei 
einer unsigned Variable gibts ja kein < 0.

von Samuel C. (dragonsam)


Lesenswert?

Dann musst du eben vor dem in-/dekrementieren abfragen, ob die Variable 
ihren Grenzwert schon erreicht hat.

von Falk B. (falk)


Lesenswert?

@ feg_zeven (Gast)

>Einfache abfrage mit if hatte ich mir auch schon überlegt, aber bei
>einer unsigned Variable gibts ja kein < 0.

Dann eben so.
1
#define MAX = 100
2
#define MIN = 0
3
4
unsigend int position;
5
int delta;
6
7
  delta = read_enc();
8
  if (delta>0) {
9
    if (position <= MAX-delta) {
10
      position +=delta;
11
    } else {
12
      position = MAX;
13
    }
14
  } else {
15
    if (position >= MIN-delta) {
16
      position +=delta;
17
    } else {
18
      position = MIN;
19
    }
20
  }

von feg_zeven (Gast)


Lesenswert?

Ah, ok. Nicht viel Code, aber genial. Danke :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.