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
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...
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
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.
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
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?
Wie das bei einer PC Tastatur gemacht wird ist und bleibt eines der Größten technischen Geheimnisse!
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
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.
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.
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.
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.
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.
>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.
https://medium.com/@wilko.vehreke/more-gpios-for-the-esp8266-with-the-mcp23017-b89f5e15cde3 Vor allem ist das auch ganz gut dokumentiert.
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.