Go Down

Topic: Encoder zählt jeden Schritt doppelt (Read 755 times) previous topic - next topic

derHerrKohler

Hallo zusammen,
hier mein code, darunter mein Problem:
Code: [Select]
#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?

uwefed

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

derHerrKohler

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

kurti

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
Zitat Jurs: falsche Verkabelung ist sowieso immer wenig förderlich für das Funktionieren der Hardware



hier könnte Ihre Werbung stehen

derHerrKohler

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.

df6ih

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

derHerrKohler

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?

derHerrKohler

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: [Select]
conter 2 = counter /2; einbauen und mich freuen über den tollen Code (es sei denn einer von Euch hat noch eine blendende Idee)

Go Up