10x10 Tasten-Matrix-Tastatur auf Digital-Schaltung?

Hallo

für ein Bastelprojekt suche ich eine Möglichkeit eine 10x10 Matrix-Tastatur auf ein 8 Bit Signal umzusetzen.

Vorerst sollen nur LEDs angesteuert werden, ist das ohne Microcontroller überhaupt möglich?

ich habe bisher nur eine Möglichkeit gefunden sowas selbst zu bauen, aber eben mit zu wenig Tasten, und mit einer 4x3-Matrix.

bin für jegliche Tips dankbar.

greetz Bernhard

Reply to
Bernhard Filipic
Loading thread data ...

Hallo Bernhard,

geht schon, z.B. so: die je 10 Zeilen und Spalten gehen =FCber Pull-Ups auf die Adress-Leitungen eines EPROMS und darin sind dann die passenden Bin=E4r-Codes abgelegt (muss man halt mit einem HEX-Editor selbst einhacken). Die Zeilen stellen dabei die unteren 4 Bit und die Spalten die oberen 4 Bit dar (oder umgekehrt). N-Key-Roll-Over oder Ausblendung von Doppeltastendr=FCcken ist alles kein Problem, nur eine Frage der Auslegung des EPROM-Inhaltes.

Wenn nur LEDs angesteuert werden sollen, gen=FCgt anschlie=DFend ein ULN2803 und fertig ist das Spielzeug. Will man damit mehr machen, kann man z.B. noch ein Strobe-Signal erzeugen, um eine Entprell-Schaltung anzusteuern und mit dieser dann die Bin=E4rdaten abspeichern usw. So habe wir vor 25 Jahren Gro=DFtastaturen in der Kraftwerksleittechnik gebaut (nat=FCrlich mit Potentialtrennung, Schl=FCsselschaltern und Sicherheitssbfragen, aber im Prinzip genau so).

Gru=DF,

Helmut

Reply to
Helmut Kundel

"Bernhard Filipic" schrieb im Newsbeitrag news:63d53$4696253b$3e6396db$ snipped-for-privacy@news.inode.at...

Alte parallele Computertastatur ? 100 Tasten waeren 7 bit und ein 'gedrueckt' Signal, wenn nicht 2 zugleich gedrueckt werden koennen. Schaltungen in ALTEN Computerbuechern, oder einfach asu einer 4 x 4 Matrix extrapolieren, z.B.

formatting link
Warum hast du damit Probleme ?

--
Manfred Winterhoff, reply-to invalid, use mawin at gmx dot net
homepage: http://www.geocities.com/mwinterhoff/
de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/
Read 'Art of Electronics' Horowitz/Hill before you ask.
Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.
Reply to
MaWin

Das verstehe ich nicht ganz. Wenn ich dann irgendeine Taste drücke, verbinde ich lediglich eine Zeile und eine Spalte mitenander. Daraus ergibt sich aber kein eindeutiges 20-Bit Binärsignal, das ich auf das Eprom geben könnte. Außerdem müsste das dann 1 MByte groß sein.

Ich glaube nicht, dass das so einfach geht.

Eine Möglichkeit ohne Microcontroller wäre ein 4 Bit Binärzähler mit einem Binär zu dual-Decoder, z.B. 2x 74HC138, mit dem die Spalten angesteuert werden. Es wird dann jeweils eine Spalte nach 0V gezogen. An den Zeilen hängen Pull-Ups. Wenn dann eine Taste gedrückt wird, geht ein Zeilenbit auf Masse, wenn die richtige Spalte angesteuert wurde.

Der Binärzähler wird mit z.B. 1 Khz Takt angesteuert. Die 4 Bit gehen auf die Adressleitungen eines Eproms. Die 10 Bit von den Spalten ebenfalls. Im Eprom gibt es dann eine Tabelle, mit der Tastennummer

1-100. Das Bit 7 kann man dann als Strobe für ein Latch nehmen, so dass nur dann, wenn eine Taste gedrückt wurde und wenn die dazugehörige Spalte angesteuert wurde, der Ausgang des Eproms in das Latch geschrieben wird. In allen ungültigen Speicherstellen steht eine 0, in den gültigen die Tastennummer + 128, damit das Bit 7 als Strobe genutzt werden kann.

Ich würde aber einen Microcontroller nehmen :-)

Gruß

Stefan

Reply to
Stefan Brröring

So ist es.

