Tastenfeld mit 25 Tasten auslesen

Gast #6455148
Lesenswert?

Hallo,

aus einem alten Lerncomputer habe ich ein Tastenfeld ausgebaut
und würde es gerne an einem ESP (NodeMCU) betreiben.
Die 25 Tasten enden in 13 Kanälen, zuviele um sie direkt an den ESP 
anzuschließen.

Jetzt könnte ich ein (oder zwei) Multiplexer dazwischen setzen,
aber das nimmt dann wieder relativ viel Platz ein.
Dann gibt es ja noch die Möglichkeit, zwischen jeden Kanal einen 
Widerstand zu setzen, womit jeder Tastendruck einen spezifischen 
Widerstand zwischen Kanal 1 und Kanal 13 hat.
Erste Frage: Ist das zuverlässig genug? Oder ehr eine "dreckige" Lösung?

Der ADC des ESP hat 10bit, also 1024 Werte für 3V. Bei 14 Zuständen 
wären es 73 Werte zwischen jedem Zustand.
Das sollte doch reichen,
Zweite Frage: Oder?

Gruß Kolja
Gast #6455176
Lesenswert?

Habs mal "simuliert" und dabei festgestellt, dass meine Überlegung
- alle Widerstände sind gleich - nicht zur gewünschen Lösung führt.

Jetzt gilt es 12 Widerstände zu finden, die die Widerstandssummen der 
einzelnen Tasten am gleichmäßgsten verteilen.

Mehrere gleichzeitige Tastendrücke zuverlässig auszuwerten ist mit 
diesem Prinzip aber nicht möglich...
Angehängte Dateien:
#6455188
Lesenswert?

kolja schrieb:
> Der ADC des ESP hat 10bit, also 1024 Werte für 3V. Bei 14 Zuständen
> wären es 73 Werte zwischen jedem Zustand.
> Das sollte doch reichen,

Anders gerechnet hast Du etwas über 0,1V von Taste zu Taste, wenn die 3V 
ausgenutzt werden können. Werden 2 oder mehr Tasten gleichzeitig 
gedrückt erkennt der uC das nicht.

Ich würde es digital lösen.

Der HT16K33 kann 39 Tasten abfragen und wird über I2C angesprochen, also 
2 Ports vom uC. Der Chip ist allerdings nur für diese Anwendung etwas 
Overdressed. Eigentlich ist er für die Ansteuerung von bis zu 128 LEDs 
konzipiert.

Es gab mal Chips für 16 bzw. 20 Tasten, 74C922 bzw. 74C923. Ob es neuere 
Chips für mehr Tasten gibt weiß ich leider nicht.

Ich würde es evtl. mit einer Matrix 4*8 lösen. Ein parallel IN, seriell 
Out Schiebeberegister für die Zeilen und 4 Ports vom uC für die Spalten.
Das ist nur ein Lösungsansatz, es gibt noch viele andere.

Wieviele Ports vom uC stehen zur Verfügung?
Gast #6455255
Lesenswert?

kolja schrieb:
> Die 25 Tasten enden in 13 Kanälen

Dann musst du erst mal feststellen, wie diese Tasten verschaltet sind - 
einzeln schon mal nicht und in einer Matrix 5x5 auch nicht nach deinen 
Angaben. Ohne das zu wissen brauchst du über Anschlussmöglichkeiten 
nicht weiter nazudenken.

Georg
Gast #6455265
Lesenswert?

Guten Morgen,

mir ist da gestern Abend noch was aufgefallen.
Die erst so zufällige Anordnung der Kanäle hat ja doch eine Struktur,
siehe Farben im Bild.


Martin schrieb:
> Der ADC im ESP ist auf deutsch gesagt sch...

Stimmt, da war ja was...

Martin schrieb:
> dann kannst du auch gleich einen IC nehmen.

Jörg R. schrieb:
> Ich würde es digital lösen.

Okay, habe den CD74HC4067 gefunden, der hat aber kein I2C,
wenn ich das richtig verstehe.

Dann lieber den HT16K33, ist ja weder teurer noch größer.

Jörg R. schrieb:
> Wieviele Ports vom uC stehen zur Verfügung?

Eigentlich noch alle, würde das Testenfeld gerne über einen ESP32 per 
Bluetooth als zusätzliche Tastatur nutzen.

Jörg R. schrieb:
> Das ist nur ein Lösungsansatz, es gibt noch viele andere.

Was wäre denn der simpelste?
Wahrscheinlich Hardware so lassen, mit dem HT16K33 24 Taste in der 
vorhandenen 3x8 Matrix abfragen und die Taste "E" über einen einzelnen 
GPIO?
Gast #6455316
Lesenswert?

Ich finde, dass MCP23017 dafür ideal ist, denn er hat 16 I/O Pins die 
man als Open-Drain mit integriertem Pull-Up Widerstand konfigurieren 
kann.

Da kannst du die Matrix direkt dran anschließen.

