Wie setze ich einen 74HC165 auf einen SPI-Bus?

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?

Warum verwenden wir nicht einen echten SPI-Chip, wie einen MCP23S08 oder MCP23S17?
Ein Grund dafür ist, dass 165er billig und aus vielen Quellen erhältlich sind. Die für SPI entwickelten Chips binden Sie an einen einzigen Anbieter. (Auf der anderen Seite, da ich für Microchip arbeite, kaufen Sie bitte auf jeden Fall unsere Teile. :-)
In der Tat - die 165er sind spottbillig und ich kann sie im Fünferpack bei Amazon bekommen. Ein Grund, warum ich sie verwenden möchte, ist das Ein-/Ausschalten externer Geräte. Wenn ich versehentlich eines in die Luft jage, kann ich es einfach und kostengünstig ersetzen. Weniger für einen teureren und selteneren Chip
Ich habe es so gemacht, wie Sie es in der Vergangenheit gesagt haben (nur Simulation). Ein BJT als Chip-Select auf dem Q7. Ein BC549 funktioniert je nach Geschwindigkeit des SPI-Busses hervorragend. Das Problem bei diesem Ansatz ist, dass es sich um einen Open-Drain handelt, sodass Sie je nach Geschwindigkeit einen Widerstand verwenden können, wie bereits gesagt.

Antworten (4)

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).

Aha - da sieht der '589 genau richtig aus; ähnlich wie ein 165, aber mit Tristate-Ausgang. Genau das, wonach ich gesucht habe. Danke.
Ein kurzer Hinweis aus der Zukunft: Jetzt, da ON Semi Fairchiled übernommen hat, scheint der HC589 exklusiv von ON Semiconductor hergestellt zu werden.

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.

Der 151 scheint auch keine Ausgangsaktivierungsleitung zu haben, so dass sich das Problem nur verschiebt. An diesem Punkt müsste ich alle MISO-Leitungen meiner Geräte durch den 151-Chip stecken, und jetzt muss ich seine beiden Multiplexer-Leitungen - und die SS-Leitungen der SPI-Geräte - ansteuern, indem ich mehr Pins auf dem uC verwende. Dies macht sicherlich den gesamten Zweck des gemeinsam genutzten MISO/MOSI/SCK-Busses zunichte.
Wenn Sie mehrere 165er haben, sparen Sie eine NotCE-Zeile für jeden 165er, auf Kosten von N Auswahlzeilen für 2^N-1 165er. (die -1 sind die "echten" SPI-Geräte).

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 ...

Nun, der Sinn der SPI-Kette besteht darin, nicht vier einzelne 165er zu benötigen, die direkt mit dem uC verbunden sind. Ich kann sie alle in einer langen Kette machen. Ich brauche also nur einen einzigen Tristate-Puffer.
@LeoNerd das hat nichts mit SPI zu tun, es basiert nur auf der Anwendung. Eine Verkettung impliziert, dass Sie die Lochkette für eine einzelne Änderung aktualisieren müssen. Für Anwendungen mit hoher Reaktionsfähigkeit/Geschwindigkeit und/oder Niederfrequenz-SPI-Bus oder sogar zur Reduzierung von EMI ist es besser und besser, jeden 74xx125 als Slave zu haben.
Ich habe kürzlich entdeckt, dass Sie "One-Gate"-Versionen der 74'125- und '126-Chips bekommen können; siehe zB SN74AHC1G125. Ich habe mir ein paar davon bestellt, da diese ideal erscheinen, um die seriellen Ausgangsleitungen dieser Chips zu isolieren, um sie auf einen echten SPI-Bus zu setzen.

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?