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!
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. ...
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.
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. ...
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
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.
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.
PS: das klappt mit den Dioden natürlich nur wenn man davon ausgeht das nur 1 Taste zu einem Zeitpunkt gedrückt wird.
@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
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/DOC1231.PDF Auch wenn's hier um das Multiplexing eines Keypads und einer LED Anzeige geht, die Idee dahinter ist ähnlich.
Als Encoder währe eventuell ein 68000 Interrupt Prioritätsencoder brauchbar (74LS148). Allerdings sind die Tasten dann eben priorisiert... Gruß, Holm
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. ...
Wie wär's mit dem CD4021? Braucht 4 Pins, als Hard- oder Software-SPI, maximale Tastaturmatrix 3x8.
@Hannes Was soll uns das sagen? Jan wollte keine 9 Eingänge des Controllers "verschwenden", wobei hilft also Deine Aussage jetzt? Gruß, Holm
Sorry, vergiss es, das war die falsche Variante. Geht nur bis 3x5, passt hier also nicht.
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.
@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.
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!
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... ;-)
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.
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.
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.
Das müsste gehen. Wobei ich mich zu erinnern glaube. in irgendeinem AVR-Datenblatt gelesen zu haben, dass 1nF am ADC-Pin empfohlen wurde. ...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.