Forum: Mikrocontroller und Digitale Elektronik Unkonventionelle (?) Tastaturanbindung


von mr. chip (Gast)


Lesenswert?

Hallo!

Ich hab hier eine Tastatur mit 12 Tasten herumliegen. Diese Tastatur
hat nun für jede Taste einen einzelnen Anschluss. Ich habe mir lange
den Kopf zerbrochen, wie ich sie anbinden könnte. Denn 12 Pins an
meinem Mega8 will ich ja wirklich nicht hergeben... Habe an
irgendwelche Multiplexereien gedacht, doch auch damit wird das ein
riesiger Salat mit Unmengen an Verbindungen.

Nun hatte ich folgende Idee: An jeden Anschluss der Tastatur wird ein
jeweils anderer Widerstand angeschlossen, und das ganze kommt
schliesslich an einen ADC-Pin. Je nach dem, welche Taste gedrückt wird,
bekomme ich dort eine andere Spannung. Sollte doch funktionieren, oder?


Nun habe ich aber noch ein Problem: Wie teile ich dem uC mit, dass
überhaupt eine Taste gedrückt wurde? Natürlich, ich könnte dauernd den
ADC auslösen, aber da gäbe es sicher eine bessere Lösung? Gibt es z.B.
einen Interrupt, sobald der ADC einen Wert ungleich 0 liefert?

Gruss

Michael

von tomafa (Gast)


Lesenswert?

Hallo,

Vielleicht hilft dir das

http://www.atmel.com/dyn/resources/prod_documents/doc1232.pdf

mfg

Tomafa

von Andreas Dörr (ADoerr) (Gast)


Lesenswert?

Deine Idee wird nicht ganz so leicht umzusetzen sein. Wenn jemand 2 oder
mehr Tasten zugleich drückt, werden deine einzeln abgestimmten
Widerstände keinen sauberen Wert mehr liefern.
Prinzipiell wäre auch das machbar, aber

  1. müßtest Du zwischen 12^2 Zuständen unterscheiden können
  2. wird die Realisierung nicht einfach, da die Widerstände
"parallel" geschaltet sind.

D.h. konkret, daß Du für eine sauberen Umsetzung mind. einen 12bit
ADC-Wandler brauchst. Ich bin mit dem Mega nicht vertraut, aber in
einem anderen Thread sucht jemand einen uC mit 12bit-ADC und die sind
wohl nicht so zahlreich.
Punkt 2 ist nicht unbedingt ein Problem, ist halt etwas rumrechnen ;).
Am besten geht man die Sache über die Leitwerte an, dann wird die
Parallelschaltung einfacher handhabbar.
Allerdings kommt noch ein weiteres Problem hinzu ... die Genauigkeit.
Bei 12bit hast Du eine verdammt feine Abstufung, die genau abgeglichene
 Widerstände mit sehr geringen Toleranzen vorraussetzt. Alterung und
Temperaturprobleme sind da noch ein weiteres Thema.

Besorg Dir lieber ein 12adriges Kabel oder verdrahte die Tastatur in
einer Matrix. Dann werden es nur noch 7 Leitungen (3x4 Matrix).

Wird einfacher umzusetzen sein (wenn auch dein Ansatz interessanter ist
;)).

Bis denne, Andreas

von Andreas Dörr (ADoerr) (Gast)


Lesenswert?

Eh, das muß "2^12 Zustände" heißen.

von Profi (Gast)


Lesenswert?

Wenn Du in der Matrix zu jedem Taster eine Diode zur Entkopplung
spendierst, kannst Du sogar eindeutig erkennen, wenn beliebig viele
Tasten gedrückt sind.

von DAU-xxl (Gast)


Lesenswert?

Hallo !

hm solche tastenfelder habe ich hier leider auch rumliegen
ist leider nich möglich da etwas an der matrix zu manipulieren

bliebe wohl dafür nur die wiederstands-metode
geht nicht mal mit kascade weil alle tasten eine gemeinsamme leitung nr
13 haben .....  rrrrrrr   :-((

von Feadi (Gast)


Lesenswert?

Das C-Control 1 fragt seine Tastatur mit Widerständen am ADC ab.
Für das CControl findest Du auch Programmbeispiele.
Dort kannst Du nachschauen, es gibt sicher einige Leute die Erfahrung
damit haben.

Feadi

von mr. chip (Gast)


Lesenswert?

Hallo

Ich habe meine Idee noch etwas abgeändert:

Die Widerstände (alle gleicher Wert) würden in Reihe geschaltet (R0 -
R12). An R0 kommt GND. Zwischen R0/R1 kommt der ADC.  Zwischen R1/R2
bis zwischen R11/R12 kommen die Datenleitungen der Tastatur. An die
Masseleitung der Tastatur wird nun Vref angehängt. Je nachdem, welche
Taste gedrückt wird, wird Vref nun an eine unterschiedliche Position in
der Widerstandskette durchgeschaltet. Die Spannung über R0 ist also
unterschiedlich gross.

Wenn 2 Tasten gedrückt werden, gibts zwar tatsächlich Probleme. Die
Tastatur lässt dies aber kaum zu (relativ hoher Druck notwendig). Zudem
kann ich damit leben, wenn dadurch ab und an mal ein Fehler entsteht.

Gruss

Michael

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

mit zwei "Prioritätsencodern" 74xx147 oder 148 müßte eine
Tastenabfrage zu lösen sein, 2*74xx148 + (3/4)*74xx00 gibt einen
Encoder mit 16 Eingängen und 4 Bit Ausgang. Die höchstwertige Taste
gewinnt, wenn mehrere gedrückt sind.

von Uwe Große-Wortmann (Gast)


Angehängte Dateien:

Lesenswert?

Mal zurück zur ADC-Lösung: Teil doch einfach deine Tastatur auf zwei
Kanäle auf! Beim Asuro (Roboterbausatz) werden mit deiner Methode 6
Tasten abgefragt, und das scheint offenbar zu funktionieren (auch mit
ungeregelter Batterieversorgung und interner Referenzspannung!).
Zusätzlich ist die Leitung an einen externen Interrupt gehängt, um
einen Tastendruck zu erkennen. Ich hab mal den Schaltplan mit den
Widerstandwerten angehängt. Deine gemeinsame Leitung für alle Tasten
würde dann die Masseleitung werden. Vielleicht wäre es auch noch
vorteilhaft, die 1M-Widerstand zu verkleinern und dann den INT über
einen  Komparator laufen zu lassen...

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.