Porterweiterung mit SPI

Wechseln zu: Navigation, Suche

Porterweiterung

Mit Schieberegistern lassen sich die Ports eines Mikrocontrollers auf einfache und billige Weise erweitern. Zur Ansteuerung der Schieberegister ist ein im Controller integrierter SPI-Bus nützlich, aber nicht unbedingt notwendig, da sich die Kommunikation auch in Software realisieren lässt.

Ausgänge

Um einen Controller mit zusätzlichen Ausgängen zu erweitern, bieten sich Schieberegister vom Typ 74xx595, am besten 74HCT595 (bessere Schwelle der Eingangsspannungen bei 5V-Versorgung des ICs aber 3,3V-Signalen vom uC), an. Die folgende Schaltung zeigt den Anschluß von theoretisch beliebig vielen 74xx595 an einen SPI-Bus:

Hc595-porterweiterung.png

Der SPI-Bus muss auf CPHA=CPOL=1 gestellt sein. Das auszugebende Bitmuster (z. B. 16 Bit im o.a. Beispiel) wird durch das erste Schieberegister hindurchgetaktet und über dessen Ausgangsspin in das zweite Schieberegister hineingetaktet. Dadurch wandert das Bitmuster sequentiell durch beide Bausteine. Nach 16 Taktzyklen steht es dann stabil und parallel an den Ausgängen der beiden Bausteine an.


Wenn ein höherer Strom als 6mA geschaltet werden soll, dann gibt es auch fertige Bausteine:

Low-Side-Schalter:

Die TPIC6x595-Bausteine von TI, die zwischen 100mA und über 1A dauernd "sinken" können, weil es Open-Drain-Ausgänge sind, die Lasten bis 33V/50V (je nach IC) gegen Masse schalten. MICREL bietet hier seine MIC584x-Serie, die allerdings etwas "preisempfindlicher" sind.

High-Side-Schalter:

Der MIC5891 von Micrel kann je Ausgang bis zu 500mA bei 35V liefern (aber nicht alle Ausgänge gleichzeitig).

Alternativen

Aus der CMOS-Serie 4000 ist der Typ 4094 zum 74HC595 vergleichbar, hat jedoch eine andere Anschlussbelegung und ein Ausgangslatch statt Flipflops. Das heißt, notfalls kann man den Eingang STR auf High legen, und dann zappeln die Ausgänge während des Duchschiebens. Da CMOS-Typen bis 15 V arbeiten, kann man außerdem die Anzahl von Pegelumsetzern auf 2-3 reduzieren, um beliebig viele bspw. 12-V-Ausgänge zu steuern.

Stört das Zappeln von Ausgängen während des Durchschiebens nicht, kann man einfache Schieberegister verwenden.

Eingänge

Die Anzahl der Eingänge kann z. B. mit parallel-in/serial-out Schiebregistern des Typs 4021 erhöht werden (z. B. Philips HEF4021B). Besonders verbreitet ist heutzutage der Typ 74xx165. Alternativ kann z. B. auch ein 74xx597 verwendet werden. Durch dessen zusätzlichen Eingangspuffer (Latch) ist der Schaltungsaufwand allerdings höher.

Beispielschaltung für den 74xx165:

74xx165.png


Beispielschaltplan mit 74HC595 und 74HC165 an einem SPI Bus: http://www.mikrocontroller.net/attachment.php/30856/SPI_74HC595.pdf

Hinweis: Im Beispielschaltplan ist ein zusätzlicher Port "PP0" für das Latch-Enable des 74HC165 vorgesehen. Um beliebig viele Slaves an einem SPI nutzen zu können, muß der MISO-Ausgang hochohmig sein, wenn /SS = 1 ist.

Tipp: Man kann z.B. mit einem 74LVC2G126 oder einem 74LVC2G125 das Latch-Enable-Signal aus dem /SS-Signal generieren und den Ausgang hochohmig setzen, wenn /SS = 1 ist.

Siehe auch

MCP23S17 16-Bit I/O Expander with Serial Interface

MCP23S09 von Microchip (bei Betrieb mit 3,3V sind die GPIO Ports 5V tolerant)