Pages: [1]   Go Down
Author Topic: Encoder zählt jeden Schritt doppelt  (Read 524 times)
0 Members and 1 Guest are viewing this topic.
Traunstein, Germany
Offline Offline
Full Member
***
Karma: 0
Posts: 111
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo zusammen,
hier mein code, darunter mein Problem:
Code:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);

#define PIN_HIGHBIT (7)
#define PIN_LOWBIT  (5)
#define BAUDRATE    (9600)
#define DEBUG         (1)

// globals
int state, prevState = 0, count = 0;
int encoderStates[4][4] = {
 {  0, -1,  1,  0 },
 {  1,  0,  0, -1 },
 { -1,  0,  0,  1 },
 {  0,  1, -1,  0 },
};

void setup() {
  pinMode(PIN_HIGHBIT, INPUT);
  pinMode(PIN_LOWBIT, INPUT);
  digitalWrite(PIN_LOWBIT, HIGH);
  digitalWrite(PIN_HIGHBIT, HIGH);
  lcd.init();     
  lcd.backlight();
}

void loop() {
  state = (digitalRead(PIN_HIGHBIT) << 1) | digitalRead(PIN_LOWBIT);
  count += encoderStates[prevState][state];

  if (state != prevState) {
    lcd.clear();
    lcd.print(count);
  }

  prevState = state;
}
Wenn ich nun an meinem Encoder drehe, wird pro Schritt 2 weiter gezählt.
Wenn ich ein klein wenig nach links drehe (noch kein Schritt), dann wird nur eins abgezogen. Ansonsten macht der immer 2...

Denkfehler oder Quatsch gemacht?
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20218
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo derHerrKohler

Ich verstehe nicht wieso Du das so kompliziert machst.
Zuerst mal kontrolliere wieviele mechanische schritte und wieviele elektrische Schritte der Encoder hat.

Du willst nur den Couter erhoehen oder erniedrigen?

Gruesse Uwe
Logged

Traunstein, Germany
Offline Offline
Full Member
***
Karma: 0
Posts: 111
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich wüsste nicht, wie ich's einfacher machen sollte. (ist mein erster encoder)

Es ist ein D240313D von Panasonic,
heir gibt es auch ein PDF dazu: http://www.pollin.de/shop/downloads/D240313D.PDF
Logged

Offline Offline
Full Member
***
Karma: 3
Posts: 174
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

als ich mit einem Dreh-Encoder gespielt habe,
habe ich die Werte über die serielle Konsole ausgegeben.
Dabei machte die Baudrate einen Unterschied im Ergebnis.
Vielleicht versuchst Du mal etwas in diese Richtung bei I2C Geschwindigkeit.

Gruss
Kurti
Logged

Es gibt nur 10 Arten von Menschen: die, die das Binär-System verstehen und die, die es nicht verstehen.

Traunstein, Germany
Offline Offline
Full Member
***
Karma: 0
Posts: 111
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ja, das war auch mein erster Test, leider auch hier in allen Einstellungen das gleiche Ergebnis. Es ist auch egal, wie schnell oder langsam ich den encoder drehe, ich bekomme immer nur gerade Zahlen.
Logged

Heidelberg
Offline Offline
Full Member
***
Karma: 1
Posts: 207
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Da steht etwas von 5 ms Bouncing ? Wäre das eine Möglichkeit ?
Logged

 

Traunstein, Germany
Offline Offline
Full Member
***
Karma: 0
Posts: 111
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Oh Gott, da habe ich ja noch gar nicht dran gedacht!
Kann es sein das der Encoder so exakt prellt? Es ist ja wirklich immer so das die Schritte doppelt zählen - deshalb bin ich von einem Softwarefehler ausgegangen...
Kann ich meinen encoder per progammierung entprellen?
Logged

Traunstein, Germany
Offline Offline
Full Member
***
Karma: 0
Posts: 111
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich forsche und habe folgendes rausgefunden:
Der Encoder rastet nur jeden zweiten Schritt mechanisch ein. Das ist ja gemein.
Ich werde also einfach ein
Code:
conter 2 = counter /2;
einbauen und mich freuen über den tollen Code (es sei denn einer von Euch hat noch eine blendende Idee)
Logged

Pages: [1]   Go Up
Jump to: