mikrocontroller.net

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


Autor: Pete K. (pete77)
Datum:

Bewertung
0 lesenswert
nicht 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:
ISR( TIMER0_COMPA_vect )        // 1ms for manual movement
{
  int8_t new, diff;
  static int8_t last;
 
  new = 0;
  if( PHASE_A )
    new = 3;
  if( PHASE_B )
    new ^= 1;          // convert gray to binary
  diff = last - new;        // difference last - new
  if( diff & 1 ){        // bit 0 = value (1)
    last = new;          // store new as next last
    enc_delta += (diff & 2) - 1;    // bit 1 = direction (+/-)
  }
  if (!ENC_SWITCH)                              // NEU ****
  { enc_switch = 1;                             // ENC_SWITCH ist PA3, active low
  }
}

und im Hauptprogramm:
  while(1)
  { val += encode_read2();
    if (val_neu != val)
    { 
      sprintf(buffer,"%i\n", val);
    uart_puts(buffer); _delay_ms(30);
    
    val_neu=val;
    enc_switch=0;
      }
    if (enc_switch)
    { enc_switch=0;
      uart_puts("Keypressed\n");
      _delay_ms(200);       
    }
  }

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!

Autor: Sascha Weber (sascha-w)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Pete K. (pete77)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für den Hinweis. Jetzt klappt es :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.