Bei geeigneter Außenbeschaltung und passendem EPROM-Inhalt ginge das rein theoretisch sogar. Der Trick wäre: man benutzt den EPROM gleichzeitig als Zeilentreiber für die Matrix, wobei dieser Zeilentreiber sozusagen approximativ arbeitet. Sowas funktioniert zuverlässig natürlich nur in einer Simulation, die auch das (idealisierte) Zeitverhalten abbildet, mit ein bissel Glück vielleicht sogar auch mit realen Bauelementen.

Aber der Teufel soll mich holen, falls ich jemals in Versuchung kommen sollte, sowas real aufzubauen. Schließlich gibt es für ein paar Euro AVRs mit genug IO-Pins, um solche Probleme mit einem Zehnzeiler als Programm zu lösen.

Oder notfalls für insgesamt etwa dasselbe Geld ein paar CMOS-Käfer, die dasselbe leisten, sogar mit weniger Stromverbrauch, dafür allerdings auf mehr Platinenfläche.

Reply to
Heiko Nocon

OK, das mit den Tasten war etwas schlampig (unvollst=E4ndig) beschrieben: man muss daf=FCr sorgen, dass Zeile und Spalte getrennt auf

0V gezogen werden, entweder durch Tasten mit Doppelschlie=DFern oder Einfachschlie=DFer mit Dioden entkoppelt. Auch bei der Verteilung der Bits beruht meine Beschreibung auf einer 16x16 Matrix.

Vorteil dieser Schaltung ist die rein statische Betriebsart ohne Scan, bei der urspr=FCnglichen Anwendung waren Teil-Tastenfelder (Vorort- Elektronik nicht zugelassen) mit bis zu mehreren 100m Kabell=E4ngen angeschlossen, da war nichts zu machen mit dynamischer Abfrage. Als EPROMs lassen sich ganz einfache 27C64/128/256 verwenden (f=FCr Zeile und Spalte je eines), bei geschickter Auslegung k=F6nne beide den gleichen Inhalt haben.

Gru=DF,

Helmut

Reply to
Helmut Kundel

D.h. die Tasten gehen nach GND und die Zeilen und Spalten per Pull-Up nach VCC?

Das würde so gehen, mit jeweils 2 Dioden je Taster und das andere Ende des Tasters geht nach GND. Nur, das läßt sich nicht mit einer "fertigen" Tastaturmatrix realisieren, oder hab ich da noch was falsch verstanden?

Gruß

Stefan

Reply to
Stefan Brröring

Dazu benötige ich dann aber einen Taktgeber/Zähler, mit dem ich die Zeilen durchadressiere und weitere EProms, weil die 8-Bit für eine 10x10 Matrix nicht ausreichen. Wenn ich 10 Bit für die Zeilenadressierung verwende, und 7 Bit für das Ergebnis brauche, dann benötige ich 3 EProms. Oder drei Stück 74HC138 und 2 Eproms und noch einiges mehr...

Das sehe ich genauso...

Reply to
Stefan Brröring

formatting link

mit PICs hab ich Probleme weil ich nicht gut Programmieren kann, und das genannte Beispiel auf einem PIC aufbaut, der 16 I/O Pins hat, ich aber für mein Vorhaben 27 I/O Pins benötigen würde.

das 2te Problem ist, das diese ALTEN Computerbücher vor der Zeit lagen, in der ich mich mit Computern zu beschäftigen begann, und damit nicht in meiner "Bücherei" zu finden sind ;-)

greetz Bernhard

Reply to
Bernhard Filipic

"Bernhard Filipic" schrieb im Newsbeitrag news:adadb$4699dbd3$3e6396db$ snipped-for-privacy@news.inode.at...

