Wenn man mit Microcontrollern wie dem ATmega328 (Arduino Uno) oder ESP8266 (Wemos D1 mini) arbeitet und viele Leitungen gleichzeitig ansteuern möchte, ergibt sich mitunter das Problem, dass nicht genügend Ausgänge zur Verfügung stehen.
Beispiel: Um ein HD44780-kompatibles LCD anzusteuern sind mindestens 6 Leitungen erforderlich, wenn man es im 4-Bit-Modus betreibt. Bei einem Wemos D1 mini stehen aber nur 11 Ausgänge zur Verfügung bzw. 9, wenn man die seriellen Datenleitungen nutzen will. Nutzt man 6 Leitungen nur für das Display, stehen nur noch 5 oder 3 Leitungen für andere Zwecke zur Verfügung. Das kann im Einzelfall immer noch ausreichend sein – aber wenn man auch noch Sensoren oder Tasten zur Steuerung verbinden will, kann das zu wenig sein.
Eine Lösung für dieses Problem sind Schieberegister. Damit kann man mit nur drei Leitungen nahezu beliebig viele Ausgänge betreiben. Die einzige Grenze ist die Zeit, die man benötigt, um die Register zu befüllen.
Viele Ausgänge mit einem 74HC595
Ein Schieberegister mit serielle Eingabe und paralleler Ausgabe, kurz „SIPO“ für „serial input, parallel output“, kann dafür benutzt werden, um viele Ausgänge anzusteuern. Eine häufig verwendeter Komponente für diesen Zweck ist das 74HC595 – ein Schieberegister mit 8 Bit. Laut Datenblatt kann dieses IC in einem Spannungsbereich von 2 bis 6 Volt und mit einer Taktfrequenz bis 25 MHz bei 6 Volt genutzt werden (bei 5 Volt etwa 20 MHz).
In der nachfolgenden Beschreibung werden 0 und 1 für „low“ (Spannung unter 0,8 Volt) und „high“ (Spannung über 75% der Betriebsspannung oder über 2 Volt bei der TTL-Version 74HCT595) verwendet.
Für die andere Richtung, mehrere Eingänge seriell abzufragen, kann man den 74HC165 nutzen.
Anschlussbelegung
Die Anschlussbelegung für ein DIP-16-Gehäuse ist wie folgt:
Pin | Bezeichnung | Beschreibung | Pin | Bezeichnung | Beschreibung |
---|---|---|---|---|---|
1 | QB | Ausgang 2 | 16 | VCC | |
2 | QC | Ausgang 3 | 15 | QA | Ausgang 1 |
3 | QD | Ausgang 4 | 14 | SER | Serial Input |
4 | QE | Ausgang 5 | 13 | OE | Output Enable |
5 | QF | Ausgang 6 | 12 | RCLK | Register Clock |
6 | QG | Ausgang 7 | 11 | SRCLK | Store Register Clock |
7 | QH | Ausgang 8 | 10 | SRCLR | Store Register Clear |
8 | GND | 9 | QH* | Ausgang 8* |
* Dieser Ausgang kann zur Ansteuerung eines weiteren Schieberegisters genutzt werden.
Funktionsweise
Die Schaltung für den Betrieb eines einzelnen Schieberegisters benötigt nur drei Ausgänge, mit denen SER, RCLK und SRCLK gesteuert werden:
Über GND und VCC erfolgt die Spannungsversorgung. GND wird mit Masse verbunden, VCC mit +5V oder +3,3V.
Mit OE wird die Ausgabe des Schieberegisters generell aktiviert. Dieser Eingang wird daher mit GND verbunden.
Die Dateneingabe erfolg über SER, RCLK und SRCLK in folgnder Reihenfolge:
- SRCLK auf 0 setzen.
- RCLK auf 0 setzen.
- SER auf 0 oder 1 setzen, je nach dem, welche Information man übergeben will.
- RCLK auf 1 setzen – damit der Registerinhalt um ein Bit verschoben und das Bit von SER in das Register übernommen.
- Schritt 2-4 für die übrigen sieben Bits wiederholen.
- SRCLK auf 1 setzen – damit werden die geschriebenen Bits zu den Ausgängen übernommen.
Nutzung mehrerer Schiebregister
Wenn 8 Bit nicht ausreichen, kann man auch mehrere Schieberegister in Reihe schalten. Dazu wird der Ausgang QH* (Pin 9) mit dem Eingang SER (Pin 14) des nächsten Bausteins verbunden. SRCLK und RCLK werden gemeinsam angesteuert:
Nach dem selben Schema kann man auch noch weitere Bausteine anschließen. Man muss nur daran denken, dass mit jedem weiteren Schieberegister auch weitere 8 Takte für die Ausgabe der Daten erforderlich werden, wodurch die maximal mögliche Geschwindigkeit mit zunehmender Anzahl der Ausgänge sinkt.
Alternative
Eine Alternative zur Verwendung von Schieberegistern ist der Port-Expander MCP23017. Dieser ist teurer, bietet dafür aber eine sehr große Flexibilität und auch die Möglichkeit, Ports als Eingänge zu nutzen.