Drehgeber - Rotary Encoder ohne Interrupt ?

Mahlzeit zusammen :slight_smile: ,

was haltet Ihr davon, wenn man einen Drehgeber auswertet, ohne dabei eine ISR zu verwenden?

Wie stark leidet die Zykluszeit / Latenz bei groesseren Programmen?

Versuch ohne Interrupt:

/*
  Drehgeber Auswertung ohne Interrupt
  neutral = CLK & DT an
  rechts = (DT dann CLK aus) -> (DT dann CLK an)
  links  = (CLK dann DT aus) -> (CLK dann DT an)
*/
const uint8_t CLK = 2;
const uint8_t DT = 3;
const uint8_t SW = 4;

void setup() 
{
  Serial.begin(19200);
  pinMode(CLK, INPUT);
  pinMode(DT, INPUT);
  pinMode(SW, INPUT_PULLUP);
  while(!Serial){/*WARTEN*/}
}

void loop() 
{
  static bool drehen, block;
  static int32_t zahl;
  bool M_CLK = digitalRead(CLK);
  bool M_DT = digitalRead(DT);
  bool M_SW = !digitalRead(SW);
  
  if(M_SW && !block) //Taster
  {
    block = true;
    zahl = 0;
    Serial.print(F("RESET "));
    Serial.println(zahl);
  }
  else if(!M_SW && block)
  {
    block = false;
  }
  
  if (!M_CLK && !drehen) //rechts
  {
    drehen = true;
    zahl -= 1;
    Serial.print(F("links "));
    Serial.println(zahl);
  }
  else if (!M_DT && !drehen) //links
  {
    drehen = true;
    zahl += 1;
    Serial.print(F("rechts "));
    Serial.println(zahl);
  }
  
  if (M_CLK && M_DT && drehen) //Grunstellung
  {
    drehen = false;
  }
}

Was für ein Drehgeber ist das? Tastaturersatz oder Drehzahl/Positionskontrolle eines Motors?

Hi

Selber habe ich unbekannte Halps-Drehencoder (zumindest steht Halps drauf, finde dort aber Nichts, was meinen Encodern ähnlich sieht), Die geben alle vier A-B-Kombinationen zwischen den Rasten raus - ohne ISR verpasse ich selbst bei dauerndem Pollen vereinzelt eine der Kombinationen - wodurch die Drehrichtung, zumindest dazwischen, nicht erkennbar ist.

Wenn Dein Encoder von Raste zu Raste nur zur nächsten A-B-Kombination wechselt, könntest Du aber damit zurecht kommen.

MfG

Kommt immer auf den Sketch an, bzw. was der uC sonst noch so zu tun hat. Wenn er grad nur so vor sich hin loopt, kein Problem, aber wenn er mal Sendoren abfragt und die Werte sofort auf einen Server lädt und auf die SD.Karte schreibt und den Chart des Nextion aktualisiert und du keine Zeit dazwischen lässt, kann es schon sein, dass einige Impulse nicht abgefragt werden können.
Der Programmierstil und Programmdesign machen da viel aus.