Oje, also weder uC noch alte Chips (die kaum mehr erhaeltlich sind). Bau einen Oszillator (z.B. einem Schmitt-Oszillator aus einem CD4093, mit einigen kHz. Schliess daran einen 7-bit Binaerzaehler an, z.B. CD4024. Die niederwertigen 4 bit gehen in einen Decoder der einen von 16 Ausgaengen auf LOW legt, z.B. aus 2 x CD4052 und einem als Inverter geschalteten NAND des 4093. Zwischen deren 16 Ausgaengen und den 8 Eingaengen des naechsten Chips kommt eine Matrix aus bis 128 Taster, die jeweils eine Diode in Reihe haben, wenn mehr als eine Taste gleichzeitig gedrueckt werden koennte. Kann nur eine Taste gedrueckt sein, darf die Diode entfallen. Die hoeherwertigen 3 bit gehen in einer Multiplexer, der einen von

8 Eingaengen auf den Ausgang durchschaltet, z.B. auch CD4052. So lange der Ausgang von diesem Chip auf LOW (=Taste gedrueckt), liegt, soll der Taktgeber stoppen, das mache ich hier durch den zweiten Eingang des NAND des Schitt Oszillators. An den 7 Zaehlerausgaengen liegt dann beo /strobe = LOW die Nummer der gedrueckten Taste. +5V +----------------------------------------------+ /strobe | | +---------------------------------+ | 4k7 | |+-------------------------------+| | | | ||+-----------------------------+|| | +--+ |||+-----------+------|>o-+4093 ||| | | ||||+--------+-)--------+ | ||| | | |||||+------+)-)-------+| |GND ||| | | ||||||+----+))-)------+|| | | ||| | +--(-47k-+ ||||||| ||| | +----)))-)-+ ||| | | | | +-------+ +--------+ +--------+ ||| | | +-|\o-+--|CK 4024| | ABC INH| | ABC INH| ||| | +----|/ +-------+ +--------+ +--------+ ||| | 100pF 4093 |||||||| |||||||| +---+ | | =|ABC|-+ Y GND Tastenmatrix =| | =| | =| |-+ INH +---+ | GND

So sieht das zusammengeschaltet aus.

--
Manfred Winterhoff, reply-to invalid, use mawin at gmx dot net
homepage: http://www.geocities.com/mwinterhoff/
de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/
Read 'Art of Electronics' Horowitz/Hill before you ask.
Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.
Reply to
MaWin

Dazu solltest Du noch sagen, welche Zuordnung es sein darf, sprich Tasten durchgezählt oder z.B.

4 Bit x und 4 Bit y Koordinate der Matrix.

Das ist sogar mit einem Relaisgrab möglich, oder vielleicht hat hier ja noch jemand Drehwähler ;-) Die Frage ist, ob es sinnvoll ist.

Der heute übliche Standardweg ist in der Tat ein kleiner Microcontroller, ggf. mit Schieberegister oder Decoder um zusätzliche Ports erweitert.

Zähler hat MaWin hier schon gebracht, im Grunde geht das auch mit einem großen Zähler und Schieberegistern, die synchron dazu laufen, oder Kombinationen aus beiden, es wird getaktet, bis eine eingelesene "1" am Ausgang ankommt oder bis eine einmal eingespielte "1" über den Schalter ein Stop-Signal auslöst.

Man könnte natürlich jetzt dafür ein FPGA hernehmen, VHDL und Verilog sind aber auch Software ...

Aber ich hab' noch etwas ganz spezielles zu bieten, Ollis Patentlösung ;-)

Aufwand: Ein paar Widerstände, eine Stromquelle mit OpAmp, ein A/D Wandler.

Wenn schon altbacken, dann richtig und dann analog:

Du spendierst einfach jeder Zeile der Matrix in Reihe einen Widerstand von Null bis 9 kOhm und jeder Spalte einen Widerstand in Reihe von Null bis 90 kOhm.

Hinter den Widerständen hängst Du die Spalten alle auf Masse und die Zeilen alle an einen Knoten.

Dieser wird mit einer _Stromquelle_ gespeist, Beispiele z.B. mit OpAmps gibt es genügend.

Damit ergibt sich, je nachdem, welche Taste Du drückst, infolge der entstehenden Serienschaltung eines Zeilen- mit einem Spaltenwiderstand ein Gesamtwiderstand von 0 bis 99 KOhm nach Masse, gemäß dem ohmschen Gesetz fällt dann eine Spannung von U = R I ab, die man einem A/D Wandler zuführen kann. An dessen Ausgang steht der gewünschte Code, ist keine Taste gedrückt, dann eben der Maximalwert.

Zu beachten: Die Widerstände sollten halbwegs genau sein, denn eine Auflösung von 1 kOhm bei 100kOhm Messbereich sind 1%. Du wirst also 1% Widerstände selektieren oder 0,1% Widerstände hernehmen dürfen. Der Tasten-Übergangswiderstand sollte nicht so groß sein, dass er relevant wird, und bitte keine Dioden in der Matrix.

