Eine gute Schaltung für viele Tastereingänge?

Ich plane, eine kinderfreundliche "Universalfernbedienung" zu bauen, damit die Kinder unzählige IR-gesteuerte Geräte mit ein oder zwei einfachen Drücken ein- und ausschalten können ...

Die Fernbedienung wird vielleicht 20 große, klobige Tasten haben, die, wenn sie gedrückt werden, die mehreren IR-Signale an alle notwendigen Geräte senden, um beispielsweise den Kinderkanal einzuschalten, die Wii einzurichten usw. usw.

Die meisten Tasten sind in einem Gittermuster angeordnet, aber einige können für Auf/Ab/Links/Rechts, Eingabe usw. verwendet werden.

Ich werde einen Arduino Pro Mini oder Uno als uC verwenden.

Gibt es clevere Möglichkeiten, diese Tasten zu verdrahten? Eine Gitterschaltung? Analogeingänge mit unterschiedlichen Widerständen zwischen den einzelnen Tasten? Ein IC, das die Arbeit erleichtert?

Antworten (3)

Du hast sie im Grunde alle aufgelistet.

  1. Eine Matrix aus x Zeilen und y Spalten. Sie benötigen x + y-Pins.

    Matrix

  2. Digitaler GPIO-Expander-IC, vorzugsweise mit Interrupt. I2C, SPI, sogar Seriell sind verfügbar. Interrupt-Pins ermöglichen es Ihnen, bei Interrupts zu lesen, anstatt abzufragen. Sie müssen über Hardware-I2C/SPI/UART verfügen oder Softwarecode hinzufügen. Dieser Ansatz wird hauptsächlich verwendet, wenn Sie viel mehr GPIO benötigen, als Sie auf dem Hauptmikrocontroller zur Verfügung haben. An diesem Punkt verwenden Sie im Grunde immer noch die Optionen 1, 3 und 4 oder die direkte eine Taste pro Pin.

  3. Widerstandsleiter. Sie benötigen einen ADC und ständige Abfragen. Es ist besser, auf mehreren ADC-Kanälen in ein paar ähnliche Gruppen aufzuteilen, aber Sie können eine große 20-Tasten-Gruppe erstellen, wenn Sie wirklich müssen.

    Geben Sie hier die Bildbeschreibung ein

  4. Charlieplexing . Wie eine Multiplex-Matrix (#1), aber mit N × ( N 1 ) Wo N ist die Anzahl der verwendeten Pins. Benötigt so viele Dioden wie Tasten, sodass Sie die Pin-Anzahl für Dioden ändern. Sie könnten jedoch LEDs verwenden.

Geben Sie hier die Bildbeschreibung ein

Meistens ist Nr. 1 die gebräuchlichste Methode. Jedes Tastatur- oder Tonwahltelefon, das Sie jemals benutzt haben, 1000 zu 1, hätte es benutzt. Zur Hölle, sogar Mobiltelefone verwenden es (insbesondere das mir bekannte Nokia 5110 verwendet es). Für 20 Tasten benötigt eine 4x5-Matrix nur 9 Pins, mehr als genug.

Die Verwendung von Dioden verdoppelt die Anzahl der Tasten, die man unterstützen kann, im Vergleich zu keinen Dioden, aber selbst ohne Dioden kann man mehr Tasten unterstützen als mit einer Standardmatrix. Die große Einschränkung bei dieser Art des Multiplexens besteht darin, dass es keinen einzelnen Zustand gibt, in den I/O-Pins versetzt werden können, der garantiert, dass das Drücken einer beliebigen Taste etwas ändert.
@supercat ja, es erfordert eine Abfrage.
Wenn man nicht weiß, welcher Schlüssel als nächstes verarbeitet werden soll, ist eine Abfrage erforderlich. Wenn die Anwendung erlaubt, alle Tasten zu ignorieren, bis eine bestimmte Taste (oder eine Taste aus bestimmten kleinen Sätzen) gedrückt wird, kann man die Pins konfiguriert lassen, um diese/diese Tasten zu erkennen.
Es ist auch möglich, Nr. 1 und Nr. 3 zu kombinieren - verwenden Sie eine Widerstandsleiter zwischen Pin 1,3,5 und GND und eine separate Widerstandsleiter zwischen 2,7,6,4 und einem ADC-Pin. Dann ein weiterer Widerstand zwischen diesem ADC-Pin und +5V. Sie müssen herausfinden, welche Widerstände Sie verwenden und welches Ergebnis Sie erzielen werden, um die Antworten so gleichmäßig wie möglich zwischen 0 und 5 Volt zu verteilen, optimiert für den kleinsten Unterschied, der so groß wie möglich ist. Bauen Sie Ihre Schaltung auf und messen Sie die Ergebnisse aus.

Texas Instruments stellt einen i2C-Keypad-Encoder her . Oberflächenmontage. Viel einfacher geht es nicht.

Ein IC, das die Arbeit erleichtert?

Definitiv.

Der LM8330 I/O - Expander und Keypad Controller ist ein dediziertes Gerät, das entwickelt wurde, um einen Host-Prozessor vom Scannen einer matrixadressierten Tastatur zu entlasten und flexible und universelle, vom Host programmierbare Eingangs-/Ausgangsfunktionen bereitzustellen. Für die dynamische LED-Helligkeitsmodulation stehen drei unabhängige PWM-Timerausgänge (Pulse Width Modulation) zur Verfügung.

Es kommuniziert mit einem Host-Prozessor über eine I 2 C-kompatible serielle ACCESS.bus-Schnittstelle. Es kann nur im Standard- (100 kHz) und Fast-Modus (400 kHz) im Slave-Modus kommunizieren.

Damit können Sie wahrscheinlich mit einem ATtinyX5 anstelle eines ATmega davonkommen.