Wenn Sie beispielsweise einen Arduino mit 4 digitalen IO-Pins hätten, wie könnten Sie > 4 LEDs unabhängig voneinander leuchten oder den Zustand von > 4 Tasten lesen?
Ein Schieberegister wie das 74595 ermöglicht es Ihnen, viele Ausgänge mit nur 2 Anschlüssen zu haben: einem Daten-Pin und einem Takt-Pin. Sie setzen den Datenpin auf den nächsten Wert, den Sie in das Register verschieben möchten, und pulsieren dann den Taktpin.
Bruno hat eine gute Antwort gegeben, aber ich möchte ein paar Notizen machen.
Die berüchtigten 70 mA
Der 74HC595 wird oft als E/A-Erweiterung verwendet und ebenso oft zur Steuerung einer Reihe von LEDs verwendet. Was oft übersehen wird, ist, dass Sie es auf diese Weise außerhalb der Spezifikation betreiben können. Das Datenblatt besagt, dass der Gesamtversorgungsstrom nicht mehr als 70 mA, Absolute Maximum Ratings (AMR), betragen sollte, also halten Sie sich besser davon fern. Daher sind 8 LEDs bei 10 mA zu viel, und bei 20 mA übertreffen Sie AMR um nicht weniger als 130 %! Die Grenze liegt wahrscheinlich an der Stromkapazität der Bonddrähte, und dann kann der zu hohe Strom nicht nur die Leistung des Teils verschlechtern, sondern es dauerhaft außer Betrieb setzen, wenn dieser Draht brechen würde.
Aber letzte Nacht bin ich aufgewacht, weil ich eine Idee hatte . Die 70-mA-Grenze gilt sowohl für Icc als auch für den Erdstrom. Warum teilen Sie dann nicht unsere Summe oder 80 mA und lassen Icc die Hälfte davon und den Erdstrom die andere Hälfte? Alles, was Sie tun müssen, ist, 4 der LEDs auf Masse (aktiv hoch) und die anderen 4 auf Vcc (aktiv niedrig) zu beziehen. Dann kommt der Strom des ersteren von Icc, der Strom der anderen geht auf Masse. Auf diese Weise können Sie 15-mA-LEDs verwenden. (Es ist so einfach, dass ich mich wie ein Idiot fühle, nicht früher darauf gekommen zu sein.)
Die kombinierten Uhren
Ich dachte, Bruno sparte einen zusätzlichen I / O-Pin, indem er die Uhr des Schieberegisters mit der des Latches kombinierte. Anscheinend habe ich seine Antwort falsch interpretiert. Ich möchte diese Option noch erweitern.
Was passiert dann? Die Tabelle auf Seite 5 des Datenblatts sagt:
Inhalt des Schieberegisters durchgeschoben; vorheriger Inhalt des Schieberegisters wird an das Speicherregister und die parallelen Ausgangsstufen übertragen
(Hervorhebung von mir)
Es sind also nicht die neuen Daten, sondern die vorherigen , die zwischengespeichert werden. Kein wirkliches Problem, stellen Sie einfach sicher, dass Sie ein zusätzliches Dummy-Bit einfügen, um die letzten Daten zu speichern, oder alles wird einen Pin falsch sein.
Das Kombinieren der Takte bedeutet auch, dass die Ausgänge ständig umschalten, während Sie neue Daten hineinschieben. Die Funktion des Latches bestand eigentlich darin, dies zu vermeiden. In vielen Fällen ist dies kein Problem, wenn Sie es schnell tun können, aber im schlimmsten Fall können unerwünschte Effekte auftreten. Im schlimmsten Fall könnte der 74HC595 verwendet werden, um ein Display mit einer sehr hohen Abtastfrequenz zu multiplexen + eine sehr lange Kette von Schieberegistern zu haben + alle 1er außer einer 0 zu haben, eine LED, die ausgeschaltet ist + einen dunklen Raum. Da diese LED in einem dunklen Raum von Zeit zu Zeit alle Einsen sieht, kann sie sehr schwach leuchten.
Oder wenn Sie dieses Hochfrequenz-Multiplexing mit einem Relais-Steuerausgang kombinieren. Alle Nullen und dann eine 1 für das Relais können bedeuten, dass der Ausgang des Relais nicht lange genug hoch ist, um anzuziehen.
Zugegeben, das sind Extremfälle, aber ich würde den seriellen und den Latch-Takt nach Möglichkeit getrennt halten, wenn Sie multiplexen oder auf andere Weise hohe Aktualisierungsraten haben möchten.
Ich stimme Ignacio bezüglich der Verwendung eines 74XX595-Schieberegisters mit seriellem parallelem Ausgang für die Ausgangserweiterung zu, aber tatsächlich benötigen Sie 3 Verbindungen, eine für Daten , eine für die Uhr und eine Latch-Aktivierung , die die Daten aus dem internen Schieberegister überträgt zu den Ausgangslatches.
Für die Erweiterung der Eingänge könnten Sie ein 74XX165, Parallel-in-Seriell-Schieberegister verwenden, dies ermöglicht bis zu 8 Tasten pro 74XX165.
Das Gute an diesem Ansatz ist, dass Sie mehrere Schieberegister verketten können, was eine erhöhte Anzahl von Ein- oder Ausgängen ermöglicht, und besser, Sie können 74XX595 und 74XX165 mischen, was eine beliebige Anzahl von Ein- oder Ausgängen ermöglicht.
Außerdem können Sie die Takt- und Latch-Signale gemeinsam nutzen, wodurch die Anzahl der benötigten Verbindungen reduziert und die Software erheblich vereinfacht wird. Auf diese Weise benötigen Sie nur 4 Verbindungen für beliebig viele dieser Schieberegister:
Als ich nach einem Diagramm suchte, fand ich auf dieser Website eine sehr clevere Möglichkeit, die Anzahl der erforderlichen Verbindungen auf 3 zu reduzieren. Es besteht darin, denselben Pin für die Dateneingabe und -ausgabe zu verwenden.
Die Software wird für jeden Taktimpuls etwa so vorgehen:
Nick erwähnt E/A-Expander, und sie sind definitiv einen Blick wert. Digikey listet mehr als tausend davon auf, ich wähle als Beispiel eine mit einer I2C-Schnittstelle aus, weil dies die wenigsten I/O-Pins erfordert; mindestens zwei.
Der NXP PCA9505 verfügt über 40 konfigurierbare I/O-Pins, was fünf 74HC595 entspricht. Es ist eine etwas teurere Lösung, aber dafür erhalten Sie viel mehr Funktionalität:
Weiterführende Literatur zu
GPIO-Expandern , NXP-Broschüre
PCA9505, Datenblatt
Für eine Lösung ohne zusätzliche ICs können Sie Techniken wie Multiplexing und Charliplexing verwenden :
Multiplexing (keine Strombegrenzungswiderstände dargestellt):
Die Art und Weise, wie Multiplexing funktioniert, ist ganz einfach - wenn wir im obigen Beispiel LED1 zum Leuchten bringen wollen, setzen wir Pin C1 auf High und PIN R1 auf Low, alle anderen Pins können High oder Hi-Z sein (auf Input, High gesetzt). Impedanz, die sie "getrennt" aussehen lässt)
Wenn wir LED5 leuchten möchten, setzen wir Pin C2 auf High und R2 auf Low.
Die Anzahl der Pins, die benötigt werden, um x LEDs anzusteuern, kann durch 2n Pins für n² LEDs berechnet werden, also brauchen wir zB für 16 LEDs (√16) * 2 = 8 Pins.
Charlieplexing:
Alternatives (ordentlicheres) schematisches Layout (vorgeschlagen von Supercat):
Dies ist etwas komplexer, verwendet jedoch weniger Pins, um eine höhere Anzahl von LEDs anzusteuern. Zum Beispiel können wir nur 5 Pins verwenden, um 20 LEDs wie im obigen Beispiel anzusteuern (im Vergleich zu mindestens 10 Pins bei "normalem" Matrix-Multiplexing (nicht zu verwechseln mit der Verwendung eines IC, in diesem Fall ist die Anzahl der benötigten Pins log2 (nLED).
Für eine externe Lösung können Sie Dinge wie Schieberegister oder Multiplexer wie 74HC595 und 74HC151 verwenden.
Ein Schieberegister nimmt einen getakteten seriellen Eingangsdatenstrom auf und gibt parallel (Serial In Parallel Out SIPO) oder umgekehrt (PISO) aus.
Sie haben im Allgemeinen 8 Ausgänge (oder Eingänge), aber Sie können so viele verketten, wie Sie möchten, um sie zu erweitern Dinge. Der Nachteil ist, dass die Geschwindigkeit, die Sie aktualisieren können, durch die Anzahl der Ausgänge pro Eingang geteilt wird (z. B. für ein Register mit 8 Ausgängen, wenn Sie einen 8-MHz-Eingangstakt haben, können Sie mit 1 MHz aktualisieren, für 16 Ausgänge 500 kHz usw.)
Diese Techniken können auch für Eingaben umgekehrt funktionieren.
Leon Heller
Chris Laplante
Nick Alexejew
Jippie
stevenvh
Jippie
Jippie
stevenvh
stevenvh