Wenn ich einen (einen Haufen) 74HC165-Chips über einen SPI-Port auf einem Mikrocontroller lesen möchte, ist dies einfach genug. Verbinden Sie sie jeweils über Q7 mit DS, wenden Sie das letzte Q7 an MISO, notCE an SS und CP an SCK an. Das funktioniert gut.
Aber wie teile ich nun den SPI-Bus mit anderen Geräten, die ich auslesen möchte? Der Q7-Ausgang des 165 ist nie Hi-Z, daher kann ich den MISO-Pin nicht mit anderen Geräten teilen. Ich bräuchte eine Möglichkeit, es zu "lösen" - eine Art Puffer.
Ich weiß, dass es Chips der 74er-Serie gibt, die verschiedene Puffer haben, die in Hi-Z gemacht werden können (z. B. ein 74HS240), aber das ist ein ganz zusätzlicher Chip, nur um das Schieberegister gemeinsam nutzen zu können. Vielleicht eine schlaue Art, einen Transistor zwischen dem letzten Q7 und dem MISO des Mikrocontrollers zu platzieren, der von der SS-Leitung gesteuert wird?
Bearbeiten: Kann alternativ jemand ein anderes Parallel-In-Serial-Out-Schieberegister vorschlagen, das über eine serielle Tristate-Ausgangsleitung verfügt und daher für die Verwendung auf einem SPI-Bus geeignet ist?
kann jemand ein anderes Parallel-In-Serial-Out-Schieberegister vorschlagen, das über eine serielle Tristate-Ausgangsleitung verfügt und daher für die Verwendung auf einem SPI-Bus geeignet ist?
Mouser, Newark und einige andere Distributoren und Lieferanten haben einen Auswahlfilter, der hilft, wenn ich nach "etwas wie einem 74HC165, aber mit serieller Tristate-Ausgabe" suche:
74HC589: Serieller oder paralleler 8-Bit-Eingang; serielle Ausgabe; Schieberegister mit 3-State-Ausgang. "Der HC589A verbindet sich direkt mit dem seriellen SPI-Datenport auf CMOS-MPUs und MCUs."
-- Auf Halbleiter - Datenblatt ; Fairchild- Datenblatt (es erfüllt also die Kriterien "Muss eine zweite Quelle haben", die einige Projekte haben, wie von Jason S erwähnt).
Wie Sie angemerkt haben, ist der 165 kein "vollständiges" SPI-Gerät, da er seinen Ausgang nicht mit drei Zuständen ausgibt.
Wenn Sie einen einzelnen 165 auf Ihrem SPI-Bus haben und Geschwindigkeit kein großes Problem ist, können Sie einen Widerstand (10 k?) zwischen dem 165-Ausgang und dem uC MISO-Pin platzieren. Andere SPI-Chips (die ihren Ausgang mit drei Zuständen ausführen) überschreiben den schwachen Antrieb durch den Widerstand, aber ohne andere aktive Chips setzt sich der schwache Antrieb durch, aber Sie müssen möglicherweise die Uhr verlangsamen (nur für den 165).
Wenn Sie mehrere 165er haben, können Sie einen Multiplexer-Chip (151) verwenden. Dies kostet zusätzliche Auswahlleitungen für den Mux-Chip, aber Sie können die NotCE-Leitungen des 165 (die sonst separat gewesen wären) gemeinsam nutzen und einen der Eingänge für die "echten" SPI-Chips verwenden.
Die 74xx125 und '126 sind Quad-Puffer mit Tri-State-Ausgängen, die einzeln gesteuert werden - Sie könnten ein Paket verwenden, um vier 165er zu puffern ...
Sie haben beschrieben, wie Sie einen Haufen 74HC165-Chips zu einer langen Kette kaskadieren können. Ein Bündel der 74HC595-Chips kann auch zu einer ähnlichen Daisy-Chain kaskadiert werden.
Eine Möglichkeit, den SPI-Bus mit anderen Geräten zu teilen, besteht darin, alle Ihre Chips zu einer langen SPI-Daisy-Chain zu verketten . Es ist schon eine Weile her, seit ich das gemacht habe, aber ich erinnere mich, dass ich 74HC165-Chips, 74HC595-Chips und ähnliche Chips in eine lange Schleife stecken konnte. Egal wie viele Chips sich in der Daisy-Chain-Schleife befanden oder in welcher Reihenfolge sie sich befanden, ich benötigte nur 4 Pins auf dem Mikrocontroller.
Der MOSI-Pin des Mikroprozessors treibt den MOSI-Pin des ersten Chips in der Kette, jeder Chip ist kaskadiert, sodass sein serieller Ausgang den seriellen Eingang des nächsten Chips in der Kette treibt, und der MISO-Pin des letzten Chips in der Kette treibt den MISO Pin des Mikroprozessors.
Der Mikroprozessor taktet jedes Mal, wenn er eine Ausgabe ändern oder eine Eingabe lesen möchte, die Daten einer vollständigen Schleife ein / aus.
So funktioniert JTAG , richtig?
Eine so lange Daisy-Chain-Schleife ist langsamer, benötigt aber weniger Pins auf dem Mikrocontroller als die „Independent Slave SPI Configuration“. Leider können einige Chips, die behaupten, SPI zu unterstützen, nicht verkettet werden.
Der ganze Grund, warum Sie SPI überhaupt in Betracht ziehen, ist, dass Ihnen die Pins auf dem Mikrocontroller ausgehen und Sie mit etwas verbunden sind, das keine hohen Geschwindigkeiten benötigt, richtig?
Wouter van Ooijen
Jason S
LeoNerd
Diego C Nascimento