Der Wandler muss hinreichend genau sein, 8 Bit heißt noch lange nicht 8 Bit Genauigkeit, aber auch 10 Bit parallel bekommt man nachgeworfen.

Und die Stromquelle sollte taugen, ist aber bei

Reply to
Oliver Bartels

Das findet man aber oft bei Fernbedienungen fuer Walkmans/MP3 Player. Aber natuerlich haben die es einfach da normalerweise nur 4-5 Tasten.

Olaf

Reply to
Olaf Kaluza

Es geht dem OP um 100 Tasten, und was Meister Bartels da erzählt, ist kaum sinnvoll - er kann mich ja verklagen, kostet nur 50000 Euro nach der Bartels'schen Streitwertfestlegung, zu der es bei Oliver Bartels noch nicht mal einen Gerichtsbeschluß braucht, sondern nur SEIN Wort.

Für 100 Tasten nimmt man einen 8255 oder so, kostet nix mehr. Mit einem Port tut man die Spalten an die Matrix, mit dem anderen die Zeilen. Braucht man mehr als 8 Spalten oder Zeilen, kann man auch Decoder wie den 74138 einsetzen und den Port aufbohren. Man kann auch gleich einen Mikrocontroller wie den 8032 einsetzen, der ist sogar in vielen PC-Tastaturen am Werk.

Reply to
Franz Ferdinand

Es ist zumindest sinnvoller, als das, was du vorschlägst. Weniger Bauteile und es erfüllt die vom OP aufgestellte Forderung, möglichst ohne Mikrocontroller und Software auszukommen.

Soll das jetzt deine mangelnde Fähigkeit zum Lesen der Anforderungen und dein eingerostetes Wissen über Controller überdecken?

Ja. Der kostet ungefähr genauso viel wie ein moderner Microcontroller, der bereits von Haus aus genügend IO-Pins mitbringt.

Und wer steuert den 8255 an, wenn nicht ein Microcontroller, den der OP gerade nicht wollte?

Oh je. Warum nicht gleich einen 8080, der ist noch etwas antiquierter, und braucht ungefähr genauso viele externe Bauelemente (Taktgenerator, Adresslatch, Eprom, Adressdecoder, IO).

Nein, *wenn* schon Controller, wird man vielleicht doch besser zu einem modernen Mikrocontroller greifen, der vom Oszillator über Speicher bis IO alles bereits On-Chip hat. 2*10+8=28 parallele IOs sind nun wirklich nicht die Welt, da gibts in fast jeder Familie was Passendes. Ich würde wahrscheinlich zu einem ATMEGA16 greifen, die Dinger programmieren sich recht angenehm und sind im DIL-Gehäuse bastlerfreundlich.

Falsch geraten. Da waren traditionell mal 8048-Derivate im Einsatz. Völlig andere Familie. Und wahrscheinlich inzwischen bei den meisten Herstellern auch durch Moderneres ersetzt.

Und um auf die Fragestellung zurückzukommen: Wie wäre es mit zwei Diodenmatrizen: Zeilen in positiver Logik für die oberen vier Bit, Spalten in negativer Logik für die unteren vier Bit. Wird eine Taste gedrückt, fliesst ein Strom von der Spaltenmatrix über die Taste zur Zeilenmatrix und aktiviert die jeweils passenden Bits. Eine Handvoll nachgeschaltete Transistoren bringen das Ganze auf vernünftige Logikpegel.

Hergen

Reply to
Hergen Lehmann

Nachdem das ganze wohl doch etwas aufwändiger wird ohne Mikrocontroller habe ich nun folgende Frage:

wäre es möglich folgendes Lernbespiel für einen PIC16F84:

formatting link

ohne grösseren Aufwand auf einen PIC16F874 oder PIC16F877A umzulegen?

worauf bis auf die beschriebene "Analog-Falle" musss ich achten?

Danke schon mal

greetz Bernhard

Reply to
Bernhard Filipic

"Oliver Bartels" schrieb:

Ähnliche, z.T. noch einfachere I/O Lösungen finden sich in

formatting link

für die ganz kleinen 8-pin PICs, wo es vielleicht auch wieder sinnvoll sein kann...

Für beliebige Controller: Ein Eingang, ein Ausgang, ein Komparator und Zeitmessung an RC.

Komparator oder wenigstens OP hat man möglicherweise schon auf seiner PCB, kost' auch nix! AD-Wandler muss man nicht für sowas opfern, das wär ja Perlen vor die Tastatur geworfen...

