PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie kann ein Tasterdruck einen weiteren verhindern?



michigrunf
13.04.2006, 09:35
Hallo,

ich habe z.Zt. folgende Schaltung:
http://ghsabine001.gh.funpic.de/SPJ1.png

Nun möchte ich aber, dass ein Tastendruck nichts bewirkt, wenn schon eine andere Taste gedrückt ist. Ich könnte jetzt zwar einfach 5 Wechslerrelais einbauen, aber naja...

Mit Transistoren und Nicht-Schaltungen geht es wohl ganz einfach.
Nur muss ich unbedingt 32 Nicht-Schaltungen für 32 Taster bauen?
Geht das nicht einfacher?

Lunarman
13.04.2006, 10:03
das hast du doch schon. Du hast da doch so eine "Querstrebe" nach den Tastern die über alle Leitungen geht. Das bedeutet, wenn du einen Taster drückst sind alle drei Leitungen am AVR an, wenn nicht, ist keine an. Und wenn du jetzt einen zweiten Taster drückst dann hast du immernoch drei Leitungen an, und wenn du drei Taster drückst hast du auch drei leitungen auf 1. Also ist das im Grunde eine ODER-Schaltung. Wenn ich mich nicht vertan habe, natürlich.
(http://img91.imageshack.us/my.php?image=spj18ea.png)

Vitis
13.04.2006, 10:06
Laut Deinem Schaltplan werden immer alle 3 Eingänge des
AVR geschaltet, ganz egal welcher Taster gedrückt ist ... soll das so?
Es würd dann auch ein Eingang reichen.

Der Sinn einen µC zu verwenden ist es ja gerade, das
eben nicht 32 Gatterschaltungen für eine Funktion erforderlich ist.

es könnte z.B. im AVR ein progrämmchen abgelegt werden,
das die Abfragen priorisiert.

wenn eingang 1 = 1 dann
....Aktion 1
sonst
....wenn eingang 2 = 1 dann
............Aktion 2
....sonst
............wenn eingang 3 = 1 dann
....................Aktion 3
............ende wenn3
....ende wenn2
ende wenn1

djdune
13.04.2006, 10:11
Das musst du mit Dioden auskoppeln.
Am Besten nachher Softwaremäßig schauen, welcher Taster der erste war, der gedrückt wurde. Verhindern kann man es nie, dass 2 Tasten gleichzeitg gedrückt werden, es sei denn du klebst ein Schild drauf "Immer nur eine"

michigrunf
13.04.2006, 10:26
Ich muss mich entschuldigen.
Habe die Dioden vergessen einzuzeichnen.
Es sind natürlich nicht alle drei Leitungen miteinander verknüpft.

Das ganze besteht in der Wirklichkeit aus 32 Tastern. Allerdings muss immer nur einer zur Zeit gedrückt werden, weshalb ich einfach mittels "Binärkodierung" anstatt alle Eingänge des AVRs zu benutzen nur 5 brauche (2^5=32). Wenn man dann allerdings noch aus Versehen eine zweite Taste drückt, wird das ganze als eine völlig andere Taste interpretiert. Deshalb brauche ich eine Schutzvorrichtung, die dafür sorgt, dass alle Tastendrücke ignoriert werden, sofern schon eine Taste gedrückt ist.

michigrunf
13.04.2006, 10:42
Hier nochmal der richtige Schaltplan:
http://ghsabine001.gh.funpic.de/SPJ1b.png

xtw
13.04.2006, 10:43
Ich glaube, Deine Schaltung sollte so aussehen, oder ?! :)

Die einzige Möglichkeit, zu verhindern, dass zwei Tasten erkannt werden, ist, (SPS-mäßig gesprochen, ich kann mich noch nicht in "Bascom" ausdrücken), bei der Betätigung eines Tasters einen Merker zu setzen und den Tastenwert zu übernehmen. Der Merker bleibt dann so lange gesetzt, bis KEINE Taste mehr gedrückt wird. Solange der Merker gesetzt ist, wird einfach jede weitere Taste ignoriert.

