Keypad 3x4 (am Tasmota o.ä.)

OP Persönliche Seite #7788908
Lesenswert?

Moin,

das Grundprinzip eines solchen KeyPads ist mir bekannt (es gibt Anschlüsse für jede Row und Colum; Eines von beiden wird zeitmultiplexed bestromt und in der anderen Achse abgefragt)

Die GPIOs wären kein Problem, da ich eh schon einen Expander an meinem ESP83266 habe.

Doch mir wurde mehrfach davon abgeraten dies nun Scriptseitig abzudecken, da der Controller wohl (zumindest für eine vernünftige Abtastrate) an seine Grenzen kommen würde. (Zumindest mit Tasmota, was ich zwinged für andere Dinge brauche)

Es gab den Hinweis auf einen AnsteuerChip für solche KeyPads, aber dann wurde nicht genauer drauf eingegangen.

Daher hier dieser Beitrag und die Frage nach einem solchen Chip. Natürlich im Idealfall bereits mit Treiberkompatibilität zu Tasmota.

Liebe Grüße und noch einen schönen Restsonntag.

David

PS: Einen ESP32 möchte ich nicht, da ich für den kleinen Bruder ein wirklich kompacktes Layout in duzent gefertigter Hardware-Ausführung liegen habe. (Aber klar, wenn es gar nicht anders geht, kenne ich diese Notlösung...)

Gast #7788917
Lesenswert?

D a v i d K. schrieb:

Doch mir wurde mehrfach davon abgeraten dies nun Scriptseitig abzudecken, da der Controller wohl (zumindest für eine vernünftige Abtastrate) an seine Grenzen kommen würde.

Ich kann mir keine Script-Sprache vorstellen, die auf diesem Power-Hog zu langsam ist, um so ein kleines Tastenfeld abzufragen.

OP Persönliche Seite #7788935
Lesenswert?

Jetzt bin ich noch über folgende Option gestolpert: https://www.smarthome-tricks.de/esp8266/esp8266-4x4-tastatur-an-analogen-pin-verwenden/

Da ich exakt dieses hier habe: https://www.conrad.de/de/p/tru-components-drucktastenfeld-tastenfeld-matrix-3-x-4-1-st-2300335.html (Scheinen bereits Widerstände im KeyPad verbaut zu sein.)

Muss ich wohl nur noch darauf klar kommen, wie das Teilernetzwerk in meinem Falle aussieht ;)

Und mit dem Richtigen KeyWord, kommmt man dann hier auch auf bessere Beiträge: Beitrag "Re: Analog Keypad 3x4"

Gast #7788955
Lesenswert?

Ron-Hardy G. schrieb:

oder sowas?

Kann man machen. Du musst dir selbst überlegen, ob du für solche einfachen Sachen spezielle IC's neben deinen eigentlich super leistungsstarken ESP packen willst.

Das mangelnde Programmierfähigkeiten zunehmend mit mehr Hardware erschlagen wird habe ich ja bereits akzeptiert. Ich würde mir die Zeit nehmen, mich da rein zu fuchsen und es selbst zu programmieren (ohne spezial-IC). Alleine schon aus sportlichem Ehrgeiz (ist ja "nur" Hobby).

OP Persönliche Seite #7789087
Lesenswert?

Sherlock 🕵🏽‍♂️ schrieb:

Das mangelnde Programmierfähigkeiten zunehmend mit mehr Hardware erschlagen wird habe ich ja bereits akzeptiert. Ich würde mir die Zeit nehmen, mich da rein zu fuchsen und es selbst zu programmieren (ohne spezial-IC). Alleine schon aus sportlichem Ehrgeiz (ist ja "nur" Hobby).

Es gibt einfach extrem viele Baustellen die man als programmieraffiner Mensch (gerade wenn man beruflich auch programmiert) angehen möchte. Da ist man schon extrem Dankbar wenn man so geniale OpenSource Projekte wie Tasmota vorfindet, bei denen mit etwas Konfiguration bereits sehr viel funktioniert.

Anders formuliert: Ich spreche hier ja nur 1/7 Anwendungsfälle an, die ich mit diesem ESP umsetze. 6/7 funktionieren ja bereits ootb. Wenn ich jetzt nur aus Ergeiz dieses Problem selber programmieren zu wollen auch die Zeit aufbringen muss die anderen 7 Fälle zu lösen (geschweigedenn des ganzes IP- und MQTT-Stack) klingelt es nur noch in meinem Kopf "nicht das Rad neu erfinden".

Wenn es um autarke ICs geht würde ich es sofort selber schreiben. Bei IOT bin ich glücklich über jeden IC, der mir Kleinigkeiten abnimmt.

OP Persönliche Seite #7789091
Lesenswert?

Ron-Hardy G. schrieb:

oder sowas?

