Forum: Mikrocontroller und Digitale Elektronik 3x4 Tastenmatrix - Reduzierung auf 5 Portpins?


von H. G. (ledi)


Lesenswert?

Ich möchte eine Fernbedienung mit einer 12er Tastatur (3x4 Matrix) und 
einem ATtiny44 Prozessor entwerfen. Die 3 Spalten der Tastenmatrix 
sollen dabei einen Interrupt auslösen (zum Aufwecken des UC).

Insgesamt benötige ich so 7 Portpins nur für die Tastenmatrix und für 
die restlichen Anforderungen fehlen mir 2 Portpins!

- Wie kann ich die Tastenmatrix auf max. 5 Portpins reduzieren?
- Expander 74HC138?

von Hannes L. (hannes)


Lesenswert?

12 bis 16 Tasten gehen auch mit einem Pin über den ADC. Kostet nur ein 
paar Widerstände.

...

von (prx) A. K. (prx)


Lesenswert?


von Peter D. (peda)


Lesenswert?


von Martin (Gast)


Lesenswert?

Einfach & simpel: für die digitale Abfrage von 12 Tasten reichen 4 Pins 
(4^2 - 4, allgemein n^2 - n) (siehe unter 4. 
http://www-user.tu-chemnitz.de/~heha/Mikrocontroller/Tastenmatrix.htm).

von (prx) A. K. (prx)


Lesenswert?

Martin schrieb:

> Einfach & simpel: für die digitale Abfrage von 12 Tasten reichen 4 Pins
> (4^2 - 4, allgemein n^2 - n) (siehe unter 4.

Allerdings eignen sich diese Methoden nicht für existierende fertig 
verdrahtete 3x4 Matrixtastaturen.

von Martin (Gast)


Lesenswert?

Vielleicht muss man sich nur etwas bemühen, damit es funktioniert. Ein 
Taschentuch kann ich schon reichen, nur die Nase - die muss man sich 
schon selbst putzen. ;)

von (prx) A. K. (prx)


Lesenswert?

Könntest du bitte mir zuliebe mal eine Ausnahme machen und mir die Nase 
putzen? Macht Mutti bei den Kinderchen schliesslich auch. Ich komme 
nämlich grad nicht drauf, wie die Variante 4 mit einer fertigen 
3x4-Matrix zurecht kommt (ohne diese aufzutrennen und neu zu 
verdrahten).

von Peter (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
je nach Controller könnte evt. sowas funktionieren. So brauchst du 
allerdings schaltbare Pullups und Downs. Doppelte Tastenanschläge dürfen 
auch nicht vorkommen. Ich hoff mal das ich kein Denkfehler drin habe. 
Sobald beide eingänge High/Tristate sind geht der letzte an. Falls der 
Controller Tristate kann, kann man das Signal noch invertiere. Kostet 
aber noch ein Transistor.
Gruß
Peter

von (prx) A. K. (prx)


Lesenswert?

Peter Daneggers ADC-Variante lässt sich so erweitern, dass sie auch aus 
dem Sleep-Mode aufwecken kann. Dazu schliesst man R1 nicht an Vcc an, 
sondern am Interrupt-Pin, mit Pullup 47K an Vcc.

Bei normaler Tastenabfrage ist der Interrupt-Pin ein Ausgang auf "high", 
das ergibt Peters Schaltung. Im Sleep-Modus ist er ein Eingang.

von skorpionx (Gast)


Angehängte Dateien:

Lesenswert?

Beitrag "Binär-kodierte Tastatur"

Mit der Shift-Taste unterscheide ich 30 (2*15) Zustände. Und das 
funktioniert...

von Peter D. (peda)


Lesenswert?

A. K. schrieb:
> Peter Daneggers ADC-Variante lässt sich so erweitern, dass sie auch aus
> dem Sleep-Mode aufwecken kann. Dazu schliesst man R1 nicht an Vcc an,
> sondern am Interrupt-Pin, mit Pullup 47K an Vcc.

Man braucht keinen extra Pin.
Man macht den Widerstand so groß, daß bei gedrückter Taste <0,3*VCC 
anliegen und nimmt den Pin-Change-Interrupt zum Aufwachen.


Peter

von (prx) A. K. (prx)


Lesenswert?

Heimo G. schrieb im falschen Thread:

> An welchen Stellen der Tastenmatrix soll die die Pins für den
> Pinchange-Interrupt anschließen, damit ich eindeutige Pegel bekomme?

Er meint den ADC-Pin selbst, in einer Doppelrolle. Einerseits als 
analogem ADC-Eingang für die individuelle Tastenerkennung, andererseits 
als Digitaleingang mit Pin-Change Funktion um den Controller 
aufzuwecken.

Allerdings setzt das voraus, dass R1 grösser dimensioniert wird, damit 
die Spannung bei egal welcher gedrückten Taste nicht über 1/3 Vcc liegt. 
Sonst funktioniert das mit dem Pinchange-Interrupt nicht.

von gerd (Gast)


Angehängte Dateien:

Lesenswert?

Hallo.

Ich habe gerade so etwas mit einer Zehnertastatur und dem ATtiny45 
gebaut (siehe Schaltbild im Anhang). Funktioniert wunderbar. Mein 
Fernseher gehorcht schon auf Tastendruck. Den Beamer, den NF-Verstärker, 
den HD-Recorder und den SAT-Receiver kriege ich da auch noch integriert. 
Endlich haben die x Fernsteuerungen ausgedient.
Der Quarz ist wahrscheinlich überkandidelt, weil die IR-Receiver breit 
wie Scheunentore reagieren. Aber man will ja möglichst genau die 38,4 
kHz einhalten. Oder sind es 36 oder 40 kHz?

mfg
gerd

von (prx) A. K. (prx)


Lesenswert?

gerd schrieb:

> Ich habe gerade so etwas mit einer Zehnertastatur und dem ATtiny45
> gebaut (siehe Schaltbild im Anhang). Funktioniert wunderbar.

Wie sieht es da denn mit dem Stromverbrauch aus? Sleep-Mode mit Wakeup 
durch Taste geht ja schlecht, diese Variante gibt das nicht her.

von Peter D. (peda)


Lesenswert?

gerd schrieb:
> Funktioniert wunderbar.

Nö.

Ungedrückt liegt der Pin auf GND, d.h. jede Taste muß high (0,6*VCC) 
liefern zum Aufwachen.
Die *-Taste liefert aber nur VCC/13, da wacht kein Pin-Change-Interrupt 
auf.


Peter

von gerd (Gast)


Angehängte Dateien:

Lesenswert?

> Wie sieht es da denn mit dem Stromverbrauch aus? Sleep-Mode mit Wakeup
> durch Taste geht ja schlecht, diese Variante gibt das nicht her.

Bei 3 V und mit ADC-Int 0,5 mA. Das mit dem Stromverbrauch habe ich - 
ganz altmodisch - mit einem Schalter gelöst (Stromverbrauch im 
ausgeschalteten Zustand << 100 nA, dürfte auch noch deutlich besser sein 
als bei Wake-Up, siehe Anhang).

Umdimensionierung des Netzwerks wäre ein Leichtes, wenn ich bloss das 
blöde OpenOffice-Rechensheet auf meinen fünf Festplatten finden könnte.

Jetzt sehe ich erst mal zu, ob ich die anderen Geräte analysiert kriege. 
Jede Fernsteuerung macht andere Signalfolgen. Daran kann man schön 
sehen, was man mit Normung für segensreiche Wirkungen erreichen kann.

mfg
gerd

von Peter D. (peda)


Lesenswert?

gerd schrieb:
> Umdimensionierung des Netzwerks wäre ein Leichtes, wenn ich bloss das
> blöde OpenOffice-Rechensheet auf meinen fünf Festplatten finden könnte.

Schau Dir mal meinen Code an.
Da macht das Rechnen einfach der Compiler, man muß nur die 3 
Widerstandswerte eintragen.

Man muß bei meiner Schaltung den Widerstand gegen VCC nur so groß 
machen, daß low sicher erkannt wird.
Und wenn für den hochohmigsten Tastenwert 1,25V nicht überschritten 
werden, vergleicht man einfach nur die untersten 8Bit.
ADCH muß aber trotzdem ausgelesen werden (dummy read).


Peter

von gerd (Gast)



Lesenswert?

Peter Dannegger schrieb:
> Schau Dir mal meinen Code an.
> Da macht das Rechnen einfach der Compiler, man muß nur die 3
> Widerstandswerte eintragen.

Davon halte ich nicht so arg viel, weil ich die Widerstandsverhältnisse 
gerne selbst im Griff haben will. Die Widerstandsverhältnisse sind arg 
nichtlinear, weil so gut wie alles von allem abhängt. Und da hat man 
schnell eine Nichtlinearität drin.

Wenn man keine Ordnung hält, muss man alles noch mal erfinden. Im Anhang 
ein Abbild des Berechnungssheets, mit Kurve für die Optimierung, und das 
alles bei 8 Bit Auflösung (ADLAR). Wie man sieht, ist das trotzdem recht 
robust.

> Man muß bei meiner Schaltung den Widerstand gegen VCC nur so groß
> machen, daß low sicher erkannt wird.

Wenn ich das Datenblatt richtig verstehe, sind das 0,5*VCC.

> Und wenn für den hochohmigsten Tastenwert 1,25V nicht überschritten
> werden, vergleicht man einfach nur die untersten 8Bit.
> ADCH muß aber trotzdem ausgelesen werden (dummy read).

10 Bit Auflösung sind eigentlich nicht nötig. Anbei noch den Rechensheet 
für die höhere Mindestspannung.

mfg
gerd

von (prx) A. K. (prx)


Lesenswert?

gerd schrieb:

> Wenn ich das Datenblatt richtig verstehe, sind das 0,5*VCC.

Nein.

Vil = 0,3*Vcc.
Vih = 0,6*Vcc

D.h. der nutzbare ADC-Bereich ist grösser wenn man nicht 0,0..0,3*Vcc 
sondern 0,6..1,0*Vcc nutzt, die Leitung im Ruhezustand also high ist. In 
Peters Variante müsste man die Matrixverschaltung dazu einfach auf den 
Kopf stellen.

von H. G. (ledi)


Lesenswert?

Also ich habe als VCC 2Stk. AA-Batterien od. Akkus (VCC also ca. 2-3V).
Funktioniert das dann überhaubt noch zuverlässig ? Auch mit Aufwecken 
aus dem sleep mode?

von (prx) A. K. (prx)


Lesenswert?

Ich sehe keinen Grund weshalb es nicht funktionieren sollte. Unterhalb 
von 2,4V gelten allerdings andere Vil/Vih Werte:
 Vil = 0,2*Vcc.
 Vih = 0,7*Vcc
Die Matrix sollte also auf 0,7..1,0*Vcc dimensioniert werden.

von H. G. (ledi)


Lesenswert?

OK!
D.h. Wenn ich VCCmin mit 2V annehme, dann habe ich für den ADC 1,4 bis 
2V zur Verfügung.
Wie beschalte ich nun den Int. fürs aufwecken?

von (prx) A. K. (prx)


Lesenswert?

Beitrag "Re: 3x4 Tastenmatrix - Reduzierung auf 5 Portpins?"
Nur eben andersrum, also Ruhepegel low und bei low=>high aufwecken.

von H. G. (ledi)


Lesenswert?

A. K. schrieb:
> Nur eben andersrum, also Ruhepegel low und bei low=>high aufwecken.

Jetzt bin ich etwas verwirrt. Kannst du mir das bitte genau erklären?

von (prx) A. K. (prx)


Lesenswert?

Peters Vorschlag war, die Matrix im Ruhezustand auf high zu halten, dis 
Tasten ziehen dann auf 0..33%Vcc (Datasheet wäre 0..30%). Wakeup erfolgt 
also bei high=>low. Die Methode, in Ruhe high und aktiv low zu arbeiten, 
ist halt eine alte liebgewordene Tradition aus TTL-Zeiten.

Bei niedriger Vcc müsste man das auf 0..20%Vcc anpassen, was den 
ADC-Bereich schon etwas einschränkt. Kann man natürlich auch machen, nur 
ist das Verfahren ja völlig spiegelsymmetrisch. Vertauscht man die Rolle 
von Vcc und GND, dann darf sich das ADC-Signal für die Tasten im Bereich 
70-100%Vcc bewegen und der Pinchange-Interrupt für Wakeup reagiert auf 
low=>high.

Wenn das immer noch zu kompliziert klingt, dann such dir einen 
Übersetzer ;-).

von H. G. (ledi)


Angehängte Dateien:

Lesenswert?

OK!
Wenn ich das richtig verstehe, also so wie im Bild.

von (prx) A. K. (prx)


Lesenswert?

Fast. R1 muss soweit vergrössert werden, dass die Spannung bei jedem 
Tastendruck mindestens 70%Vcc beträgt.

Ausserdem hast du die Doppelfunktion des ADC/Pinchange-Pins immer noch 
nicht kapiert. Findet sich jemand, der ihm das mit einfacheren Worten 
eintrichtern kann als ich?

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.