Ich habe vor kurzem diese billige 4x4-Tastaturmatrix gekauft. Es hat nur die Druckknöpfe und sonst nichts, deshalb möchte ich ihm ein ordentliches Entprellen hinzufügen. Das Entprellen in Software möchte ich vermeiden, da meine Anwendung dadurch etwas Rechenleistung benötigt.
Ich weiß, dass das Entprellen mit einem Widerstand und einem Kondensator (bin ich richtig?) Oder einem Schmit-Trigger (der einen anderen IC erfordert, der für mich nicht in Frage kommt) erfolgen kann. Die Frage ist also, ob ich R / C für hinzufügen muss jeder Schlüssel, oder kann ich mit nur einem R / C-Paar pro Zeile oder pro Spalte davonkommen?
Irgendwelche Vorschläge?
analog
schmitt-trigger
debounce
DEKKER
quelle
quelle
Antworten:
Lassen Sie uns das klarstellen. Wenn Sie über eine Tastaturmatrix verfügen, verwenden Sie bereits Rechenleistung, um sequentielle Logikspannungen an die Zeilen oder Spalten anzulegen. Lesen Sie dann die Spalten oder Zeilen zurück, um festzustellen, welche Taste gedrückt wurde.
Jedes Mal, wenn Sie ein "Ergebnis" erhalten, dh wenn Sie feststellen, dass eine Taste gedrückt wurde, markieren Sie dieses Ereignis als "ausstehend" und einige Zeit später (10 bis 20 ms) überprüfen Sie erneut, ob die von Ihnen markierte Taste gedrückt wurde "ausstehend" kann als "tatsächlich" beurteilt werden.
Wie viel mehr Verarbeitungszeit dies benötigt, ist meiner Meinung nach im größeren Schema sehr gering. Wenn Sie sich so nahe an der Grenze befinden, an der Ihre CPU arbeiten kann, erhalten Sie eine größere / schnellere CPU oder erhöhen Sie die Taktrate.
Die Verwendung von Rs und Cs kann funktionieren, erzeugt jedoch in allen Fällen eine "langsame" Ausgabe, die schmitt-ausgelöst werden müsste, um die langsame Flanke auf eine schnelle Flanke zu bereinigen, die für die folgende Logik geeignet ist. Sie könnten natürlich damit durchkommen, aber dann haben Sie eine feste Lösung ohne Flexibilität.
Nach alledem benötigen Sie möglicherweise auch Kondensatoren von jeder Matrixleitung zur Erde, um ESD / EMV-Probleme zu vermeiden.
quelle
Um die beste Entprellleistung zu erzielen, ist es wahrscheinlich am besten, einen R / C für jede Taste zu haben. Sie sollten jedoch immer noch gute Ergebnisse mit einem pro Zeile / Spalte erzielen. Kommt nur darauf an, wie kritisch es wirklich ist. Wenn Sie dies mit einer minimalen Anzahl von Komponenten tun möchten, warum versuchen Sie nicht zuerst eine pro Zeile / Spalte, nehmen dann einige Messungen vor und prüfen, ob das Ergebnis für Ihre Anwendung gut genug ist?
Wenn die Ergebnisse nicht Ihren Wünschen entsprechen, fügen Sie auf jeder Schaltfläche einige hinzu und versuchen Sie es erneut.
quelle
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.
quelle
Afaik, es gibt ICs, die "automatisch" entprellen können, z. B. MC14490, genannt Switch Debouncer.
Dies verhindert, dass Sie CPU-Leistung benötigen, kostet jedoch zusätzlichen Kabel- / Leiterplattenplatz.
quelle
Beim echten Entprellen wird eine Hysterese hinzugefügt. Dies ist mit passiven Komponenten, z. B. Widerständen und Kondensatoren, nicht möglich. Hier kommt entweder eine Software oder eine Lösung für aktive Komponenten (Latch) ins Spiel.
quelle