Mehr als ein Knopf im gleichen Stift

12

Ich mache ein Projekt und benutze Arduino als Prototyp, ich muss 10 Drucktasten (zusammen mit mehr Dingen) verwenden und ich habe nicht genug Pins.

Eine Lösung, die ich mir vorstellen könnte, besteht darin, die analogen Stifte zu verwenden und sie jeweils für zwei Drucktasten zu verwenden.

schematisch

simulieren Sie diese Schaltung - Schaltplan erstellt mit CircuitLab

Auf diese Weise kann ich den Pin A0 ablesen und herausfinden, welcher von ihnen gedrückt wird, indem ich prüfe, ob die Spannung 5 V oder die Hälfte davon beträgt.

Ist das eine gute Idee? Die verschiedenen Tasten dürfen NIEMALS gleichzeitig gedrückt werden, was das einzige Problem ist, an das ich denken kann.

Gibt es bessere Wege?

MyUserIsThis
quelle
Wie viele Stifte versuchen Sie zu verwenden?
W5VO
@ W5VO Ich brauche 22, mit 10 Tasten, die Platine hat nur 18 ... also zwei Tasten für jeden analogen Pin Ich brauche nur 5 analoge Pins und die Platine hat 6.
MyUserIsThis
1
Nur zur Info, verwenden viele Automobilhersteller den gleichen Ansatz für die Lenkradsteuerung des Audiosystems. Sie haben 8 Tasten (Geben oder Nehmen), jede mit einem eigenen Widerstand. Auf diese Weise können sie ein einzelnes Kabel (oder ein Kabelpaar, um eine saubere Rückführung zu gewährleisten) vom Rad zum Audiokopf verlegen. Es ist ein vollkommen guter Ansatz.
DoxyLover
Ich glaube, Sie können tatsächlich drei Pins verwenden, um mit einigen Schieberegistern theoretisch eine unendliche Anzahl von Schaltern einzugeben. Es ist auch möglich, mit 8 Pins 256 Schalter über Multiplexer einzugeben.
Alvin Wong

Antworten:

22

Warum mehrere analoge Pins für jeweils zwei Schalter verschwenden, wenn Sie eine beliebige Anzahl von Tasten auf einem einzelnen analogen Pin ausführen können?

Zwei Möglichkeiten. Einer ist in Serie, der andere ist parallel.

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

So sind einige Audiosteuerungen für Autolenkräder. Und wie einige der älteren iPod-Inline-Controller funktionieren.

Je nachdem, welche Widerstände Sie verwenden und wie empfindlich Ihr Analogeingang ist, können Sie alle 10 Tasten an einem einzigen Pin anschließen, wenn Sie mehrere Tasten gleichzeitig drücken müssen.

Passant
quelle
Vielen Dank, ich habe auch darüber nachgedacht, dachte aber auch, dass die Spannungswerte möglicherweise nicht so genau waren, wie ich sie brauche, um mich auf diese Methode verlassen zu können. Ich werde das auch versuchen und sehen, wie es funktioniert.
MyUserIsThis
Da meine Grundlagen zur Widerstandsnetzwerkanalyse nicht ganz solide sind, habe ich versucht, mit CircuitLab die Serienschaltung zu simulieren und eine Wahrheitstabelle für die Spannungsmessung am analogen Eingangsstift zu erstellen. Ich fand heraus, dass die Kombinationen B2 + B3 2,499 V ergeben und die Kombinationen B1 + B4 2,498 V ergeben. Bei solch engen Zahlen kann der typische 10-Bit-ADC die Multi-Input-Kombinationen meines Erachtens nicht richtig unterscheiden. Was sagst du ? Natürlich würde jeder einzelne Schlüssel perfekt funktionieren - kein Zweifel. Hinweis B1 = Button1.
Ikarus74
Tatsächlich liefert B2 + B4 1,666 V, während B2 + B3 + B4 ebenfalls 1,666 V liefert! Die Lösung könnte darin bestehen, unterschiedliche Widerstandswerte für R1, R2, R3, R4 zu verwenden und nicht alle von 1K beizubehalten. Was sagen
Ikarus74
7
Eine 2R / R-Leiter verwandelt die Tasten in ein D / A, und jede Tastenkombination hat einen eindeutigen Wert. Ich würde darauf vertrauen, dass es mit N-3-Tasten funktioniert, wobei N die ADC-Auflösung ist
Scott Seidman
1
@ icarus74 Ja, die Verwendung unterschiedlicher Werte anstelle aller 1k-Werte würde eindeutige Kombinationen ergeben. Versuchen Sie es mit 1k, 2k, 4k, 8k, 16k usw. (oder 1k, 4k, 16k usw. für eine größere Reichweite)
Passant
10

