Forum: Mikrocontroller und Digitale Elektronik Tastenmatrix mit Prioritätsencoder?


von Herb G. (donar)


Lesenswert?

Guten Tag,

mein Tastenfeld wird 8 Spalten x 12 Zeilen gross. Es soll immer nur eine 
Taste erkannt werden (auch wenn der Betätiger mehrere gleichzeitig 
drückt).

Ich brauch am Schluss eine Tastennummer (zeilenweise 1...8, ..., 
89...96; 0 = keine Taste).

Nun hatte ich die Idee, einen 74 148 für die Spalten und 2 davon für die 
Zeilen zu nehmen (von denen ich nur 8+4 Datenpins benötige). (Oder 
gibt's auch einen 74xx der 16 zu 4 macht? In dem Artikel zu den 74ern 
ist jedenfalls keiner aufgeführt.)

Dann geben mir die 3 + (3+2) Bit doch gleich die gewünschte Tastennummer 
(nach +1), richtig? (Gut, GS oder E0 muss ich für jeden IC auch noch 
auswerten, weil der 148 ja sowohl für 0x7F als auch für 0xFF jeweils 
0b111 zurückgibt).

8+3 freie Ports hab ich.

Spricht etwas gegen den Einsatz von Prioritätsencodern?

Gruss,
H.

von Helmut L. (helmi1)


Lesenswert?

Herb G. schrieb:
> Spricht etwas gegen den Einsatz von Prioritätsencodern?

Ja, das Alter. Nimm einen kleinen uC. Damit macht man das Heute.
Damit kann man dann auch noch andere Sachen machen. (Keyboard FIFO, 
Tastenentprellung,Repeatfunktion etc.)

von Reinhard Kern (Gast)


Lesenswert?

Herb G. schrieb:
> Nun hatte ich die Idee, einen 74 148 für die Spalten und 2 davon für die
> Zeilen zu nehmen

Das hat bestimmt seit 30 Jahren keiner mehr so gemacht.

Gruss Reinhard

von Herb G. (donar)


Lesenswert?

Helmut Lenzen schrieb:
> Herb G. schrieb:
>> Spricht etwas gegen den Einsatz von Prioritätsencodern?
>
> Ja, das Alter. Nimm einen kleinen uC. Damit macht man das Heute.
> Damit kann man dann auch noch andere Sachen machen. (Keyboard FIFO,
> Tastenentprellung,Repeatfunktion etc.)

Danke. Nun ja, so klein kann der dann ja nicht sein, bei 8 + 12 
Eingangspins und 2 oder 7 Ausgangspins. (Ausser ich mach's so - mit in 
meinem Fall 10 Eingangspins: 
http://www.sprut.de/electronic/pic/grund/tasten/56tast.gif 
[sprut.de]...)

Modular, tjaja. Danke für den Hinweis! Werd ich wohl so machen, die 
Vorteile sind klar. Nur den entprellten Input anlegen, passt schon. Halt 
mehrere verschiedene uC programmieren, aber ok.



Reinhard Kern schrieb:
> Das hat bestimmt seit 30 Jahren keiner mehr so gemacht.

Danke für den Beitrag. Wow, was bin ich modern ;)

: Bearbeitet durch User
von rava (Gast)


Lesenswert?

Oder mit ADC(s) und Widerstandsnetzwerk, wenn die pins knapp sind?
Prioritäten sind dann per Hardware vorgegeben

von Helmut L. (helmi1)


Lesenswert?

Herb G. schrieb:
> Nun ja, so klein kann der dann ja nicht sein, bei 8 + 12
> Eingangspins

Man kommt mit 11 Eingangspins aus, wenn man die Matrix etwas anders 
anordnet und dabei bedenkt das man die Eingangspins auch als 
Ausgangspins brauchen kann.

von Herb G. (donar)


Lesenswert?

Helmut Lenzen schrieb:
> Man kommt mit 11 Eingangspins aus, wenn man die Matrix etwas anders
> anordnet und dabei bedenkt das man die Eingangspins auch als
> Ausgangspins brauchen kann.

Danke. Aber: Schrieb ich doch, mit Link (Wobei, ich schrieb 10, das ist 
inkorrekt, 11 natürlich! 11 x 10 >= 96, 10 x 9 < 96 ) :)

von MaWin (Gast)


Lesenswert?

Herb G. schrieb:
> Dann geben mir die 3 + (3+2) Bit doch gleich die gewünschte Tastennummer
> (nach +1), richtig?

Nein,.

Du bräuchtest Taster mit 2 Kontakten.

Hast du aber vermutlich nicht. Also musst du die 16 Zeilen der Reihe 
nach durchgehen, und dann von der Zeile meinetwegen die höchstwertige 
gedrückte Taste zusammen mit der aktuellen Zeilennummer liefern.

Das macht ein Microcontroller in Form von einem Bauteil, es ist also 
eher akademisch daraus nun eine ganze Platine voller kleiner ICs zu 
basteln.

Man bräuchte einen Oszillator (1/4 74HC132), einen 7 bit Zähler 
(74HC393) einen Decoder der 1 von 12 Leitungen auf Masse schaltet (2 x 
74HC139), einen Decoder der 1 aus 8 Leitungen auswählt (74HC151) und an 
dessen Eingängen je ein 10k Widerstand nach +5V hängt, und wenn dessen 
Ausgang nach Masse geht dient das als Impuls "gedrückte Taste 
erkannt"(die Zählerbits sind die Tastennummer) und gleichzeitig hält er 
den Zähler an (ein Eingang des 74HC132, daher ein NAND als Oszillator). 
Wesentlich weniger Bauteile werden es ohne Spezial-.ICs wohl nicht. 
Einen 74HC148 braucht man nicht (oder nan bräuchte 13 Sück davon).

Wahlweise auch ein fertiger Tastaturcontroller einer ausrangierten PC 
Tastatur. Die liefert die Daten gleich seriell ab.

von Herb G. (donar)


Lesenswert?

MaWin schrieb:
> Nein.

Gut. Ich konnte das meiste davon in der knappen Stunde nachvollziehen; 
ich bin beeindruckt, und ich danke. (Und das meine ich.)

Also, ein Slave-uC der als Keyboard-Controller agiert und dem Master 
sagt, wann ein KB-"Click" anliegt, so läuft das "heutzutage", richtig, 
also 2 x uC programmieren. Erinnert mich an Windows, aber das krieg ich 
vielleicht hin.

(Doch bevor ich mich aus dem Fenster schmeiss, meld ich mich dann noch 
mal. - Iss eh ned hoch bis GND.)


Edit: Typo.

: Bearbeitet durch User
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.