Kann ich mehrere SN74HC595-Schieberegister separat (ohne sie zu verketten) an denselben Arduino anschließen?

Ich bin eine Art Neuling in dieser ganzen Idee von Schieberegistern und der Arduino-Bibliothek zur Handhabung von Schieberegistern. Ich habe online viele Demonstrationen gefunden, bei denen Schieberegister verkettet sind. Aber ich muss mehrere Schieberegister mit meinem Arduino verbinden, ohne sie zu verketten. Mein gesunder Menschenverstand sagt: Ja! Sie können, aber ich bin mir nicht ganz sicher und ich habe diesen IC nicht zur Hand, damit ich die Schaltung physisch aufbauen und testen kann.

Ich bin wirklich schüchtern und fühle mich unwohl, euch diese Frage zu stellen, ob es sich als dumme Frage herausstellt. Also... bitte erbarme dich meiner Seele :)

Warum können die SRs nicht verkettet werden?
Sie sind für zwei verschiedene Schaltungen gedacht. Sie reduzieren die Komplexität der Codierung und einige andere Probleme mit dem Timing ... Aber es kann auch durch Verketten der SRs erreicht werden ... @uint128_t
Keine Sorge, es ist eine gute Frage, obwohl sie vielleicht mit einigen Details darüber, warum Sie dies tun möchten, verbessert werden könnte, denn wie Sie sehen können, denken die meisten Leute (einschließlich mir), dass dies der falsche Weg ist.

Antworten (5)

Ja. Jedes Schieberegister erfordert normalerweise drei Pins (Daten, Latch, Takt), aber wenn Ihre Anwendung es ermöglicht, Takte oder sowohl Takt als auch Latch gemeinsam zu nutzen, ist die Anzahl der benötigten Pins geringer.

Denken Sie daran, dass zwei separat verbundene Schieberegister (keine gemeinsam genutzten Pins) nicht gleichzeitig aktualisiert werden können (Fußnote: Sie können das SPI-Peripheriegerät zum Ansteuern von Schieberegistern verwenden, und dies kann tatsächlich ausgeführt werden, während Sie andere Pins schlagen, also Sie kann Schieberegister gleichzeitig aktualisieren.

So erweitern Sie die gemeinsame Nutzung von Latch / Clock (vorausgesetzt, Sie schlagen Pins ein und verwenden das SPI-Peripheriegerät nicht):

Shared Latch : Die SRs werden gleichzeitig aktualisiert (die internen Register werden mit den Ausgängen verriegelt). Sie müssen die Daten jedoch immer noch separat an beide SRs takten. Die Sequenz wäre "entriegeln, Daten 1 takten, Daten 2 takten, verriegeln".

Shared Latch/Clock : Sie können die SRs gleichzeitig aktualisieren und die Daten in einer einzigen Sequenz austakten. In Ihrer Taktschleife aktualisieren Sie einfach beide Datenpins. Die Sequenz ist also "entriegeln, beide Datenströme takten, verriegeln". Das ist schneller, aber für viele Anwendungen spielt diese Unterscheidung keine Rolle.

Was ist, wenn ich den Verriegelungsstift teile? können sie dann gleichzeitig aktualisiert werden? Danke @uint128_t
@Khaliddhali siehe meine Änderungen.

Warum müssen Sie eine Verbindung ohne Daisy-Chaining herstellen?

Der schnellste und einfachste Weg, alle Ihre Schieberegister mit den vorhandenen einfachen Arduino-Tools zu aktualisieren, ist die Verkettung.

In der Software weisen Sie ein Array von Bytes zu, so viele Bytes wie Sie 595 haben. Ein einziger Befehl verschiebt dann das gesamte Array auf alle 595er.

Wenn ein Grund für das Nicht-Daisy-Chaining darin besteht, dass einige 595er nicht aktualisiert werden sollten, laden Sie einfach das entsprechende Byte mit den alten Daten, und der 595 wird ohne Störungen auf die gleichen Daten aktualisiert. Wenn Sie verschiedene Prozesse für verschiedene 595er haben, dann aliasen Sie einfach ihre eigenen Zeiger in den Ausgabepuffer, jeder Prozess kann dann nur seine eigenen Bytes aktualisieren.

Wenn Sie keine Daisy-Chain durchführen, müssen Sie die SPI-Byte-Out-Funktion für verschiedene Pins wiederholen, was überschüssige Zeit sowie überschüssige Pins verbraucht.

Sobald die Pufferübertragung gestartet wurde, verwendet sie Hardware, sodass das Programm nicht zusätzlich belastet wird. Es müsste eine sehr große Pipeline von 595 sein, damit die Latenz durch sie signifikant wird. Denken Sie daran, dass, wenn Sie alle Latch-Pins parallel ansteuern, alle Ausgänge genau zur gleichen Zeit aktualisiert werden, unabhängig von ihrer Position in der Pipeline.

Während Sie dies tun können, wenn Sie viele davon benötigen und alle einzeln statt verkettet sind, ist es möglicherweise einfacher, einen I2C-GPIO-Expander zu verwenden, z. B. den PCA8574. Jeder dieser Chips bietet 8 Pins, die unabhängig voneinander gesteuert werden können. Sie werden über den I2C-Bus verbunden und können auf eine von 8 Adressen konfiguriert werden, sodass Sie 8 davon mit nur 2 Pins Ihres Controllers verwenden können. Dies kann erweitert werden, indem auch PCA8574As (die einen anderen festen Teil ihrer Adresse haben) auf 16 Chips pro Bus verwendet werden. Arduinos haben einen einzigen Hardware-I2C-Port, aber Sie können auch einen I2C-Bus von gewöhnlichen IO-Pins steuern, sodass Sie diesen leicht erhöhen können, um bei Bedarf mehr zu steuern.

Natürlich gibt es einen Nachteil, dass die Pins einzeln steuerbar sind, dh wenn Sie die Ausgangspins synchron ändern möchten, können Sie dies nicht. Aber wenn das keine Voraussetzung ist, denke ich, dass die Verwendung von GPIO-Expandern ein einfacherer und erweiterbarer Weg ist, um eine große Anzahl von Ausgängen zu steuern.

Die Antwort ist Ja. Die Frage ist vollkommen gültig und in bestimmten Szenarien anwendbar, in denen Sie eine Genauigkeit im Mikrosekundenbereich und keine gpios benötigen. Das Verketten von zwei 595-Chips und das Senden von zwei Bytes würde doppelt so lange dauern wie das Senden von nur einem.

Angenommen, Sie haben vollständige 8-Bit-Informationen, die auf einem von ihnen häufig aktualisiert werden sollten, und nur Steuerbits, die auf einem anderen weniger häufig aktualisiert werden müssen.

Sie könnten es sich leisten, in einem solchen Szenario ein gpio zu verlieren.

Sie müssen in diesem Fall nur jedem 595 separate STCP-Pins zuweisen. DS und SHCP könnten geteilt werden.

Aber ich bin mir nicht ganz sicher und habe diesen IC nicht zur Hand, damit ich die Schaltung physisch aufbauen und testen kann.

Sie können es tun, einfacher mit HC164 als mit HC595, aber definitiv machbar: Verwenden Sie den Latch-Pin als Chip-Select-Mechanismus.