Ich betrachte jetzt Mal den "TCA8418 I2C Controlled Keypad Scan IC" genauer. BreakoutBoard bzw. TH-Variante wäre noch praktisch fals ich keinen ähnlichen finde!

Also danke für diesen Hinweis!

EDIT: mit dem HT16K33 habe ich bereits sehr oft gearbeitet. Also komisch das ich da nicht auch drauf gekommen bin. Mal schauen, ob es für irgendeinen davon einen fertige Tasmota Treiber gibt.

#7789111
Lesenswert?

Typisch läßt man Tastenabfragen mit im Timerinterrupt (Systick) erledigen. Darin sollte auch gleichzeitig das Entprellen und Komfortfunktionen (langer Druck, Repeat) erfolgen. Und es kann auch kein Tastendruck verloren gehen, wenn mal die Abfrage im Main etwas später erfolgt.

Das ist ja immer ein großes Ärgernis in kommerziellen Geräten, daß man besonders geduldig sein muß, weil der Programmierer von Hardware keine Ahnung hatte. Aber auch das Gegenteil sieht man oft, daß nicht richtig entprellt wird und dann zu viele Drücke registriert werden. Oder Geisterdrücke durch elektrostatische Entladungen erfolgen.

OP Persönliche Seite #7789132
Lesenswert?

D a v i d K. schrieb:

Ron-Hardy G. schrieb:

oder sowas?

Ich betrachte jetzt Mal den "TCA8418 I2C Controlled Keypad Scan IC" genauer. BreakoutBoard bzw. TH-Variante wäre noch praktisch fals ich keinen ähnlichen finde!

Also danke für diesen Hinweis!

EDIT: mit dem HT16K33 habe ich bereits sehr oft gearbeitet. Also komisch das ich da nicht auch drauf gekommen bin. Mal schauen, ob es für irgendeinen davon einen fertige Tasmota Treiber gibt.

Ich werde mal schauen, ob ich mich zwischen den Tagen mit dem SourceCode beschäftigen kann.

Habe erst mal 2 Feature-Requests für diese beiden Chips in GitHub auf gemacht. Vielleicht habe ich ja Glück und mir kommt jemand zuvor ;) (Der HT16K33 wird als DisplayMatrix bereits supportes, nur KeyScan finde ich nicht)

LG und einen guten Start in die Woche

#7789551
Lesenswert?

D a v i d K. schrieb:

Ich betrachte jetzt Mal den "TCA8418 I2C Controlled Keypad Scan IC" genauer. BreakoutBoard bzw. TH-Variante wäre noch praktisch fals ich keinen ähnlichen finde!

Früher hätte man dafür einen Peripherial Interface Controller (PIC)(*) genommen und den entsprechend programmiert. Das geht heute immer noch. Und Microchip-typisch bekommst Du viele Typen auch noch als DIL.

(*) Das ist der Namensursprung. Die ersten PIC16C.. waren als IO-Controller gedacht.

fchk

OP Persönliche Seite #7918105
Lesenswert?

Moin Leute, jetzt Lag meine 3x4 fast ein Jahr in der Schublade und gestern habe ich die intern verbauten Widerstände durchgemessen (soweit man das kann):

7 Löt-Anschlüsse: Pin 1= Spalte 2 (mit 2,5,8,0) Pin 2= Reihe 1 (mit 1,2,3) Pin 3= Spalte 1(mit 1,4,7,*) Pin 4= Reihe 4 (mit *, 0,#) Pin 5= Spalte 3 (mit 3,6,9,#) Pin 6= Reihe 3 (mit 7,8,9) Pin 7= Reihe 2 (mit 4,5,6)

Folgendes habe ich (ungefähr) zwischen den Pinnen gemessen: 3+2 = 70 3+7 = 140 3+6 = 230 3+4 = 200 1+2 = 106 1+7 = 150 1+6 = 330 1+4 = 200 5+2= 500 5+7=280 5+6=360 5+4=140

Folgendes spuckt mir die KI dazu aus. Nachvollziehen kann ich es leider noch nicht...

Taste Eindeutiger E24-Widerstand
1 68 Ω
2 110 Ω
3 510 Ω
4 150 Ω
5 150 Ω
6 270 Ω
7 220 Ω
8 330 Ω
9 360 Ω
* 200 Ω
0 200 Ω
# 150 Ω

(dies dient forerst nur meiner Dokumentation. Werde heute Abend den Support diverser I2Cs in der aktuellen Tasmota Firmware prüfen)

PS: Einen MCP23017 habe ich bereits am gewünschten ESP2866 mehrere gingen glaube nur bei ESP32

#7918121
Lesenswert?

D a v i d K. schrieb:

jetzt Lag meine 3x4 fast ein Jahr in der Schublade und gestern habe ich die intern verbauten Widerstände durchgemessen (soweit man das kann):

Das ist Quatsch, da sind keine Widerstände verbaut. Du mißt nur den Widerstand der Leitgummistößel. Man kann natürlich Widerstände nehmen, um mit nur einem µC-Pin auszukommen: Beitrag "Tastenmatrix auslesen über nur 2 Leitungen"

#7918407
Lesenswert?

D a v i d K. schrieb:

D a v i d K. schrieb:

Jörg R. schrieb:

74C922

oder komme ich mit dem DAV (low bei Tastendruck) in Problematiken?

Vermutlich bin ich hier doch mit einem Keypad-Modul mit I²C (z. B. via PCF8574) → dafür gibt es Tasmota-Treiber besser bedient.

Eigentlich wollte ich Dir nur auf deine Frage aus dem Eröffnungspost antworten.

D a v i d K. schrieb:

Daher hier dieser Beitrag und die Frage nach einem solchen Chip.

Natürlich im Idealfall bereits mit Treiberkompatibilität zu Tasmota.

Das Leben ist kein Ponyhof;-)