Außerdem kann er über eine separate Leitung signalisieren, wenn eine 
Taste gedrückt wurde - falls du das brauchst.
Gast #6455319
Lesenswert?

kolja schrieb:
> Die 25 Tasten enden in 13 Kanälen

Kanal ? Leitung.

Und, wie sind die 25 Taster dazwischen angeordnet ?

Eigentlich braucht man ja nur 5 x 5 = 10 oder 8 nach diesem Prinzip
1
 1     2        3        4        5        6
2
 |  _  |     _  |     _  |     _  |     _  |
3
 +-o o-+  +-o o-+  +-o o-+  +-o o-+  +-o o-+
4
 |     |  |     |  |     |  |     |  |     |
5
 +-----(--+-----(--+-----(--+-----(--+     |
6
       |     _  |     _  |     _  |     _  |
7
       |  +-o o-+  +-o o-+  +-o o-+  +-o o-+
8
       |  |     |  |     |  |     |  |     |
9
       +--+-----(--+-----(--+-----(--+     |
10
                |     _  |     _  |     _  | ...
11
                |  +-o o-+  +-o o-+  +-o o-+
12
                |  |     |  |     |  |     |
13
                +--+-----(--+-----(--+     |
14
                         |     _  |     _  |
15
                         |  +-o o-+  +-o o-+
16
                         |  |     |  |     |
17
                         +--+-----(--+     |
18
                                  |     _  |
19
                                  +----o o-+
Bei 13 könnten es 3 Reihen a 10 Taster unvollständig belegt sein. Da 
klappt das mit den Widerständen nicht.
Gast #6455420
Lesenswert?

A20 schrieb:
> Wie das bei einer PC Tastatur gemacht wird ist und bleibt eines der
> Größten technischen Geheimnisse!
Na, du scheinst es auch nicht zu wissen, sonst hättest du es bestimmt 
gesagt ;-)



Stefan ⛄ F. schrieb:
> Ich finde, dass MCP23017 dafür ideal ist, denn er hat 16 I/O Pins die
> man als Open-Drain mit integriertem Pull-Up Widerstand konfigurieren
> kann.
Und er läuft auf 3V!


Stefan ⛄ F. schrieb:
> Außerdem kann er über eine separate Leitung signalisieren, wenn eine
> Taste gedrückt wurde - falls du das brauchst.
Für die Funktion, dass eine LED aufleuchtet wenn eine belibige Taste 
gedrückt wird?



MaWin schrieb:
> kolja schrieb:
>> Die 25 Tasten enden in 13 Kanälen
> Kanal ? Leitung.
> Und, wie sind die 25 Taster dazwischen angeordnet ?
Das war mein Versuch, die Matrix zu beschreiben, Bild wäre besser 
gewesen.

MaWin schrieb:
> Bei 13 könnten es 3 Reihen a 10 Taster unvollständig belegt sein.

3x8 + 1x1, wie im letzten Beitrag beschrieben.
Angehängte Dateien:
Gast #6455461
Lesenswert?

kolja schrieb:
> 3x8 + 1x1, wie im letzten Beitrag beschrieben

Wieso im Letzten, warum nicht im Ersten ? Hat sich die Tastatur 
zwischenzeitlich verändert ? Wusstest du um 0:18 noch nicht wie sie 
aufgebaut war und erst um 8:10 dass eine Taste extra war ?
Schneidet sich Salami so schlecht in Scheiben ?

Wenn es eine Matrix ist, wertet man sie halt wie eine Matrix aus. Und 
hat der uC nicht genügend Anschlüsse, nimmt man halt einen externen IC 
der die Anschlussanzahl erhöht. Ob das ein fertiger 
Matrixtastendecoder-IC ist oder bloss ein Schieberegister als 
Porterweiterung ist egal, hängt halt davon ab was man da hat, sich 
leisten kann, zutraut. Aber Analogauswertung hat schon bei den 5 Tasten 
eines Arduino LCD keypad shield seine Grenzen, Alterung und Entprellen 
ist ein Problem.
Gast #6455546
Lesenswert?

kolja schrieb:
>> Außerdem kann er über eine separate Leitung signalisieren, wenn eine
>> Taste gedrückt wurde - falls du das brauchst.
> Für die Funktion, dass eine LED aufleuchtet wenn eine belibige Taste
> gedrückt wird?

Ich meinte eher, dass der ESP32 nicht unbedingt ständig die Tastatur 
abscannen muss, sondern nur dann, wenn der Port-Expander einen 
Tastendruck meldet.
Gast #6456256
Lesenswert?

>Ich meinte eher, dass der ESP32 nicht unbedingt ständig die Tastatur
>abscannen muss, sondern nur dann, wenn der Port-Expander einen
>Tastendruck meldet.
Ständige Tastaturabfrage würde den uC im Normalbetrieb jedoch so gut wie 
gar nicht belasten.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren