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
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.
Der Witz ist wohl, PD3 abwechselnd auf Low (Ausgang) oder Eingang mit internem Pull-Up zu schalten. So kann man dann die Schalter, die an denselben µC-Pin führen, auseinanderhalten.
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.
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.
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.
Norbert schrieb: > Ich sehe gerade noch eine Möglichkeit für eine sechste Taste! 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
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!
Kleine Hilfestellung: Du gehts bei deiner Berechnung von drei Eingängen aus. Wir haben hier aber deutlich mehr als drei Eingänge
Norbert schrieb: > Update: 12 Tasten bei Einsatz von sechs Dioden. Ich kommen nur auf 9 Taster mit 3 Dioden. Peter
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
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:-)
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.
Norbert schrieb: > Stimmt, hatte ich um 14:45 auch:-) Jetzt sinds bei mir auch 12 Tasten + 6 Dioden. Peter
Peter Dannegger schrieb: > Jetzt sinds bei mir auch 12 Tasten + 6 Dioden. Na, das wird aber wieder 'ne nette Entprellroutine ;-) Gruß, Frank
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.
Peter Dannegger schrieb: > Jetzt sinds bei mir auch 12 Tasten + 6 Dioden. Na komm, vier gehen noch... Bild meiner Schaltung hab' ich schon mal handgemalt...
Norbert schrieb: > Na gut, delivery time! > > 16 Tasten, drei I/Os Unendlich viele Tasten, zwei GPIO. mfg mf PS: Die Schaltung wäre aber schon halb-analog. Dabei hängt der "Analogteil" aber nicht mit den Tasten zusamen, wie bei der ADC-Lösung, die mit nur einem Pin auskommt.
Mini Float schrieb: > Unendlich viele Tasten, zwei GPIO. > mfg mf Du bist dir aber schon darüber im Klaren das selbst die Hälfte von 'Unendlich' schon eine enorme Menge ist, oder? ;-)
Norbert schrieb: > Mini Float schrieb: >> Unendlich viele Tasten, zwei GPIO. >> mfg mf > > Du bist dir aber schon darüber im Klaren das selbst die Hälfte von > 'Unendlich' schon eine enorme Menge ist, oder? ;-) Willst du damit denn sagen, dass ich lüge? Oder muss ich erst die Schaltung dazu herzeigen? mfg mf
Jens schrieb: > Beitrag "6 IO Pins für 6 Taster und 2 Duo LED (Bauteile z.B. von Pollin)" > > JJ Hab jetzt nur flüchtig darübergeschaut, aber ich denke sechs LEDs bringe ich in der 16Tasten3 Schaltung auch noch unter ohne mich krumm zu machen.
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. ;-)
>>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
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.
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
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)
Norbert schrieb: > Na gut, delivery time! > > 16 Tasten, drei I/Os Da es nichts gibt, was man nicht noch verbessern könnte, warum hast du soviel Dioden verschwendet :D z.B. T12+T15, T9+T11, T8+T14 kämen mit je einer gemeinsamen Diode aus.
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;-)
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.
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
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
>> Wenn In0|In1|In2 == 0:
Diese Zeile ist unklar, sie soll bedeuten:
Wenn In0 == 0 || In1 == 0 || In2 == 0:
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.
Juuuchuuu! Dann habe ich das Prinzip soweit verstanden. Vielen Dank Jungs! Ist immer wieder erfrischend und sehr nett hier! Gruß Karsten
Norbert, Du warst nicht konsequent! Zwischen den 3 Leitungen lassen sich noch Taster mit 2 Dioden unterbringen! So gehen noch mindestens 3 Taster! ;-) Gruß Jobst
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.
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... Ich sehe aber indiesem Schaltplan: Beitrag "6 IO Pins für 6 Taster und 2 Duo LED (Bauteile z.B. von Pollin)" keine Kürzungsmöglichkeiten mehr... Vielleicht hat hier noch jemd. eine Idee? Hannes
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 ;-)
Streiche Punkt 3) Sechs Tasten geht, Lösung lässt sich aus den weiter oben gezeichneten Schaltungen ableiten! ;-)
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
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)
>>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
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
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.
...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? Es sind Duo LEDs mit 2 Pins, da kann man die Anode nicht auf Vcc legen... Hannes
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.
...:-) 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
Tja, so ist das. Jede Aufgabe braucht eine eigenständige, auf sie zugeschnittene Lösung.
>>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
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.
ok, wenn man es so sieht :-) Nunja, dann muss ich wohl mal weitertüfteln bis ich alles durch habe :-) Dank dir trotzdem! :-) Hannes
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.