Forum: Mikrocontroller und Digitale Elektronik Tastatur Matrix mit LED Monitor


von Thorsten S. (bitthor)


Lesenswert?

Hallo,

ich plane eine Tastaturmatrix mit 2 Feldern  a 5x4. somit 40 Digitaster 
mit LED.
Das ganze nach dem Atmel Beispiel 
http://www.atmel.com/dyn/resources/prod_documents/doc1232.pdf

Der Grundgedanke ist, das ein Taster gedrückt wird, und die dazugehörige 
Taster LED leuchtet.
Wird dann ein anderer Taster betätigt, erlischt die erste LED und die 
2te wieder zum Diditaster gehörende LED leuchtet. Somit ist immer der 
zuletzt gedrückte Taster ersichtlich.

das drücken von 2 Tastern gleichzeitig, macht erstmal keinen Sinn.
 Im End hatte ich an flip flops für die LEDs gedacht? vermutlich gibt es 
auch eine bessere Lösung die ich noch nicht kenne.


Gruß
Thorsten

von MagIO (Gast)


Lesenswert?

Hmmm ... da fallen mir die Stichworte Diodenmatrix und Tastenmatrix ein.

Warum nicht LED und Taster in einer Matrix betreiben?

Wenn Du die Dioden parallel zum Taster anschließt - mit Vorwiderstand 
natürlich - dann kann deine Matrix beides:
1. die Taster auslesen
2. die Dioden zum Leuchten animieren

Natürlich abwechselnd. Das einzige Problem ist, daß die Diode im Moment 
des Tastendrucks nicht leuchten wird, da sie vom Schalter überbrückt 
wird ... es sei denn man spendiert dem Schalter auch einen 
Vorwiderstand.

5x4 heißt ja, dass Du 4 Ausgänge und 5 Eingänge (oder umgekehrt) 
brauchst um das Tastenfeld zu lesen. Man wählt von den Ausgängen ein Bit 
aus, das auf 1 gesetzt wird und schaut am Eingang nach, wo ne 1 ankommt. 
Damit weiß man dann, welche Taste gedrückt wurde. Wenn Du nun noch kurz 
den einen Eingang auf Ausgang umschaltest und ne 0 ausgibst, dann kann 
die entsprechende LED leuchten - und nur die.

Jetzt muss Du Dir nur noch merken bei welcher Kombination das war und 
wiederholst die Ausgabe mit jedem Tatsatur-lese-zyklus, solange bis eine 
andere Taste gedrückt wurde.

von Thorsten S. (bitthor)


Lesenswert?

So habe ich es vermutet, da ich ein Beispiel mit einem Display zu den 
Tastern gefunden hatte.
Da ich recht frisch bin mit dieser Materie, ist mir nicht klar, wie das 
ganze logisch verknüpft wird.
Das die LED im Tastmoment nicht leuchtet ist egal. In diesem Moment ist 
die LED eh durch den Finger verdeckt ;-)

-vermutlich macht es sinn erstmal eine kleine matrix zu bauen. 2x2, da 
ich nacher das ganze mit DMX verknüpfen möchte sowie das Tastenfeld 
umschalten möchte, sodas die Taster dann einen anderen wert ausgeben 
können.

somit klein Anfangen und testen.

progs du in Assembler?

Gruss
THORSTEN

von MagIO (Gast)


Lesenswert?

Du weißt, wie eine Matrix aussieht! In Deinem Fall 4 Zeilen und 5 
Spalten. An jedem Kreuzungs-Punkt werden jetzt die Taster und Dioden 
(mit ein paar Widerständen) verbunden:

Ps1
|__
| |
S D
|_|
|
R1
|_____Pz1
|
R2
|
|
- Gnd


Ps1 = Port-Pin für Spalte 1
Pz1 = Port-Pin für Zeile 1
S=Taster
D = Leuchtdiode
R1 = Vorwiderstand der LED (wird so berechnet, daß der gewünschte Strom 
fließt / natürlich nur max. das, was der Controller Pin verkraften kann)
R2 = Pull-Down zum Auslesen der Matrix. Der wiederum muss so groß sein, 
dass die LED nicht leuchtet.

Der Controller geht nun alle Spalten-Pins der Reihe nach durch und gibt 
da ne 1 aus. Im ersten Schritt sind die Spalten Pins auf Eingang 
geschaltet und werden durch den Pull-Down auf 0 gehalten. Nur wenn in 
der gerade aktuellen Spalte eine Taste gedrückt wurde, dann ist der 
entsprechende Zeilen-Eingang 1.
Wird eine 1 gefunden, dann merken und weiter mit dem nächsten 
Spalten-Pin.
Wird keine 1 gefunden, dann schaut man nach, was man sich im letzten 
Durchgang für diese Spalte gemerkt hat. Ist das ungleich 0, dann kann 
man die Zeilen-Pins auf Ausgang umschalten und gibt den invertierten 
gemerkten Wert dort aus. (Also da wo ne 1 angekommen ist muss jetzt ne 0 
raus damit die LED leuchten kann).

Einfach, oder?

Ich progge in allem was gerade nötig oder am sinnvollsten ist.

