Forum: Mikrocontroller und Digitale Elektronik Tastenfeld mit 25 Tasten auslesen


von kolja (Gast)


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

von kolja (Gast)


Angehängte Dateien:

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...

von Jörg R. (solar77)


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?

: Bearbeitet durch User
von Martin (Gast)


Lesenswert?

Der ADC im ESP ist auf deutsch gesagt sch... . Damit wirst du nicht auf 
einen grünen Zweig kommen und die Widerstände nehmen doch auch Platz 
weg, dann kannst du auch gleich einen IC nehmen.

von georg (Gast)


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

von kolja (Gast)


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?

von A20 (Gast)


Lesenswert?

Wie das bei einer PC Tastatur gemacht wird ist und bleibt eines der 
Größten technischen Geheimnisse!

von (prx) A. K. (prx)


Lesenswert?

A20 schrieb:
> Wie das bei einer PC Tastatur gemacht wird ist und bleibt eines der
> Größten technischen Geheimnisse!

Hätte IBM damals an Stelle eines vielpinnigen 8048 eine NodeMCU als 
Tastaturcontroller verwendet, gäbe es den PC heute vielleicht nicht. ;-)

: Bearbeitet durch User
von Stefan F. (Gast)


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.

von MaWin (Gast)


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.

von kolja (Gast)


Angehängte Dateien:

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.

von MaWin (Gast)


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.

von Stefan F. (Gast)


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.

von LostInMusic (Gast)


Lesenswert?

>Für die Funktion, dass eine LED aufleuchtet wenn eine belibige Taste
>gedrückt wird?

Diese LED ist eher als akustisches Signal namens "Bestätigungspieps" 
bekannt.

von Oliver S. (phetty)


Lesenswert?


von MCUA (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.