5Tasten an 3 Ports Matrix

OP #2819866
Lesenswert?

Moin Moin,

Ich habe eine für mich interessante 5 Tasten auf 3 Ports Matrix in einem 
Schaltbild für ein ATMEA 8 gefunden. Leider aber keine Source oder die 
Möglichkeit da heranzukommen.
Hat jemand eine Idee/Code Beispiel wie man so eine Schaltung abfragen 
könnte? Mir machen die Tasten UP/DOWN zu schaffen, da diese jeweils zwei 
Ports "Kurzschließen". Die Anderen ziehen die Ports jeweils auf Masse 
was ja einfach wäre dies zu programmieren( incl folgende Entprellung .. 
)
Eigentlich eine Tastaturanordnung "State of the Art" in sofern müsste es 
schon fertige Lösungen geben oder?

Herzlichen Dank für Hinweise und Tipps.

gruß
Karsten
Angehängte Dateien:
#2819874
Lesenswert?

Karsten K. schrieb:

> Eigentlich eine Tastaturanordnung "State of the Art" in sofern müsste es
> schon fertige Lösungen geben oder?

Na ja.

>
> Herzlichen Dank für Hinweise und Tipps.

Da wird heftig mit dem Einsatz von Pullup Widerständen gearbeitet.
Kein einziger der 3 Pins wird je auf Ausgang geschaltet (es sei denn auf 
Ausgang/Low, da müsste man aber nochmal drüber brüten). Externe 1 Pegel 
werden durch das Zu/Weg Schalten der Pullup Widerstände erzeugt.

Zb die ENTER Taste.
Ob die gedrückt ist oder nicht, erfährt man nur, indem man auf PD3 den 
Pullup Zuschaltet und dann nachsieht ob der Pin auf 1 gegangen ist oder 
nicht. Ist er weiterhin auf 0, dann ist ENTER gedrückt. (*)


In gleichem Masse kann man sich Systematiken für die anderen Tasten 
überlegen.

Aber ....
* Ob da tatsächlich alle Fälle eindeutig sind und nie eine Leitung offen 
ist, kann ich auf die Schnelle nicht abschätzen
* Was alles passiert, wenn mehrere Tasten gleichzeitig gedrückt sind und 
ob man zumindest diese Gleichzeitigkeit erkennen kann
... kann ich auf die Schnelle nicht sagen.


Edit: (*)
Aber nur dann, wenn Down und Right nicht auch noch gleichzeitig gedrückt 
sind.
Gast #2819911
Lesenswert?

Schöne Fleißaufgabe!
5 Taster ergeben 2^5 Möglichkeiten. Drei Tasten erzeugen bei Betätigung 
festverdrahtete Pegel, zwei brauchen Softwareinteraktion.

Da bietet sich doch eine Tabelle an um die ganzen Phantomtasten 
herauszufinden die sich bei Mehrfachbetätigung ergeben.
Gast #2819924
Lesenswert?

Jörg Wunsch schrieb:
> Einfacher wäre es, mit Analogtasten zu arbeiten (jede Taste schaltet
> einen eigenen Widerstand in einem Spannungsteiler an einem ADC-
> Eingang), da braucht man nur 1 Leitung und viel weniger Software-
> Interaktion.

Laaaangweilig ;-)))

Habe gerade noch drei weitere Tasten untergebracht (insgesamt neun) wenn 
man bereit ist drei Dioden zu opfern.
Gast #2819935
Lesenswert?

Harald Wilhelms schrieb:
> Mit drei digitalen Eingängen kannst Du normalerweise sieben
> Zustände plus Null dekodieren. Wenn man noch mehr Tasten braucht,
> geht das nur mit irgendwelchen Trickschaltungen.
> Gruss
> Harald

Das ist der Unterschied zwischen Theorie und Praxis.
Ich kann mehr und das ist sogar beweisbar!
#2819961
Lesenswert?

Norbert schrieb:
> Harald Wilhelms schrieb:
>> Mit drei digitalen Eingängen kannst Du normalerweise sieben
>> Zustände plus Null dekodieren. Wenn man noch mehr Tasten braucht,
>> geht das nur mit irgendwelchen Trickschaltungen.
>> Gruss
>> Harald
>
> Das ist der Unterschied zwischen Theorie und Praxis.
> Ich kann mehr und das ist sogar beweisbar!