Das würde funktionieren, aber ein besserer Weg ist mit einer Matrix . Dies ist das gleiche Konzept wie beim Multiplexen von LEDs mit einer Matrix, jedoch mit Schaltern.

Bildbeschreibung hier eingeben

Dies ist eine 2x2 Matrix. Eine nützliche Matrix ist größer, da Sie bei dieser Größe keine Pins sparen, wenn Sie die Schalter einzeln verbinden.

Mit einer 3x3-Matrix können Sie 9 Schalter erhalten. Sie benötigen 10, also können Sie entweder eine weitere Zeile oder eine weitere Spalte hinzufügen und 12 Schalter unterstützen oder einfach den 10. Schalter an einen eigenen Pin anschließen.

Der Vorteil hierbei ist, dass Sie digitales IO verwenden können, das billiger und in der Regel umfangreicher ist als analoges IO. Ein Schieberegister ist eine kostengünstige Möglichkeit, mehr digitale E / A hinzuzufügen, wenn Sie nicht mehr ausreichen.

Wenn Sie noch weniger Stifte möchten, können Sie für eine gewisse Erhöhung der Komplexität Charlieplexing verwenden . Sie müssen zusätzlich zu Ihren Schaltern Dioden hinzufügen, und diese Dioden kosten wahrscheinlich so viel wie ein Schieberegister. Wenn jedoch die Kosten nicht Ihr Hauptanliegen sind, kann dies einen Vorteil haben. Mit dieser Methode können Sie alle Schalter (bis zu 12) mit vier Pins auslesen.

Phil Frost
quelle
Nur eine Frage. Warum ist das besser, wenn ich mehr Stifte brauche? Auf diese Weise benötige ich 6 Pins für die 9x9-Matrix und einen weiteren Pin für den zehnten, während ich in dem, was ich gemacht habe, nur 5 Pins benötige.
MyUserIsThis
@MyUserIsDies skaliert besser, wenn die Gesamtzahl der Switches steigt. Mit einer 5x5-Matrix können Sie 25 Switches an 10 Pins anschließen. Allgemeiner gesagt: Wenn Sie die Dinge auf herkömmliche Art und Weise erledigen, wird es für alle anderen einfacher zu verstehen, was Sie getan haben. und damit Sie erkennen, was andere Kreisläufe tun (weil Sie sich in der Standardimplementierung geschult haben).
Dan ist Fiddling von Firelight
@MyUserIsThis sehen Änderungen. Passanten haben auch eine gute Antwort.
Phil Frost
2

Der Analogeingang ist ein gültiger Ansatz. Es sollten mehrere Tasten vorhanden sein. Ich würde auch gerne vorschlagen, einen IO-Expander-Chip wie den MCP23017 zu verwenden . Es verfügt über 16 Pins, die als Ein- und Ausgänge dienen können, und wird über zwei Pins mit I2C gesteuert. Adafruit hat eine Arduino-Bibliothek dafür.

BrianK
quelle
2

Ja, das scheint eine gute Idee zu sein, aber auf jeden Fall werde ich eine Alternative vorschlagen, die mir gerade in den Sinn gekommen ist.

Wenn Sie Zugriff auf Logikgatter haben, können Sie über die Boolesche Logik viele nSchaltflächen ceil(log2(n + 1))Pins zuordnen. Wenn Sie beispielsweise 4 Schaltflächen, aber nur 2 Stifte haben, können Sie eine Konfiguration wie die folgende erstellen:

Buttons | Pins
----    | --
0123    | 01
----    | --
0001    | 00
0010    | 01
0100    | 10
1000    | 11

Das heißt, button0gedrückt haben sollte pin0und pin1niedrig; button1, pin0Niedrig und pin1hoch; button2, pin0Hoch ein pin1niedrig; und button3, pin0und pin1hoch.

Daraus würden sich die folgenden Booleschen Ausdrücke ergeben

