Hardware-Entprellung der Schlüsselmatrix mit minimalen passiven Komponenten

7

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.

Geben Sie hier die Bildbeschreibung ein

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?

DEKKER
quelle
Ich gehe davon aus, dass Sie (im schlimmsten Fall) bereit sind, das Modul selbst anzulöten, wenn eine Multiplexlösung nicht möglich ist?
Pipe
8
Ich denke, Sie sollten die Frage der Software-Entprellung erneut prüfen. Es gibt Techniken, die nur sehr wenige Zyklen verwenden. Das Hinzufügen von Widerständen und / oder Kappen zu einer Scan-Tastatur kann zu unvorhersehbaren Ergebnissen führen. Wenn Sie dazu noch Hilfe benötigen, müssen Sie uns weitere Informationen, die Scanrate und die erforderliche Mindesttastzeit geben.
RoyC
6
Dies ist ein XY-Problem. Bitte erläutern Sie, warum das Abrufen der Schaltflächen Ihrer Meinung nach zu viel Verarbeitung bedeutet.
Jeroen3
5
Wenn das Entprellen einer 4x4-Matrix zu rechenintensiv ist, machen Sie etwas falsch.
JMS
2
Das Entprellen von Software kann so einfach sein wie das Abrufen der Tastatur nicht schneller als alle X ms, wobei X die maximale Entprellzeit ist.
Wouter van Ooijen

Antworten:

24

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.

Andy aka
quelle
Es kommt darauf an, was man mit langsam meint. Ein Shmitt-Trigger sieht auf einem Schaltplan einfach aus, auf einer Leiterplatte werden jedoch viele Verbindungen und Spuren hinzugefügt. Ich würde zuerst testen, ob es wirklich benötigt wird. Wenn ja, würde ich nach einem Quad-Shmitt-Trigger-IC (oder einem Oktal-Trigger-IC, falls vorhanden) suchen, um Platz auf der Platine und die Anzahl der Komponenten zu sparen.
Fredled
Sie haben Recht ... Ich suche sowieso nach Schaltflächen in der Firmware, damit ein bisschen mehr verschwendete Zyklen nicht so weh tun würden! Dieses EMV-Problem ist ein schöner Punkt, über den ich nicht einmal nachgedacht habe. Danke
DEKKER
Können Sie bitte einen Hinweis geben, wie groß der Kondensator für EMV sein sollte und warum dieser bestimmte Wert? auch wie wäre es mit Widerständen?
DEKKER
100 pF sollten in Ordnung sein. Keine wirkliche Berechnung oder Theorie, nur gute Praxis.
Andy aka
Vergessen Sie nicht, auch die Eingänge hochzuziehen oder herunterzuziehen.
Andy aka
4

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.

MCG
quelle
4

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.

Graham
quelle
3

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.

Michel Keijzers
quelle
1
Sie werden auch eine große Geldsumme kosten. Diese Debouncer sind furchtbar teuer.
Fredled
2
@Fredled: Groß wie in "wahrscheinlich unter 10 $". Ich bin damit einverstanden, dass das eine Menge Geld für das ist, was es tut, aber für ein einzelnes Projekt könnte es die Zeit wert sein, die es spart ... für ein Projekt mit einem Lauf von Tausenden wäre es eine andere Sache :-)
psmears
Bei AliExpress 2 Euro, also wahrscheinlich doppelt so viel an "besseren" Orten.
Michel Keijzers
1
Der MC14490 scheint für Matrix-Tastaturen unbrauchbar zu sein
jsotola
Es tut mir leid zu hören ... habe es nicht selbst versucht (nicht einmal bei einem normalen Schalter). Ich frage mich, was das Problem ist, da jedes Signal von ihm entprellt werden kann.
Michel Keijzers
0

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.

Anthony X.
quelle
Ich stimme zu, wenn Sie ein perfektes Signal anstreben. Wenn Sie jedoch nach einer billigen und kleinen Lösung suchen, können passive Komponenten ein akzeptables Ergebnis liefern.
Fredled