Ja, mit Trickschaltungen, die die besonderen Eigenschaften
von µP-Ein/Ausgängen ausnutzen. Mit normalen Binäreingängen
gehen nur die von mir beschriebenen 2 hoch 3 Möglichkeiten.
Da helfen auch drei Beiträge nacheinander nichts. :-)
Gruss
Harald
Gast #2819976
Lesenswert?

Harald Wilhelms schrieb:
> Ja, mit Trickschaltungen, die die besonderen Eigenschaften
> von µP-Ein/Ausgängen ausnutzen. Mit normalen Binäreingängen
> gehen nur die von mir beschriebenen 2 hoch 3 Möglichkeiten.
> Da helfen auch drei Beiträge nacheinander nichts. :-)
> Gruss

Keinerlei Trickschaltungen, nur (im Sinne von ausschließlich) Dioden!

Ich bin übrigens gerade dabei noch mehr unterzubringen, muß ich mir aber 
erst noch selbst bestätigen;-)

Ich werde natürlich Heute oder Morgen das Ergebnis zum 'scrutineering' 
posten ;-)

@Peter Dannegger

Stimmt, hatte ich um 14:45 auch:-)
Gast #2819996
Lesenswert?

Update:

Bin mir ziemlich sicher, das ich gerade 16 einfache Taster untergebracht 
habe;-)

Brauche allerdings auch 15 Dioden. Mit normalen Bordmitteln habe ich 
jetzt - so glaube ich - das Ende der Fahnenstange erreicht.

Ab jetzt müsste man mit

> mit Trickschaltungen, die die besonderen Eigenschaften
> von µP-Ein/Ausgängen ausnutzen.

weitermachen, aber das spare ich mir.
Gast #2820022
Lesenswert?

Es liegt in der Natur einer Tastenabfrage via Matrix, dass das Erkennen 
von Doppelbetätigungen ein Problem für sich ist. Dabei ist es 
unerheblich ob dies aus Spaß (gucken wir mal was passiert) oder aus 
Versehen (zwei Tasten dicht beieinander) passiert.
Bei wenig Tasten kann tatsächlich, so ein A/D-Wandlereingang übrig ist, 
mit geschalteten Widerständen, eine Abfrage realisiert werden. Durch 
geschickte Wahl der Widerstände kann sogar eine Doppelbetätigung 
herausgefiltert werden.
Gast #2820093
Lesenswert?

Mini Float schrieb:
> Willst du damit denn sagen, dass ich lüge?
> Oder muss ich erst die Schaltung dazu herzeigen?
> mfg mf

Jaja, Draht zum Mond, einen Taster auf halber Strecke und einen auf dem 
Trabanten. Wenn das am I/O Pin1 generierte Signal nach ca. 1Sekunde am 
Pin2 zurückkommt, war's der Taster auf halber Strecke.
Wenn's zwei Sekunden dauert, hat jemand auf dem Mond gedrückt.

usw. ;-)
Gast #2820111
Lesenswert?

Jens schrieb:
>>>16Tasten3 Schaltung auch noch unter
>
> man bedenke, jede Taste ist bei der Schaltung und Ansteuerung separat
> abfragbar, es können mehrere auf mal gedrückt werden...
>
> JJ

Wie gesagt, ich hatte nur kurz darüber geschaut ohne es genauer zu 
analysieren..

Ich habe diese Übung hier auch mehr als Gedankenexperiment angesehen, 
die 16 Tasten erzeugen bei Mehrfachbetätigung phänomenale 
Phantomeffekte;-)
Damit wäre so etwas wohl nur in selektierten Einzelfällen zu gebrauchen.

Die nächste Gedankenübung wäre wohl, die Anfälligkeit einzelner Tasten 
für Phantomeffekte zu untersuchen und sie entsprechend räumlich 
anzuordnen um diese Effekte zu detektieren und minimieren.
#2820113
Lesenswert?

Jens schrieb:
> man bedenke, jede Taste ist bei der Schaltung und Ansteuerung separat
> abfragbar, es können mehrere auf mal gedrückt werden...

Das kann ich auch ... sogar ohne Raumfahrttechnik.

Ich nehme einen oder beliebig viele 74HC595. Die Latch-Eingänge werden 
mit so einer Mimik hier bedient:
1
         +-----------------------------------o Clock zu den '595ern
2
         |   ___ R1
