Forum: Mikrocontroller und Digitale Elektronik Drehgeber mit Switch (Erkennung Tastendruck)


von Pete K. (pete77)


Lesenswert?

Nachdem mein Drehgeber nun auch richtig dreht, wollte ich den 
eingebauten Taster auswerten.

Für den Drehgeber benutze ich die Funktionen von PeDa. Nun war meine 
Idee, folgende Zeilen zu ergänzen:
1
ISR( TIMER0_COMPA_vect )        // 1ms for manual movement
2
{
3
  int8_t new, diff;
4
  static int8_t last;
5
 
6
  new = 0;
7
  if( PHASE_A )
8
    new = 3;
9
  if( PHASE_B )
10
    new ^= 1;          // convert gray to binary
11
  diff = last - new;        // difference last - new
12
  if( diff & 1 ){        // bit 0 = value (1)
13
    last = new;          // store new as next last
14
    enc_delta += (diff & 2) - 1;    // bit 1 = direction (+/-)
15
  }
16
  if (!ENC_SWITCH)                              // NEU ****
17
  { enc_switch = 1;                             // ENC_SWITCH ist PA3, active low
18
  }
19
}

und im Hauptprogramm:
1
  while(1)
2
  { val += encode_read2();
3
    if (val_neu != val)
4
    { 
5
      sprintf(buffer,"%i\n", val);
6
    uart_puts(buffer); _delay_ms(30);
7
    
8
    val_neu=val;
9
    enc_switch=0;
10
      }
11
    if (enc_switch)
12
    { enc_switch=0;
13
      uart_puts("Keypressed\n");
14
      _delay_ms(200);       
15
    }
16
  }

Als Ausgabe wird mir immer zweimal "Keypressed" angezeigt, das verstehe 
ich nicht. Eine längere Wartezeit bringt auch keine Besserung.
Hat jemand eine Idee, wie es funktionieren könnte? Besten Dank im 
Voraus!

von Sascha W. (sascha-w)


Lesenswert?

So lange du gerückt hälst, wird  enc_switch = 1  in der ISR ja immer 
wieder ausgefüht!
Wenn du die 200ms Wartezeit meinst, dann musst du  enc_switch=0  erst 
danach schreiben, da wie oben erwähnt schon wärend des uart bzw. Delay 
die ISR wieder läuft.

Sascha

von Pete K. (pete77)


Lesenswert?

Vielen Dank für den Hinweis. Jetzt klappt es :-)

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.