www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Tastenfeld sparsam ansteuern


Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich möchte ein 3x4-Tastenfeld an einen AVR anschließen. Das Teil hat 2
"Eingänge" und 7 "Ausgänge", soweit ist das alles kein Problem.
Jedoch sind mir 9 belegte Pins am AVR zu viel. Was kann ich da machen?


Gibt es sowas wie einen umgekehrten BCD-IC? Also ich ziehe einen
Eingang an diesem IC auf high und der gibt die Nummer des Einganges in
3bit zurück? (Es wird immer nur eine Taste gleichzeitig gedrückt)

Danke für die Hilfe!

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat die Tastatur vielleicht die Bestellnummer 420403?

Habe mich auch schon geärgert, dass das Teil so idiotisch
"verdrahtet" ist. Ich werde es deshalb wohl nicht bestellen. Denn
wenn ich eine neue Platine dafür anfertigen muss, dann kann ich auch
gleich mit Kurzhubtasten eine neue Tastatur aufbauen.

...

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja ;-)
Der Anschluss ist nicht ganz so schön, aber von der Bedienbarkeit ist
sie eigentlich ganz ansprechend, der Druckpunkt ist ganz gut und die
Tasten "verkanten" auch nicht wie bei vielen billigen Tastern.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lässt sich die Tastatur (zerstörungsfrei) öffnen?

Denn dann könnte man mittels Trennschleifer und Lötkolben (und Draht)
die interne Beschaltung auf eine 3x4-Matrix ändern.

Dann wird das Teil auch für mich wieder interessant.

...

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gute Idee - die Rückseite ist mit 6 "Plastik-Nubbsies" festgemacht.
Die kann man einfach mit einem Messer abschneiden und hat die
Einzelteile. Lässt sich dann auch wieder zusammensetzen, hält sogar
recht gut, zur Not macht man halt noch einen Tropfen Sekundenkleber
drauf.
Also: ist möglich

Autor: Bolle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wäre der Einsatz eines 8-zu-1-Decoders (HC74251) eine Möglichkeit?

Ein 8-zu-1-Decoder hat 8 Dateneingänge, einen Datenausgang und 3
Steuereingänge.  An die Steuereingänge legst Du einen Zahlenwert von 0
bis 7 an.  Dann wird die Dateneingangsleitung mit dieser Nummer auf die
Datenausgangsleitung "durchgeschaltet".  Die Prozedur ist klar: Ein
Register (Byte) nullsetzen, dann alle Zahlen von 0 bis 7 in rascher
Folge anlegen, und den jeweiligen Zustand der Datenausgangsleitung in
das Register über das Carry-Flag reinshiften.

Du müßtest die 7 Ausgänge Deiner Tastatur auf die Dateneingänge des
Decoders legen.  Dann hättest Du sogar noch einen Pin am Decoder frei
(z. B. für irgend nen Schalter oder ne Extrataste).  Statt 9 µC-Pins (2
Eingänge + 7 Ausgänge) würdest Du mit einem solchen Decoder nur 6 (2+3
Ausgänge + 1 Eingang) benötigen.

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit einem HC595 Shift Register brauche ich sogar nur 5 (3out + 2in)
Pins. Damit schalte ich die 7 Leitungen durch und überprüfe dann die 2
anderen.
Bei geeigneter Programmierung müsste man doch auch sck und rck vom 595
zusammenlegen können und hätte dann nur 4 Pins belegt.

Autor: MathiasM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"BCD IC"

Das kannst Du auch simpel mit ner Handvoll 1N4148 Dioden (o.ä.) machen.

Autor: MathiasM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PS: das klappt mit den Dioden natürlich nur wenn man davon ausgeht das
nur 1 Taste zu einem Zeitpunkt gedrückt wird.

