Forum: Mikrocontroller und Digitale Elektronik Keypad 3x4 (am Tasmota o.ä.)


von D a v i d K. (oekel) Benutzerseite


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

: Bearbeitet durch User
von Ron-Hardy G. (ron-hardy)


Lesenswert?

PT6961 o.ä.

: Bearbeitet durch User
von Sherlock 🕵🏽‍♂️ (Gast)


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.

von D a v i d K. (oekel) Benutzerseite


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"

: Bearbeitet durch User
von Sherlock 🕵🏽‍♂️ (Gast)


Lesenswert?

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.

von Ron-Hardy G. (ron-hardy)


Angehängte Dateien:

Lesenswert?

oder sowas?

von Sherlock 🕵🏽‍♂️ (Gast)


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

von D a v i d K. (oekel) Benutzerseite


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.

von D a v i d K. (oekel) Benutzerseite


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.

: Bearbeitet durch User
von Peter D. (peda)


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.

von D a v i d K. (oekel) Benutzerseite


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

von Frank K. (fchk)


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

von D a v i d K. (oekel) Benutzerseite


Lesenswert?

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.

von D a v i d K. (oekel) Benutzerseite


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

: Bearbeitet durch User
von Jörg R. (solar77)


Lesenswert?

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
von Peter D. (peda)


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"

von D a v i d K. (oekel) Benutzerseite


Lesenswert?

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?

von D a v i d K. (oekel) Benutzerseite


Lesenswert?

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.

von Jörg R. (solar77)


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;-)

von D a v i d K. (oekel) Benutzerseite


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?

von D a v i d K. (oekel) Benutzerseite


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

von Oliver S. (phetty)


Lesenswert?

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
Noch kein Account? Hier anmelden.