Matrixtastatur: mehrere Tasten gleichzeitig -> Auswertung

Gast #3907935
Lesenswert?
• ▲
▼
Hallo,

ich möchte eine Matrixtastatur auswerten. Hardwareseitig sind 
Vorkehrungen gegen PhantomKeys gegeben (Diode vor jedem Taster bzw. eine 
Diode pro Zeile/Spalte diagonal in der Matrix angeordnet).

Allerdings fehlt mir der Ansatz für den Softwaretreiber. Bei der 
einfachen Matrixtastatur habe ich den Scancode ermittelt, entprellt und 
dann den Keycode aus einer Tabelle herausgeholt. Die Funktionen zum 
Auslesen haben haben dann entsprechend den Keycode ausgegeben.

Ich frage mich nun, wie ein Softwaretreiber für die Unterstützung zur 
Erkennung mehrerer Tasten aussieht. Ein einzelnes Byte als Speicher für 
die Taste reicht ja dann nicht mehr. Aber einen Buffer mit n Bytes (n = 
Anzahl der Tasten) kann es ja auch nicht sein, oder? Wie wird das dann 
in der Praxis gehandhabt? Eigentlich würde ja auch ein simpler n-Bit 
Buffer gehen, das spart schon einiges. Zusätzlich nochmal einen 
parallelen n-Bit Speicher für Spezialfunktionen wie Shift/Ctrl etc.
Oder ist das der Holzweg?

Und die Auswerteroutinen an sich können dann auch nicht mehr einen 
Keycode zurückgeben, wie löst man das dann? -> Richtung umkehren, also 
von "gib mir die gedrückte Taste" hin zu "Ist die Taste XYZ gerade 
gedrückt?" ?

Ralf
#3907975
Lesenswert?
• ▲
▼
Hallo!
Die Methode hängt natürlich von der Art der Matrix ab. Für eine 
Kippschaltermatrix, bei der von 0 bis n Kontakte auch dauerhaft betätigt 
sein können verwende ich einen n-Bit-Speicher mit Entprellung. Für 
Tasten mit Zweit- oder Drittbelegung (Shift, Ctrl, Alt), frage ich bei 
jedem Timertick diese konkreten Umschalttasten immer mit ab, und 
korrigiere den Tastencode entsprechend (also z.B.: aus dem gedrückten 
"a" wird ein "A" oder aus der "1" das Ausrufezeichen). Für ein 
n-Byte-Puffer kann man bei 10 begrenzen: mehr Finger hat niemand.
Gast #3907987
Lesenswert?
• ▲
▼
Ralf schrieb:
> Ich frage mich nun, wie ein Softwaretreiber für die Unterstützung zur
> Erkennung mehrerer Tasten aussieht.

Wahrscheinlich wie unter Windows: Taste mit Drücken und Loslassen in 
eine Queue einsortieren.

Stichwort n-Key rollover.

Das bitfeld macht, wie Route schrieb, eher Sinn bei Schaltern.
Gast #3908141
Lesenswert?
• ▲
▼
@Route 66:
Stimmt, eine Begrenzung ist natürlich auch eine Möglichkeit :) Guter 
Hinweis, danke.

@MaWin:
Hmja, die Make-/Break-Codes oder wie die genannt werden. Beispielsweise 
Bit 7 beim Drücken setzen, und beim Loslassen mit gelöschtem Bit 7 in 
die Queue -> ist notiert.

@PeDa:
Danke, werd ich heut abend durch durchlesen, bin noch auf der Suche nach 
geeigneten Tasten.

Ralf

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.