3
  VCC o--(--|___|---------+      ___ Schmitt-
4
         |   ___ R2       |     |   |Trigger
5
Clock o--+--|___|---|<|---*-----| 1 |--------o Latch zu den '595ern
6
                          |     |___|
7
                        C =
8
                          |
9
  GND o-------------------+
R1, R2 und C müssen natürlich auf das verwendete Timing angepasst 
werden.
R2 klein genug, um schnell genug entladen zu können.
R1 groß genug, damit der Latch zu den 595ern erst nach ca. 8 Bitlängen 
kommt.
C klein genug, um den Clockausgang nicht zu überlasten.
mfg mf
Gast #2820131
Lesenswert?

Mini Float schrieb:
> Jens schrieb:
>> man bedenke, jede Taste ist bei der Schaltung und Ansteuerung separat
>> abfragbar, es können mehrere auf mal gedrückt werden...
>
> Das kann ich auch ... sogar ohne Raumfahrttechnik.

Ja, aber Jens konnte es ohne zusätzliche Digitalbausteine und darum ging 
es hier im Thread (spätestens seit kurz vor drei Uhr)

Mit IC Gräbern ist natürlich alles Mögliche möglich! (Auf die 
Formulierung bin ich Stolz)
Gast #2820265
Lesenswert?

Mikel M. schrieb:
> z.B. T12+T15, T9+T11, T8+T14 kämen mit je einer gemeinsamen Diode aus.

Absolut korrekt, drei könnte man sparen.
Ich hatte es in identischen Funktionsblöcken gezeichnet damit die 
erforderliche Softwarelogik besser visualisiert werden kann.
Man könnte auch sagen, ich war zu faul den erforderlichen Algorithmus 
niederzuschreiben;-)
#2820272
Lesenswert?

Mini Float schrieb:
> Jens schrieb:
>> man bedenke, jede Taste ist bei der Schaltung und Ansteuerung separat
>> abfragbar, es können mehrere auf mal gedrückt werden...
>
> Das kann ich auch ... sogar ohne Raumfahrttechnik.
>
> Ich nehme einen oder beliebig viele 74HC595.

Da Du gesagt hast unendlich nehme ich Dich da auch beim Wort, nehme also 
unendlich viele.
 So da wir die Tasten ja auch benutzen wollen, müssen wir sie abfragen. 
Leider benötigt deine Lösung schon bei der Abfrage ob eine der unendlich 
vielen Tasten gedrückt ist schon unendlich lange, terminiert also nicht. 
Damit erkläre ich die Lösung für unbrauchbar.
OP #2820278
Lesenswert?

Hey, ein Gedankenexperiment?
Ich bin Hin und Weg über den Wettbewerb! Mir ist aber nicht klar 
geworden wie nun die drei Leitungen abgefragt werden. Interne Pull-up: 
Das hatte ich übersehen, dass man die ja auch ein/ausschalten kann.
Also in etwa:
Alle Pull-Up ein, alle Leitungen auf Eingang.
Nachsehen ob eine der drei Eingänge auf LOW liegt ( dann ist die entspr. 
Taste gedrückt)
Um aber jetzt die Taste UP/DOW zu erkennen, müsste ich jeweils eine 
Leitung als Ausgang beschalten und auf LOW setzten. Die "komplementäre" 
Leitung muss dann auf Eingang mit Pull-Up sein.

Würde das so gehen?

Gruß
Karsten
Gast #2820309
Lesenswert?

Na gut, wenn ich schon male, dann muß ich auch erklären;-)

Alle Pull-Up ein, alle Leitungen auf Eingang.

  Wenn In0|In1|In2 == 0:
    irgendeine der Tasten T0 - T6 gedrückt
    In0 == 0:        ==> T0
    In1 == 0:        ==> T2
    In2 == 0:        ==> T4
    In0 == 0 && In1 == 0:      ==> T1
    In1 == 0 && In2 == 0:      ==> T3
    In0 == 0 && In2 == 0:      ==> T5
    In0 == 0 && In1 == 0 && In2 == 0:    ==> T6
  Sonst:
    I/O0 auf Output Out0:0, I/O1 auf Input
    In1 == 0:        ==> T7 oder T9
    I/O0 auf Input, I/O1 auf Output Out1:0
    In0 == 0:        ==> T7 oder T8

    Wenn beide Male T7 detektiert wurde, war's auch T7,
    sonst T8 oder T9 oder keine.