pin0 = button2 OR button3
pin1 = button1 OR button3

Eine Zuordnung von 4 Tasten zu 2 Pins könnte somit mit nur 2 ODER-Gattern realisiert werden. Sie benötigen jedoch einen zusätzlichen Pin und eine zusätzliche Logik, um anzuzeigen, ob überhaupt eine Taste gedrückt wird.

Natürlich wird es immer noch Probleme geben, wenn mehrere Tasten gleichzeitig gedrückt werden.

Wenn Sie dennoch mit dem Widerstandsansatz weitermachen möchten, sollten Sie größere Werte für die Widerstände verwenden als 100 Ohm, da 5 V durch Widerstände in der Größenordnung von 100 Ohm einen Strom in der Größenordnung von 10 mA ergeben würden von unnötig hoch. Ich denke, vernünftigere Werte wären 10 kOhm oder 47 kOhm.

Nijoakim
quelle
Vielen Dank für Ihre Annäherung. Ich habe auch über so etwas nachgedacht, aber ich habe keine logischen Tore und ich habe jede Menge Widerstände. Und ja, ich verwende normalerweise 10k-Widerstände, 100 Ohm waren nur der Standardwert des Schaltungseditors. Nochmals vielen Dank für Ihre Hilfe.
MyUserIsThis
Ich denke, ich werde endlich den Widerstandsansatz verwenden, da ich keine Logikgatter kaufen muss, und Ihr Logikansatz spart mir nur 1 Pin und das brauche ich nicht. Ich werde dies jedoch bei größeren Projekten berücksichtigen. Vielen Dank.
MyUserIsThis
Okay! Viel Glück bei Ihrem Projekt!
Nijoakim
0

Die folgende Seite kann nützlich sein:

http://txapuzas.blogspot.co.uk/2010/07/papertecladoanalogico-varios-pulsadores.html

Es ist auf Spanisch geschrieben, aber die wesentlichen Punkte sind grafisch dargestellt. Ich denke, es ist eine sehr gute Idee für Sie.

In diesem Video können Sie das Endergebnis sehen, die Skizze ist auf der Seite auch gekapselt, um die Implementierung in Ihren Projekten zu vereinfachen

Youtube-Video: Tastatur mit 10 Tasten an einem einzigen Stift

Hier ist ein Schema von der obigen Seite:

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

JohnnyDeauville
quelle
2
Bitte fügen Sie eine Zusammenfassung dessen hinzu, was der Link enthält, falls er jemals stirbt, insbesondere wenn er auf Spanisch ist und es sich um eine englischsprachige Website handelt.
PeterJ
Tut mir leid, vielleicht ist es in Spanien normal, auf eine englische Veröffentlichung zu verweisen ... Aber der Link ist sehr interessant, sagt, wie man eine 10-Tasten-Tastatur mit nur einem Stift und einer schrittweisen Fotobeschreibung baut, die Diagramme ein Brett und ein Bild zu machen, um die Abdeckung der Tasten zu machen. Auch der Code zur Verwaltung der Tastatur ist leicht verständlich. Schön entwickelt finde ich.
JohnnyDeauville
Es ist nicht so sehr nur die spanische Seite der Dinge, ich stimme zu, das Diagramm ist klar, sieht gut aus und ich kann herausfinden, worum es geht, nur basierend darauf. Stack Exchange rät jedoch von Link-Antworten ab, da diese nicht mehr nützlich sind, wenn der Link abbricht. Stellen Sie sich vor, wenn das Blog morgen geschlossen / gelöscht wird, wie nützlich die Antwort wäre. Vielleicht können Sie den Schaltplan und einen oder zwei Sätze darüber einfügen und den Link als Referenz für weitere Informationen hinterlassen.
PeterJ
Ich bin ein Anfänger in diesem Forum, wie kann ich das veranlassen, dass du es mir sagst? Ein Abschnitt in speziellen ...? Vielen Dank für Ihre Zeit
JohnnyDeauville
Ich habe nur den Schaltplan und den Verweis eingefügt, aus dem er stammt, aber es könnte sich auch lohnen, ein bisschen mehr von der Seite zu übersetzen, um einen Kontext zu geben, wie er funktioniert und wie die ADC-Messwerte aussehen werden.
PeterJ