Als langjähriger Ingenieur für eingebettete Software muss ich sagen, dass Ihre Annahme, dass durch das Entprellen meiner Anwendung etwas Rechenleistung entzogen wird , einfach falsch ist. Dies gilt niemals für kompetent geschriebene Firmware.
Das Entprellen erfordert natürlich eine gewisse Verarbeitung. Die Verarbeitung ist jedoch trivial und wird für Benutzereingaben mit einer so geringen Aktualisierungsrate erfolgen, dass sie völlig vernachlässigbar ist. Wenn Sie Eingaben mit Aktualisierungsraten in zig kHz entprellen müssten, wäre die Verarbeitung zum Entprellen möglicherweise erheblich, aber ein Mensch, der Tasten drückt, benötigt keine solche Auflösung. In Ihrem Fall wäre die 100-Hz-Abtastung schnell genug, und Sie könnten sie mit ziemlicher Sicherheit auf 10-Hz-Abtastung reduzieren, ohne Ihre Benutzerinteraktion ernsthaft zu beeinträchtigen.
Wenn Sie versuchen, die Eingangsverarbeitung in einem Hauptregelkreis mit mehreren zehn kHz durchzuführen, wird die Verarbeitungsleistung natürlich aufgebraucht. Die richtige Lösung besteht darin, eine Firmware zu schreiben, die dies jedoch nicht tut, und keine Hardwarelösung zu verwenden, um ein Software-Anti-Pattern zu beheben. Durch die angemessene Verwendung von Timern und Interrupt-Prioritäten erhalten Sie das, was Sie benötigen.
Sie können die Verarbeitung optimieren, indem Sie sicherstellen, dass sich das Rücklesen ausschließlich an einem E / A-Port befindet. Angenommen, Sie setzen Ebenen für Spalten und lesen die Zeilen zurück, dann erstellen Sie Bit-UND, Bitverschiebung und Bit-ODER, um einen 16-Bit-Wert für die 16 Pins zu erstellen. XOR dies mit dem vorherigen 16-Bit-Wert, und wenn dies nicht Null ist, hat sich etwas geändert. Ein einfacher Entprellungsalgorithmus besteht nur darin, einen Zähler auf einen Wert zu setzen, wenn die Stifte ihren Zustand ändern, einen Zustand auszuwählen, wenn die Stifte ihren Zustand beibehalten und der Zähler Null ist, und zu dekrementieren, wenn er nicht Null ist.
Sie müssen natürlich überprüfen, ob nur eine Taste gedrückt ist. Wenn Sie einen ARM-Prozessor haben, verfügt der ARM über eine Anweisung, um zu melden, wie viele Bits gesetzt sind. Dies ist ideal dafür. Nur zur weiteren Optimierung erwähnen.