Für die anderen logischen Blöcke wiederholen
#2820435
Lesenswert?

Wobei man bei Norbert Schaltung auch noch dazu sagen muß, das man nur 
einen vernünftigen Wert bekommt, wenn nur genau eine Taste gedrückt 
wird.
 Man kann nicht eindeutig erkennen ob zwei oder mehr Tasten gedrückt 
sind. z.B. wenn man T8 und T9 gleichzeitig drückt, wird T7 gemeldet. 
Wenn T7 gedrückt ist kann man einerlei Aussage über die Taste T8 oder T9 
machen.
 Das Problem wurde oben ja schon angedeutet mit Phantomeffekte.
 Darum sollte man bei so einer Schaltung sich die Belegung der Tasten 
gut überlegen.
 ungünstige Beispiele: T8 soll Temperatur anzeigen, T9 Spannung 
anzeigen, T7 ist notaus. wenn T8 klemmt und jemand Spannung anzeigen 
will, gibts nen notaus. Genauso ungünstig wenn t9 notaus ist, t8 ist 
gedrückt (z.b. defekt) dann funktioniert der notaus nicht mehr.

 Ich bevorzuge normalerweise Tastenfelder bei denen man 2 gedrückte 
eindeutig erkennen kann, und bei mehr als 2 feststellen kann das mehr 
als 2 gedrückt wurden. ... aber es kommt immer auch die Anwendung an.
Gast #2820830
Lesenswert?

Ist mir gestern Abend, als die Zahnbürste im Gesicht steckte, auch noch 
eingefallen. Da war der Rechner aber schon aus.

Wir können somit 6 weitere Tasten unterbringen und sind damit bei:

Drei Portpins / 22 Tasten

Gleichzeitig nähern wir uns damit - wenn auch vorsichtig - dem Zustand, 
welcher bereits im OP angesprochen wurde:

    *"State of the Art"*


PS. Auch wenn die Aufgabenstellung es nicht beinhaltet, es würden sich 
noch sechs unabhängig steuerbare LEDs anschließen lassen.
Gast #2820938
Lesenswert?

Hannes schrieb:
> ich suche noch etwas für 6 Tasten und 2 Duo LED an 4 Portpins. Die hier
> verlinkte Schaltung geht ja leider nur mit 5 Portpins. Es sollen alle
> Tasten getrennt erkennbar sein...

Wenn du mit 'getrennt' meinst das auch mehrere/alle gleichzeitig 
gedrückten Tasten erkannt werden, dann

1) überlege doch einmal wieviele Informationen du darstellen must um das 
zu bewerkstelligen.

2) Im Anschluss vergleichst du das Ergebnis mit den Möglichkeiten die 
dir 4 I/Os geben.

3) sei entäuscht ;-)
Gast #2820948
Lesenswert?

1) naja, das ist ja immer so eine Sache. letztendlich kann ich über 4 
Pins 16 Zustände darstellen. Jedoch haben wir ja jetzt egrade gelernt 
das mit einem Trick auch 3 reichen. Genau wie beim Charlieplexing auf 
mal mit 9 Pins 9-7Segmentanzeigen steuerbar sind...

2) vielleicht ist noch ein Trick in der Kiste der übersehen wurde... 
zwischen den 4 Leitungen gibt es jedenfalls 6 Verbindungsmöglichkeiten, 
nur bekomme ich dann die LEDs nicht mehr dazwischen...

3) die Hoffnung stirbt zuletzt.
Hannes
Gast #2820963
Lesenswert?

Du darfst die LEDs nicht getrennt von den Tasten betrachten, dazu hast 
du nicht wirklich genug I/Os.

Noch's kleiner Tip. Für den kurzen Moment der Tastenabfrage zeigen die 
LEDs nicht das an was du haben willst (aber nur für ein paar µs)
Gast #2821004
Lesenswert?

>>Sechs Tasten geht

wie?

>>Du darfst die LEDs nicht getrennt von den Tasten betrachten

wird ja auch nicht gemacht, es sind nur keine Zustände mehr frei...

eine Sache fällt mir noch ein, doppelverbindungen zwischen den punkten

A >taste1 B
A <taste2 B

B >taste3 C
B <taste4 C

C >taste5 D
C <taste6 D

D >LEDA 1/2 B
D <LEDA 2/2 B

