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
Achim S. schrieb:
Breatboard
Is ja Standart...
Er wollte Beartboard schreiben ...
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...
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.
Hey, das Zeug von Peter war derzeit mal in Assembler, oder?
er hat auch noch eine C-Variante gebaut. Nutze ich auch gerne am ESP32 und in Verbindung mit IR-Codeauswertung
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 |
|
2 |
|
3 |
|
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 |
|
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) :-)
Eben nicht "ChatGPT".
Schon seit einiger Zeit hier im Forum heisst das stilecht "ChatGBT". Mit weichem B. ;)
Weitermachen, schönen Abend euch allen
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.
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
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 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
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.
Auweia. Geht das jetzt wieder los?