mikrocontroller.net

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


Autor: H. G. (ledi)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Hannes Lux (hannes)
Datum:

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

...

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/Mikrocontroll...).

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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. ;)

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Peter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: skorpionx (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Beitrag "Binär-kodierte Tastatur"

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: gerd (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: gerd (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: gerd (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: H. G. (ledi)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: H. G. (ledi)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: A. K. (prx)
Datum:

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

Autor: H. G. (ledi)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-).

Autor: H. G. (ledi)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
OK!
Wenn ich das richtig verstehe, also so wie im Bild.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.