C >LEDB 1/2 A
C >LEDB 2/2 A

Aber dann habe ich durch die LEDs eine Verbindung zwischen den Punkten A 
und C sowie B und D was zu Problemen mit der Tastenabfrage führen 
wird...


Hannes
Gast #2821461
Lesenswert?

Schaltung ist ja fast schon komplett.

Du musst jetzt nur noch dafür sorgen, das die LEDs nicht die Pegel zu 
weit runterziehen.

Wenn die I/Os auf Input mit Pull-up gesetzt sind, würde sich 
normalerweise ein (Taster offen) ein High Pegel ergeben. V_ih_ muss laut 
Datenblatt beim m8 min. 0,6*Vcc sein.
Bei Vcc == 5V wären das min. 3V.

Die LEDs in deiner Schaltung würden aber V_ih_ auf ca. 1,8V ziehen und 
damit die Tastenauswertung verhindern.

Also muß man dafür sorgen, das die LEDs das Potential nicht auf weniger 
als 3V ziehen. (Dioden in Serie bis passt) und dann die Vorwiderstände 
anpassen.

Schon geht's
Gast #2821468
Lesenswert?

Ach ja, in der alternativen Version würde man die vier LEDs jeweils über 
einen R mit der Anode auf Vcc und mit den vier Kathoden auf die vier 
Eingänge legen.

Ein Output Low lässt die Dinger leuchten und für die paar Mikrosekunden 
der Tastaturabfrage schaltet man die I/Os eben wie man's braucht.

Ist eigentlich sogar noch eleganter als meine erste Version.
Gast #2821571
Lesenswert?

Hannes schrieb:
> ...ich habe noch mal drüber nachgedacht. Wenn ich Taster oben links und
> oben mitte gedrückt halte, kann die LED nicht mehr leuchten... oder?

Darum kann man diese Art von Schaltungen auch nur mit Tastern und nicht 
mit Schaltern nutzen.

Für die (kurze) Dauer der Betätigung werden die LEDs nicht wie 
programmatisch geplant angesteuert.
Gast #2821574
Lesenswert?

...:-) das ist aber bei der mit 5 pins anders. Sie ist darauf ausgelegt 
einen Taster für eine Schnelllauffunktion gedrückt zu halten, das geht 
auch mit >1 gleichzeitig, trotzdem funktionieren die LED. Da steckt 
schon viel Schmalz dahinter, denkt man bei so einer übersichtlichen 
Aufgabe eigentlich garnicht...

Ich denke das ist mit 4 Pins einfach nicht machbar, zumindest nicht wenn 
man nur Dioden nutzt...

Hannes
Gast #2821590
Lesenswert?

>>Jede Aufgabe braucht eine eigenständige, auf sie zugeschnittene Lösung

Naja, meistens gibt es eine Lösung die immer passt, wenn sie das Maximum 
an dem was denkbar ist einfach mit bringt. Bei Tasten und LEDs in einer 
zusammenschaltung ist es gegeben wenn:

sich jede LED unabhängig und zu jeder Zeit ansteuern lässt.
sich jede Taste unabhängig und zu jeder und für jede Zeit betätigen und 
separat auswerten lässt.

So eine Schaltung suche ich für 6 Tasten und 2 Duo LEDs an 4 Portpins. 
Zugabe maximal Hühnerfutter wie beim 5 Tasten Beispiel...

Hannes
Gast #2821635
Lesenswert?

Hannes schrieb:
> Naja, meistens gibt es eine Lösung die immer passt, wenn sie das Maximum
> an dem was denkbar ist einfach mit bringt.

Da möchte ich widersprechen, eine solche Lösung ist bestenfalls 
universell, kann aber nur in einem Spezialfall optimal sein. Die 
Spezialfall ist dann gegeben, wenn die Anforderungen sich präzise mit 
der angebotenen Lösung decken.

> sich jede LED unabhängig und zu jeder Zeit ansteuern lässt.
> sich jede Taste unabhängig und zu jeder und für jede Zeit betätigen und
> separat auswerten lässt.

Nur dann, wenn man das auch genau so braucht!

Andere Anforderungen könnten jedoch auch sein:
1) Weniger genutzte I/Os
2) Mehr Tasten
3) weniger Softwareoverhead (timing/flash)
...
Ich all solchen Fällen muß man eine Speziallösung schneidern.

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