Reply to
Ruediger Klenner

Da gibt es sicher noch den ein oder anderen Punkt zu beachten. Einfach mal ausprobieren.

Du benötigst einen Prozessor mit einer ausreichenden Anzahl von Ein- und Ausgängen. Bei einer 10x10 Matrix und 7-Bit Ausgangssignal also mindestens 10+10+7 = 27 Anschlüsse wenn keine zusätzlichen ICs verwendet werden sollen. Das wären dann 4 Ports á 8 Bit.

Ich würde einen AtMega16 verwenden. Den gibt es in einem normalen 40-Pin DIL Gehäuse und das ganze läßt sich dann auf eine Lochrasterplatine aufbauen. Genausogut kann man aber auch Prozessoren aus der 8051er Familie nehmen, z.B. 89F51. Kommt einfach drauf an, welche Entwicklungswerkzeuge man hat oder kennt.

Gruß

Stefan DF9BI

Reply to
Stefan Brröring

"Oliver Bartels" schrieb:

/Ironiemode on

Gerade für's Hobby ist diese Tastaturidee ideal denn einer- seits haben Hobbyisten ja nie Geld und andererseits hat diese Art von Tastatur ein ganz besonderes "feature", das massiv Geld sparen hilft:

Man kann ganz einfach aus einer Tastatur locker zwei oder drei machen!

Anleitung: Wenn alles fertig aufgebaut ist, löte man mindestens die Hälfte der Tasten einfach wieder aus, vorzugsweise die Tasten von 1..50, also die mit der kleineren Widerstandssumme in aufsteigender Folge...

Anschliessend findet man noch schnell raus, wie man die Zahlencodes/Spannungswerte der weggelassenen Tasten durch gleichzeitiges drücken zweier oder auch mehrerer bis aller der verbliebenen Tasten aufruft, trainiert dann noch schnell seine 10-Finger-Schreibfertigkeit auf gewünschte Anschläge/min um und schon geniesst man ein Schreibgefühl, das nicht jeder auf dieser Welt so einfach haben kann!

Lustige Überraschungen, die den sonst so tristen Hobbyalltag erhellen auch noch inbegriffen... nämlich dann, wenn mal un- beabsichtigt zwei Tasten gleichzeitig gedrückt werden.

/Ironiemode off

Räumlich oder zeitlich überlappend. Das Letztere passiert mir regelmässig beim (Zehnfingerschnell)-schreiben hier am PehZeh. Aber der PC bzw. die Tastatur macht's (bei räumlicher Überlappung natürlich bis auf die Sache mit der Reihenfolge) richtig.

Mit Controller soger gänzlich ohne Dioden.

P.S.: Die einfacheren Schaltungsideen von mictosoft, die ich hier im Fred schon mal genannt/gelinkt hatte, sind diesbezüglich 'robuster'. Wenn die Erkennung über die Zeit gemacht wird (also RC) kann man einerseits schonmal prinzipiell Präzision gegen Zeit tauschen, andererseits mit Software noch allerhand Fehlererkennung reinfrickeln (hinreichend aber nicht zu enge Zeitfenster um das vorausberechnete (tau + systematischen Fehlereinflusse) herum).

Wenn aber schon die Tastaturmatrix ggf. Müll rausgibt, ein Informationsverlust also schon eingetreten ist, kann die Software (mangels Info) auch nix mehr machen!

Reply to
Ruediger Klenner

"Ruediger Klenner" schrieb:

peinlich! microchip natürlich.

Ingrid

Reply to
Ruediger Klenner

Apropos drehen: Poti als Tastenersatz ;-)

Gell bidde, den wollte der OP doch nicht ;-)

Außerdem läßt sich die Wandler-Lösung als SAR- Wandler ggf. auch standesgemäß mit Elektronenröhren oder Schrittschaltwerken aufbauen (bei Relais würde ich hingegen die Diodenmatrix bevorzugen, die sollte ja auch mit Selengleichrichtern noch tun ;-)

Ansonsten sind wir uns hoffentlich einig, wie man das heutzutage (per uC) vernünftig realisiert ...

Gruß Oliver

--
Oliver Bartels + Erding, Germany + obartels@bartels.de
http://www.bartels.de + Phone: +49-8122-9729-0 Fax: -10
Reply to
Oliver Bartels

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.