Lauflicht Teil 2 - shift

Also wird jetzt (und in späteren Basteleien) getrickst, um mehr Lampen mit weniger Beinchen zu steuern. Heute kommt dazu ein Schieberegister 74HC595 (bzw. das baugleiche M74HC595B1R) zum Einsatz.
Was macht das Schieberegister nun?
Es hat 8 Ausgänge QA bis QH (die Namen der Pins wähle ich analog zum Schaltplan, das wechselt hier und da mal etwas) – da kommen die LEDs dran. Die Ausgänge haben jeweils einen 1-Bit-Speicher, so dass sie sich merken können, ob sie Strom führen sollen (1) oder nicht (0). Dazu kommen weitere interne 8 Bit Speicher im eigentlichen Schieberegister.
Auf der Daten-Eingangsleitung SER kann man ein Signal anlegen (0 oder 1). Anschließend signalisiert man durch den Wechsel der Leitung SRCLK von 0 auf 1, dass das Signal an SER gelesen werden soll. Die 0 oder 1 wandert ins 1. Bit des Schieberegisters, der vorherige Inhalt des 1. Bits wandert in das 2. Bit, das 2. in das 3. und so weiter – der vorherige Inhalt von Bit 8 fliegt raus. Wann man das acht Mal hintereinander macht, hat man 8 Bit im Schieberegister abgelegt.
Wenn die Leitung RCLK von 0 auf 1 wandert, werden die 8 Bit des Schieberegisters auf die 8 Ausgänge gelegt. Dort bleiben sie dann, bis das nächste Mal ein Signal auf RCLK kommt, man kann also in aller Ruhe die nächsten 8 Bit ins Schieberegister schieben, während die Ausgänge QA bis QH unverändert bleiben.
Der Eingang SRCLR muss dauerhaft auf 1 sein, sonst werden auf einen Schlag alle Schieberegister-Bits auf 0 gesetzt. Klingt doof, aber darüber kann man die Schieberegister auf einen Schlag resetten und leeren. Außerdem muss ja irgendwo Strom herkommen, um die Ausgänge auf 1 zu schalten.
Der Eingang G muss dauerhaft auf 0 sein, sonst werden alle Ausgangspins auf 0 geschaltet. Das hat bestimmt auch einen versteckten Sinn – vielleicht „Erdung“?
Fazit
Da ich jetzt nur SER, SRCLK und RCLK brauche, reichen drei Leitungen zum Schieberegister aus, um meine fünf LEDs zu steuern. Auch acht LEDs über drei Leitungen wären kein Problem, ich müsste nur noch drei weitere LEDs anschließen.
Das Programm zu der Schaltung schiebt übrigens immer nur 5 Bit in das Schieberegister. Dass in den Bits 6 bis 8 dann „Reste“ vom vorherigen Durchlauf rumliegen (nämlich die alten Bits 1 bis 3), stört nicht, da ja nur 5 LEDs angeschlossen sind und es egal ist, was die Pins QF, QG und QH machen.
Netterweise ist das Schieberegister schnell genug, dass ich es mit den vollen 16MHz ansteuern kann und keine Wartezyklen zwischen den einzelnen Signalen einlegen muss.
Mehrere Schieberegister lassen sich übrigens sehr einfach hintereinanderhängen: Das „rauspurzelnde“ 8. Bit wird zusätzlich über QH an Pin 9 ausgegeben. Das kann man direkt an den SER-Eingang des nächsten Schieberegisters anschließen. SRCLK und RCLK aller Chips werden direkt miteinander verbunden. Nun hat man ein 16 Bit-Schieberegister und muss 16 statt 8 Schiebeoperationen durchführen, um alle Ausgänge mit Daten zu versorgen.
Und noch eins und noch eins und …
Nachträge zum Schaltplan:
Ich im Screenshot des Schaltplans sieht man noch einen Fehler: Dort habe ich ein 74LS595 statt eines 74HC595 verbaut. Ersteres ist TTL, zweiteres HCMOS. Sonst gibt es keine Unterschiede, also einfach das richtige hindenken :-)
Außerdem sind beide Bauteile in der KiCad-Bauteilbibliothek etwas komisch dargestellt: Pin 7 und Pin 9 heißen beide QH, so wie ich das auch im im Absatz über das Verketten benutzt habe. Im offiziellen Datenblatt heißt Pin 7 Q7 und Pin 9 Q7S, was sinnvoller ist, weil man die so auch unterscheiden kann.
Mitch's Manga Blog am : Lauflicht Teil 3 - decoder