Tastersteuerung nach Peter Dannegger

OP #8098667
Lesenswert?
• ▲
▼

Vor ca. 20 Jahren kamm die Tasterentprellung, oder besser die Tastersteuerung von Peter Dannegger raus. Seit dem gab es unzähliche Beiträge dazu. Muss ganz ehrlich sagen, habe sie bei den AVR sehr gern verwendet. Die Zeit ist vergangen, es gab neue Prozessoren, doch das Problem mit den Tastern ist geblieben. Habe das Pogramm von Peter übersetzt für den ESP32 und verwende es jetzt sehr oft. In meiner Version geht es für 5 Taster und man kann damit Short Press, Long Press, Repeat machen. Im Programm sind noch andere Funktionen die teilweise im Hintergrund verwendet werden. Habe es mal als Beispiel auf einem Breatboard aufgebaut und getestet. Es scheint ohne Fehler zu funktionieren. Vielleicht kann es jmand testen ob alles ok ist. achim

Angehängte Dateien:
Beitrag #8098718 wurde vom Autor gelöscht.
#8098747
Lesenswert?
• ▲
▼

Achim S. schrieb:

für 5 Taster

Hey, das Zeug von Peter war derzeit mal in Assembler, oder?

Warum ist das auf eine Tastenanzahl festgelegt? Die Aufgabe ist doch für jede Taste die gleiche, oder? Zudem egal ob die direkt angeschlossen ist oder in einer Matrix eingebunden oder über ein Schieberegister ausgelesen wird...

Ich habe mir vor bestimmt auch 20 Jahren Makros geschrieben, ist dann zwar in C aber die kann ich dort einhängen wo ich will. Sie sind an keinerlei Hardware gebunden. Dort gibt es auch, kurz drücken, lang drucken und repeat und die Timings sind einstellbar...

Wenn die Hauptroutine in einem 10ms timer oder softtimer oder eingehängt wird, kann man beispielweise sagen dass eine Taste als sicher gedrückt gilt, wenn der Status fünf (einstellbar) Aufrufe lang immer aktiv war (ob das low oder high aktiv ist, legt man selbst für jede Taste fest). Oder dass sie nach 20 Aufrufen als "lang" gedrückt gilt oder dass nach 20 Aufrufen Repeat beginnt. Das Timing von Repeat ist dann auch einstellbar, also wie schnell dann "getickert" werden soll... alles immer im Zeitraster des Hauptaufrufes...

Keine Ahnung ob das alles so schlau ist oder war - bin da kein Profi, aber ich nutze es seit der Zeit immer wieder...

OP #8098757
Lesenswert?
• ▲
▼

Wie viele Taster angehängt werden können max. kann ich nicht sagen. Verwende für die Bedienung ein Tasterkreuz mit 5 Tasten. Dazu gibt es passende Abdeckungen so das es aussieht wie in der Industrie. Haben Hoch, Runter, Links, Rechts und Enter, natürlich in englisch.

#8098882
Lesenswert?
• ▲
▼

Der Vorteil des Originals am AVR war ja, dass der einen ganzen Port auf einmal einliest, und gleichzeitig Zähler für 8 Inputs verwaltet. So schnell dass es praktisch nebenbei in einem Timer mitlaufen konnte.

Allein die Schleife hier:

1
  for (byte n = 0; n < 5; n++) {
2
    if (digitalRead(keyPins[n]) == LOW)
3
      keys |= (1 << n);
4
  }

Braucht ein Vielfaches an Rechenzeit.

Wenn du die Eleganz des Originals beibehalten willst:

keys = REG_READ(GPIO_IN_REG);

Wenn die dir egal ist (Weil der ESP schnell genug ist und RAM im Überfluss hat, dass ein paar Bytes nicht auffallen)

1
template class TastenEntpreller<GPIO> {...
: Bearbeitet durch User
#8099408
Lesenswert?
• ▲
▼

Nick schrieb:

Cyblord -. schrieb:

Achim S. schrieb:

Breatboard

Is ja Standart...

Er wollte Beartboard schreiben ...

Beim Sohn von Homer Simpson wäre es ein Bartboard, in einer denglischen Küche womöglich ein Bratboard. Aber ganz im Ernst: wißt Ihr mit Eurer Lebenszeit denn wahrhaftig nichts Besseres anzufangen, als auf Tippfehler hinzuweisen? Get a life! :-)

Okay, wenn es anders gar nicht geht, hier habt Ihr noch ein paar: "Heudde waah ein echds komischah Taaag, ihc bin zur schuuuhle geganggn un hab main Früsstügg zuhauuse vergesn." Beschwerden bitte an ChatGPT, das diesen Text erzeugt hat. (Lebenszeit, ne) :-)

(Firma: DC3AX) #8099791
Lesenswert?
• ▲
▼

Diese Funktionalität hab ich vor vielen Jahren mal in NutOS integriert, aber als eine Art Software-Interrupt. Man konnte eine Funktion registrieren und dazu eine Zeit von "nicht mehr als" und "aber weniger als" übergeben. Dann wurden die Funktion einfach aufgerufen, wenn die Bedingungen erfüllt waren. Damit konnte man dann sehr leicht so Sachen machen wie kurzer Druck wechselt zwischen Start und Stop, langer Druck setzt das System zurück, oder kurzer Druck springt zum nächsten Track, Drücken und Halten skippt innerhalb des Tracks.

OP #8099800
Lesenswert?
• ▲
▼

Finde es einfach toll wie manche Leute auf den letzten Buchstaben achten. Ist einfach schön und super toll wenn es Menschen gibt die keine Fehler machen. Darf ich "Gott" zu dir sagen? Was anderes. Mir geht es hierbei um die Tatsache das relativ alter aber guter Code in die Neuzeit gerettet werden kann. Die Funktion ist auf einem ESP32 genau die selbe wie auf auf einem AVR. Deshalb nutze ich das Prg sehr gerne. achim

PS: Die Buchstaben sucher können mich besuchen wo die Sonne nie hinscheint

#8099810
Lesenswert?
• ▲
▼

Achim S. schrieb:

Mir geht es hierbei um die Tatsache das relativ alter aber guter Code in die Neuzeit gerettet werden kann.

Bringt halt so überhaupt nichts.

Du brauchst mehr Code und Rechenzeit um den Input/Output in die Form zu bringen, die der Dannegger-Zähler braucht als der Zähler selber.

Spendier lieber 3 Bytes mehr RAM, und zähl ganz klassisch in einer Zählvariable pro Taster.

Also statt ct0 + ct1 ein uint8_t debounce_counter[5];

1
void keyScan() {
2
  for (uint8_t n = 0; n < 5; n++) {
3
    if (digitalRead(keyPins[n]) == LOW) {
4
       debounce_counter[n]++;
5
      //if (debounce_counter[n] > LONG_PRESS_THRESHOLD) { ... }
6
      
7
    } else {
8
      // Taste losgelassen, war sie lange genug gedrückt?
9
      if (debounce_counter[n] >= DEBOUNCE_THRESHOLD) {
10
         keyPress[n]=true;
11
      } 
12
      debounce_counter[n]=0;
13
    }
14
  }

Antwort schreiben

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.