Autor: Jadeclaw (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jan: Welchen AVR nimmst du?
Bei einem der grösseren (ab ATTiny26, sprich mit ADC on Board ) ist das
Ganze mit 8 10kOhm-Widerständen und 2 ADC-Eingängen lösbar.
Wenn ich das richtig verstehe, hat diese Tastatur 7 Reihen und 2
Spalten.
Die beiden Spalten-Leitungen gehen an die ADC-Eingänge,
mit den Widerständen wird ein Spannungsteiler mit 7 Anzapfungen
aufgebaut, die Reihenleitungen gehen an die Anzapfungen des Teilers.
Oberes Ende des Teilers an V+ 5Volt, unteres Ende des Teilers auf 0
Volt.
Wird dann eine Taste gedrückt, wird der entsprechende Anzapf auf die
dazugehörige Spaltenleitung durchgeschaltet.
Man braucht dann nur noch die Spannungspegel an den ADC-Eingängen
abzufragen.
Durch Auswerten von Zwischenwerten kann man dann auch Kombinationen von
Tasten zulassen.
Diese Technik findet sich auch bei den Kabelfernbedienungen diverser
Sony-Minidisc-Player wieder.

Gruss
Jadeclaw

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich das richtig verstanden habe, dann ist der Vorschlag von
Jadeclaw im Prinzip in dieser AppNote beschrieben:

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

Auch wenn's hier um das Multiplexing eines Keypads und einer LED
Anzeige geht, die Idee dahinter ist ähnlich.

Autor: holm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Als Encoder währe eventuell ein 68000 Interrupt Prioritätsencoder
brauchbar (74LS148). Allerdings sind die Tasten dann eben
priorisiert...


Gruß,
Holm

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
All diese Vorschläge mit weiteren Logik-ICs sind zwar gut und schön,
verkomplizieren aber die Platine. Und da nicht Jeder die Technologie
der Platinenätzerei beherrscht, könnte das ein Problem werden. Ich
versuche daher immer, ohne oder mit möglichst wenigen zusätzlichen ICs
auszukommen.

...

Autor: A.K. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Wie wär's mit dem CD4021? Braucht 4 Pins, als Hard- oder Software-SPI,
maximale Tastaturmatrix 3x8.

Autor: holm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Hannes

Was soll uns das sagen?
Jan wollte keine 9 Eingänge des Controllers "verschwenden", wobei
hilft
also Deine Aussage jetzt?

Gruß,

Holm

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, vergiss es, das war die falsche Variante. Geht nur bis 3x5, passt
hier also nicht.

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die ausführliche Diskussion!
Ich werde mich wohl an Jadeclaws Vorschlag halten und das mit einem
Widerstandsnetzwerk und zwei ADC aufbauen.
Das klingt sowohl vom Preis, vom Aufwand und von der Programmierung her
am vernünftigsten.

Autor: Jadeclaw (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@Andreas: Nein, damit hat es nichts zu tun.
Die Widerstände in der AppNote dienen nur dazu,
zu verhindern, dass Ausgänge aufeinander geklemmt werden,
wenn zwei Tasten gleichzeitig gedrückt werden.

Hier geht es darum, jeder Taste eine Spannung zuzuordnen.
Zum besseren Verständnis habe ich mal eine Schaltung angehängt.
Durch Einfügen weiterer Widerstände und Tasten lässt sich das noch
erweitern, das praktikable Limit dürfte bei 20 Tasten pro ADC-Eingang
sein, mit etwas Filterung (wg. Brummeinstrahlung) wären bei einem
10Bit-Wandler wohl auch 30-40 Tasten möglich.

Gruss
Jadeclaw.

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ausgehend von Jadeclaws Schaltung habe ich noch zwei Fragen:

Es ist sicherlich sinnvoll zwischen GND und VCC nicht 9 sondern nur 8
Abstufungen zu haben. Hierzu gäbe es zwei Möglichkeiten:
a) den Widerstand zwischen VCC und dem ersten Taster weglassen oder
b) Die ADC-Referenz-Spannung Aref auf 7/8 VCC zu legen
Welche Version wäre hier sinnvoller?

Brauche ich einen Stützkondensator am ADC-Eingang ? 100nF? Wenn ja,
brauche ich dann nicht auch einen PullDown? 1kOhm?

Danke nochmal!

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es sind doch 8 Widerstände.