Eigentlich ganz simpel...

michigrunf
13.04.2006, 10:56
Auweia :-#, ja so sollte das sein...

Ich möchte das ja gerne mit Hardware machen.
Möglichkeit 1: 32 Wechselrelais
Möglichkeit 2: 32 Nicht-Schaltungen
Möglichkeit 3: ?

Goblin
13.04.2006, 11:34
nen pullup würd ich jeweils noch reinmachen. sonst gibts datenmüll

xtw
13.04.2006, 14:01
Dafür gibt es doch "1 aus X"-Bausteine (74...). Ich komme grade nicht an meine Vergleichsbücher, aber danach solltest Du suchen.

@Goblin : reichen dafür nicht die internen Pull-Ups (sofern geschaltet) ??

Superhirn
13.04.2006, 14:41
Hi,

ich würd dir ehr empfehlen, dass zu programmieren. zb wenn ein taster gedrückt ist, können dir ja die anderen egal sein. ist sicher viel einafcher als eine komplizierte schaltung.

franzl
13.04.2006, 17:21
Hallo
Ich rate dir auch diese Schaltung zu Programmieren, denn der Aufwand
ist mit sicherheit viel größer wenn du diese Schaltung Hardwaremäßig
lösen möchtest.

Superhirn
13.04.2006, 17:26
Hallo,

was hast du am Schluss vor damit zu machen? Denn dann könnten wir dir evt. mehr elfe, ob es lieber hardware oder programmierung sein muss. ich empfehle jedoch immer Programmierung. Es sind ja nur ein paar zeilen mehr. Evt. sparst du dir somit auch noch etwas rechenzeit. \:D/

Thomas

RCO
13.04.2006, 18:06
Ein andere Möglichkeit wäre, dass du das ganze nciht über I/O-Pins machst, sondern über ein Widerstandsnetzwerk. Wenn due die Wiederstände günstig wählst, ist es damit möglich über nur einen Pin sogar das drücken mehrer Schlater zu erkennen!

Schau dazu mal in den Schlplan vom Asuro, der nutzt dieses Prinzi nämlich!
http://www.arexx.com/arexx.php?cmd=goto&cparam=p_asuro_downloads.dat
(Schaltplan ist in der Anleitung)

franzl
13.04.2006, 18:31
Hallo
Über die Aussage von RCO. Ich habe gehört, dass bei einem Widerstandsnetzwerk bei Betätigen von mehreren Tastern probleme
auftreten und eine Falsche Taste erkannt wird.
Mann müsste das Programm dann wohl sehr genau auf das Netzwerk
abstimmen oder.

Gruß franzl

RCO
14.04.2006, 15:07
Ja, das stimmt, es gab da hin und wieder Probleme. Aber du verwendest z.B. nur 5 statt 6 Tastern, so könnte man den kleisten Wert z.B: schon rausfallen lassen.
Das Programm muss natürlich abgestimmt sei, aber da könnte man sich ja ein wenig an den Asuro-Quellcode halten.

Hanni
14.04.2006, 16:09
wie wäre es mit ner Tastenmatrix ?


Schau mal bei ATMEL in den APPNotes .. da wirste Fündig ...

michigrunf
14.04.2006, 16:47
Wenns fertig ist soll es so aussehen:
http://ghsabine001.gh.funpic.de/spj.png

Das Gerät soll auf der SD Karte (SD als HDD) die Ein- und Auscheckzeit von Personen speichern,
indem diese ihre persönliche Chipkarte in den Leser einführen.
Als Taster sind eine Folientastatur von Conrad (12 Tasten) und etwa 9 weitere Taster vorgesehen.

Superhirn
14.04.2006, 19:52
ich glaub die meisten fertigen Folientastaturen sind innen schon als matrix geschalten. oder irr ich mich?