von MagIO (Gast)


Lesenswert?

Korrektur:
Der Controller geht nun alle Spalten-Pins der Reihe nach durch und gibt
da ne 1 aus. Im ersten Schritt sind die Spalten Pins auf Eingang

muss heißen

Der Controller geht nun alle Spalten-Pins der Reihe nach durch und gibt
da ne 1 aus. Im ersten Schritt sind die ZEILEN Pins auf Eingang

von Route_66 (Gast)


Lesenswert?

Hallo!
Vielleich geht es sogar recht einfach LED und Taster gleichzeitig zu 
betreiben? Ich habe es gerade nicht komplett durchgeknobelt, deshalb 
hier der Denkansatz: Wenn man bei einer normalen LED-Matrix an jedem 
Kreuzungspunkt zur LED parallel die Taste legt, aber in Serie zum Taster 
eine normale Diode entgegengesetzt gepolt zur LED einfügt, mußte es doch 
möglich sein, die Tastaturmatrix unabhängig von der LED-Matrix 
abzufragen? Oder habe ich einen Denkfehler?
Was dann bei gleichzeitiger Betätigung mehrere Taster passiert habe ich 
noch nicht überlegt...

von MagIO (Gast)


Lesenswert?

Versteh nicht ganz wozu das gut sein soll?! Es muss doch trotzdem der 
Zeilen-Port einmal als Eingang und einmal als Ausgang benutzt werden. 
Wenn wirklich beides Parallel möglich sein soll, dann hilft nur noch 
mehr Port-Pins zu verwenden. Aber die sind ja bekanntlich wertvoll.

von Peter D. (peda)


Lesenswert?

Überleg Dir erstmal die konstruktive Gestaltung.

Sind die Taster und LEDs alle auf einem Haufen, daß man einen 
Drahtverhau verwenden kann?

Oder sind die Taster und LEDs verteilt?
Wenn jeweils eine Taste + LED eine Einheit sind, ist es vielleicht 
günstiger je einen ATtiny13 zu nehmen, die parallel an einem Datenbus 
hängen.
Man hat dann insgesamt nur 3 Drähte (GND, VCC, Daten) zu allen 
Einheiten.


Peter

von spess53 (Gast)


Lesenswert?

Hi

AVR242: Multiplexing LED Drive & a 4x4 Keypad on tinyAVR and megaAVR 
devices

MfG Spess

von Route_66 (Gast)


Lesenswert?

... Nein geht nicht -> führt beim Tastendruck zum Kurzschluss von 
Portleitungen mit unterschiedlichem Potential, wenn diese während der 
LED-Ansteuerungen niederohmig als Ausgänge geschaltet sind. ein 
Widerstand noch in Serie zum Taster und zur Diode kann das lösen.

von Route_66 (Gast)


Lesenswert?

... geht auch mit Serienwiderständen nicht so einfach. Schade.

von MarioT (Gast)


Lesenswert?

"... geht auch mit Serienwiderständen nicht so einfach. Schade."
warum?
Kann man die Tasten nicht in Sperrrichtung der LED abfragen?

von Route_66 (Gast)


Lesenswert?

> Kann man die Tasten nicht in Sperrrichtung der LED abfragen?

Das war ja der Hintergedanke. Es geht einfach darum, geschickt die 
I/O-Pinzustände (Input, Output, Sink, Source) auszunutzen.
Vielleicht geht es ja doch. Ich werde es einfach mal probieren.

von MagIO (Gast)


Lesenswert?

Schon mal jemand meinen Beitrag von 09:12 gelesen?

Wieso sollte das so nicht gehen?

von Route_66 (Gast)


Lesenswert?

@MagIO
>Wieso sollte das so nicht gehen?

Natürlich geht das so! Ich hatte nur die Idee, Die LED auch beim 
Betätigen der Taste weiter leuchten zu lassen - falls man in einer 
Frontplatte z.B. Taster und Schalter kombinieren möchte. Und da bin ich 
mir halt nicht sicher, was passiert bei mehreren gleichzeitig betätigten 
Eingängen.

von MagIO (Gast)


Lesenswert?

Wie gesagt, spendiert man dem Taster und der LED getrennt einen 
Widerstand, dann sollte auch das "gleichzeitige" betreiben möglich sein. 
Ist natürlich immer noch gemultiplext. .... Ok ... das steht in meinem 
Post von 8:12 ... aber Thorsten hat ja zwischendurch schon erwähnt, dass 
für Ihn "ausgehen beim drücken" OK ist.

von Thorsten S. (bitthor)


Lesenswert?

Hui,

danke für die vielen Ideen.

@ magIO:

ich werde mir nach Karneval, noch ein paar Bauteile besorgen, sodas ich 
mal nen pobe Aufbau machen kann.
Danach bzw bis dahin überlegen wir das ganze Programmtechnisch läuft.
Das Atmel beispiel ist ja mit einem wakeup und die tasten lassen nur die 
2 LED´s lustig blinken.
Vermutlich läuft das ganze über eine excl oder verknüpfung?
wie gesagt, sauge ich mir das am WE noch was rein.

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.