Also betragen die abgegriffenen Spannungen 1/8, 2/8, 3/8, 4/8, 5/8, 6/8
und 7/8 der Betriebsspannung, lassen sich also wunderbar selektieren,
wenn man zum ausgelesenen ADC-Wert vorher 1/16 addiert.

Ein Kondensator ist sicher von Vorteil. Ein Pull-Down müsste sehr
hochohmig sein, damit er den Spannungsteiler nicht verfälscht. Ich
würde (werde*) den Spannungsteiler daher etwas niederohmiger auslegen
und mal mit dem internen PullUp experimentieren.

- In den Pausen (und beim momentan unbenutzten Eingang) PullUp
  einschalten,
- Eingang auswählen, PullUp aus, Einzel-Conversion starten
  (mit Int, linksbündig),
- im Int ADCH auslesen, 16 addieren, durch 32 teilen (5*lsr oder
  swap, lsr, cbr),
- Ergebnis mit der letzten Messung vergleichen und neuen Wert
  speichern (Entprellung),
- ist Ergebnis 8, dann ist keine Taste gedrückt, 1-7 sind gültig,
- neuen Wert nur akzeptieren, wenn vorher 8 (ungültig) war,
- Zahlenwert aus Tabelle holen und verarbeiten.

...

* ja, ich habe diese Dinger auch bestellt... ;-)

Autor: Jadeclaw (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man kann natürlich den obersten Widerstand weglassen und damit den
obersten Taster auf VCC legen.
Nur sind dann Mehrfachkombinationen in Verbindung mit diesem Taster
nicht mehr möglich.
Andererseits, wenn sowieso immer nur einer gedrückt werden soll, ist
das natürlich egal.
Man sollte natürlich einen Widerstand vom ADC-Eingang gegen Masse
legen.
220 - 470kOhm sind hier zu empfehlen, plus evtl. 22-100nF parallel.
Das zieht dann den ADC-Eingang zuverlässig auf 0.
Zur Bauteilersparnis legt man ARef auf VCC. Sind ja nur ein paar
Registerbits.

Gruss
Jadeclaw.

Autor: Berne HPH (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

3x4 ist geschätzt 13, genau jedoch 12.,oder nicht?

wie kommt eine 12er Tas zu einer 2 in, und 7 outs belegung?!, müssten
doch 6 outs sein?, wiso 7 ?????. (kann halt nur schätzen)

Früher gabs einen 74C922 Cmos matrix-tas-encoder, der hat
bcd out, mit strobe, also 5 bit in.(allerdings teuer, 5euro)

gibts den noch?

ich würde das so machen, gesetz der fall, es handelt sich um
einen matrixanschluss:

die beiden "In" zusammenschalten, und auf einen zählereingang legen.

an allen outs jeweils einen wiederstand(E reihe 10k bis 100k)
also, 10k, 12k, 15k usw., gegen +).

dann eien R/F wandler (3pol, bzw 8pol mit nc- pins, nur in smd
erhältlich),
der,
bei gedrückter taste eine frequenz ausgibt.

macht 1 pin am avr, und jede Menge(relativ) an softwareaufwand, was ich
nicht kann (nochnicht).

gruss berne.

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Sache mit den 9 Schritten war ein Denkfehler von mir: Ich hatte mir
das anhand einer 3bit-ADC überlegt, aber nicht daran gedacht, dass
alles ab 7/8 VCC ja einen Wert von 0b111 liefert.


Also wäre meine Schaltung jetzt:
Spannungsteiler mit acht Widerständen mit ca. 2k,
vom ADC gegen Ground: 33nF Kondensator und parallel dazu ein 100k
Widerstand.
Der Widerstand ist so groß genug um den Spannungsteiler nicht
nennenswert zu beeinflussen, aber klein genug, um den Kondensator
innerhalb von den 10ms zwischen zwei Messungen weit genug zu entladen.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das müsste gehen. Wobei ich mich zu erinnern glaube. in irgendeinem
AVR-Datenblatt gelesen zu haben, dass 1nF am ADC-Pin empfohlen wurde.

...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.