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...)
:
Bearbeitet durch User
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.
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"
:
Bearbeitet durch User
D a v i d K. schrieb: > https://www.smarthome-tricks.de/esp8266/esp8266-4x4-tastatur-an-analogen-pin-verwenden/ Würde ich nicht machen, denn der ADC des ESP8266 ist ein grobes zittriges Schätzeisen mit bis zu 20% Abweichung. Brauchbar funktioniert er nur, wenn WLAN deaktiviert ist, aber um WLAN ein/aus zu schalten muss man den Chip rebooten.
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).
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.
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.
:
Bearbeitet durch User
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.
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
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
Frank K. schrieb: > (*) Das ist der Namensursprung. Die ersten PIC16C.. waren als > IO-Controller gedacht. Man lernt nie aus. Hab erst ein mal in meinem Leben einen PIC programmiert. (War glaube eine alternative DMX Software einen mini Par-LED-Scheinwerfers) Gute 15 Jahre her.
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
:
Bearbeitet durch User
D a v i d K. schrieb: > Moin Leute, > jetzt Lag meine 3x4 fast ein Jahr in der Schublade.. 74C922 https://www.mouser.com/datasheet/2/308/MM74C922-1120961.pdf
:
Bearbeitet durch User
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"
Jörg R. schrieb: > 74C922 > 4-Bit parallele Datenleitungen (D0–D3) → Binärcode der Taste Das sollte ja mit meinem bereits angehängten MCP23017 funktionieren, oder komme ich mit dem DAV (low bei Tastendruck) in Problematiken?
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.
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;-)
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?
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 } } } }
Ein TM1638 bietet einiges und ist so herrlich retro: https://www.ebay.de/itm/176118952725?_ul=DE&rb_itemId=176118952725 Oder den rohen Chip nehmen und da eigene Tasten dran.
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.