OP Persönliche Seite #7918425
Lesenswert?

D a v i d K. schrieb:

D a v i d K. schrieb:

Jörg R. schrieb:

74C922

oder komme ich mit dem DAV (low bei Tastendruck) in Problematiken?

Vermutlich bin ich hier doch mit einem Keypad-Modul mit I²C (z. B. via PCF8574) → dafür gibt es Tasmota-Treiber besser bedient.

Hab gerade noch mal den MCP23017 (der ja bereits läuft) neben den PCF8574 gelegt.

Sehe gerade keinen Vorteil vom PCF8574 (sogar langsamer) außer das es wohl irgendwie einen "Keypad-Modus" (in Tasmota) für PCF8574 geben soll, aber ich finde den Teil auch nicht in der offiziellen Doku. Daher werde ich wohl mit einem relativ hohen Polling und einigen Rules die 7 Pins selber auslesen.

Oder habt ihr noch eine bessere Idee?

OP Persönliche Seite #7918481
Lesenswert?

Hier noch schnell meine (vorerst) fertige Regel:

Rule2 ON Rules#Timer=2 DO backlog
Power8 1; delay 10; Power8 0;
if [Switch13#state] == 1 do publish keypad {"key":"1"} endon;
if [Switch14#state] == 1 do publish keypad {"key":"2"} endon;
if [Switch15#state] == 1 do publish keypad {"key":"3"} endon;
Power9 1; delay 10; Power9 0;
if [Switch13#state] == 1 do publish keypad {"key":"4"} endon;
if [Switch14#state] == 1 do publish keypad {"key":"5"} endon;
if [Switch15#state] == 1 do publish keypad {"key":"6"} endon;
Power10 1; delay 10; Power10 0;
if [Switch13#state] == 1 do publish keypad {"key":"7"} endon;
if [Switch14#state] == 1 do publish keypad {"key":"8"} endon;
if [Switch15#state] == 1 do publish keypad {"key":"9"} endon;
Power11 1; delay 10; Power11 0;
if [Switch13#state] == 1 do publish keypad {"key":"*"} endon;
if [Switch14#state] == 1 do publish keypad {"key":"0"} endon;
if [Switch15#state] == 1 do publish keypad {"key":"#"} endon;
RuleTimer2 1
ENDON

Dann noch aktivieren: Rule2 1

RuleTimer2 1 (leider nur alle Sekunde)

Daher hier noch ein Script, dass ich allerdings noch nicht in der Firmware aktiviert habe und somit nicht getestet:

D // 3 Rows (Ausgänge) gpio_init(8,1) gpio_init(9,1) gpio_init(10,1)

// 3 Cols (Eingänge) gpio_init(13,0) gpio_init(14,0) gpio_init(15,0)

P var key = "" var keys[4][3] = {"123","456","789","*0#"} var rowpins[4] = {8,9,10,11} var colpins[3] = {13,14,15} B // Scan alle 50 ms every 50 { for var r=0; r<4; r++ { // alle Zeilen LOW, nur aktuelle HIGH for var i=0; i<4; i++ do gpio(rp[i], i==r) for var c=0; c<3; c++ { if gpio(cp[c]) == 0 { if key != keys[r][c] { key = keys[r][c] publish("keypad", {"key":key}) } break } } } }

OP Persönliche Seite #7941793
Lesenswert?

So, hab da mal KEINE weitere Hardware gekauft, sondern nur die Firmware gewechselt: (anhang)

Falls ihr auf dieser Basis noch eine Idee habt, wie ich das scannen performant pausieren könnte (dachte da an etwas wie, nur * reaktiviert den Fullscan)

Und falls ihr wisst, wie ich meine primitive "Entprellung" doch dazu überrede etwas zu senden, dürft ihr gerne noch Mal schreiben ;)

Angehängte Dateien:
: Bearbeitet durch User

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