BitBasics – 74xx595 – Schieberegister

BitBasics - 74xx595 - Schieberegister

(314 MB) 00:11:38

2015-11-29 11:00 🛈

(english further down) Hier schauen wir auf die Funktionsweise des Schieberegisters 74HC595, welches genutzt werden kann um die Anzahl der Ausgänge zu erhöhen

Wenn man eine große Anzahl Ausgänge ansteuern will sind Schieberegister wie der 74HC595 meist eine gute Wahl. Mit nur wenigen Pins der Steuerung kann man acht Ausgänge verwalten. Der Clou: Man kann diese ICs hintereinanderschalten und so ohne weitere Pins zur Ansteuerung zu benötigen die Anzahl der Ausgänge immer weiter erhöhen.

Text Deutsch

0:00:12.340,0:00:15.520
Heute mal wieder eine kleine Theorie-Runde

0:00:15.520,0:00:17.880
und zwar schauen wir uns einen IC genauer an

0:00:17.880,0:00:28.740
Der IC stammt aus der 74er-Reihe, einer Sammlung von grundlegenden, logischen Bauelementen

0:00:28.740,0:00:33.780
Diese Chips werden von vielen verschiedenen Herstellern gefertigt, die Modellnummern sind teilweise unterschiedlich

0:00:33.780,0:00:40.460
Wenn 74 und die Funktionsnummer vorkommt machen sie aber üblicherweise das Selbe

0:00:40.460,0:00:44.120
Dieses mal schauen wir uns den 74**595 an

0:00:44.120,0:00:51.660
Sich selbst bezeichnet er als “8-bit serial-in, serial or parallel-out shift register with output
latches and 3-state output”

0:00:51.680,0:00:54.680
Bleiben wir bei der landläufigen Bezeichnung “Schieberegister”

0:00:54.680,0:00:58.320
Schieberegister sind immer dann interessant wenn ihr viele Ausgänge benötigt

0:00:58.320,0:01:03.720
Normalerweise nimmt man ja z.B. die Pins eines Mikrocontrollers als Ausgang

0:01:03.720,0:01:10.000
Aber deren Anzahl ist beschränkt – wenn sie ausgehen kommt hier so ein Baustein zum Einsatz

0:01:10.000,0:01:16.280
Der Vorteil: Man benötigt nur wenige Leitungen von der Ansteuerung

0:01:16.280,0:01:21.120
und hat sehr viele Ausgänge am anderen Ende. Die Anzahl der Ausgänge kann man also hiermit erweitern

0:01:21.120,0:01:26.960
Ich hab hier die große Bauform DIL16, also mit 16 Beinchen

0:01:26.960,0:01:31.360
Gibt’s aber auch in diversen SMD-Bauformen

0:01:31.360,0:01:34.920
Schauen wir uns erst mal die Bedeutung der Pins an

0:01:34.920,0:01:38.160
GND und Vcc sollte eigentlich klar sein: Die Spannungsversorgung.

0:01:38.160,0:01:42.560
Üblicherweise sind mit diesen ICs zwischen 2.5 und 5 Volt möglich

0:01:42.560,0:01:47.480
Und wie bei jedem IC: Wenn etwas Last zu erwarten ist den Entkoppel-Kondensator nicht vergessen

0:01:47.500,0:01:52.320
Die Pins Q0 bis Q7 sind unsere Ausgänge

0:01:52.320,0:01:54.160
Q0 ist also der erste Ausgang

0:01:54.160,0:01:57.380
Q1 der Zweite und so weiter bis Q7, dem achten Ausgang

0:01:57.380,0:02:08.980
Je nach Hersteller ist die Bezeichnung etwas anders, Funktion und Position sind aber gleich

0:02:08.980,0:02:15.960
OE (Output Enable) steuert ob die Ausgänge überhaupt aktiv sind

0:02:15.960,0:02:21.640
Ist der Pin nicht angeschlossen (LOW) sind die Ausgänge aktiv

0:02:21.640,0:02:26.080
Wenn man allerdings einen HIGH-Pegel anlegt gehen die Ausgänge in den Hochimpedanzmodus

0:02:26.080,0:02:32.840
Grob gesagt: Für den Rest eurer Schaltung sieht es dann so aus als ob der Schieberegister gar nicht angeschlossen wäre

0:02:32.840,0:02:41.880
Im Normalbetrieb, also LOW, zieht der 595 die Ausgänge auf GND oder die Versorgungsspannung

0:02:41.880,0:02:47.080
DS und SHCP sind unsere Dateneingänge

0:02:47.080,0:02:51.680
Eine klassische serielle Verbindung – schauen wir uns mal an wie diese funktioniert

0:02:51.680,0:02:58.600
Stellen wir uns vor in diesem Chip ständen acht Kisten auf einem Förderband

0:02:58.600,0:03:06.320
DS geht ganz zum Anfang des Förderbandes, SHCP ist mit dem Motor verbunden, welcher das Band antreibt

0:03:06.320,0:03:13.280
Wenn wir über DS eine Eins eingeben landet die erst mal in einer imaginären Kiste

0:03:13.280,0:03:19.440
Diese ist noch beim Arbeiter in der Hand und steht nicht auf dem Förderband

0:03:19.440,0:03:26.520
Wenn wir SHCP, also den Motor, einschalten, fährt alles nach rechts und die Eins steht nun auf dem ersten Lagerplatz

0:03:26.520,0:03:31.160
Die Kiste am Ende wird “recyclet” und verschwindet einfach

0:03:31.160,0:03:42.680
Das Band hat dabei eine Einrastfunktion und fährt immer nur eine Position weiter

0:03:42.680,0:03:51.600
Das Ganze können wir dann immer weiter wiederholen, z.B. in dem wie hier eine 0 dabei schieben

0:03:51.600,0:03:58.240
So geht’s dann immer weiter und wir können unsere Daten in die Boxen – dem Schieberegister – laden

0:03:58.240,0:04:05.640
Und was passiert, wenn die Eins von eben am Ende des Förderbands ankommt?

0:04:05.640,0:04:09.600
Sie müsste ja eigentlich verschwinden

0:04:09.600,0:04:15.320
Aber wir haben ja noch Q7S

0:04:15.320,0:04:21.920
Mit diesem kann man mehrere dieser ICs kaskadieren, also hintereinander schalten

0:04:21.920,0:04:27.960
Wir verbinden einfach Q7S mit dem DS des nächsten ICs

0:04:27.960,0:04:31.800
Das Taktsignal SHCP verbinden wir zu beiden

0:04:31.800,0:04:38.320
Wenn wir jetzt alle Boxen gefüllt haben und rechts eine Eins steht

0:04:38.320,0:04:48.040
und wir nochmal eine Eins eingeben sowie alles wieder nach rechts verschieben

0:04:48.040,0:05:05.320
dann verschwindet die rechte Lampe nicht, sondern geht über Q7S zum nächsten Chip

0:05:05.320,0:05:13.320
und da wir den Motor ja schon eingeschaltet haben ist die Eins nun auf dem ersten Platz des zweiten ICs

0:05:13.320,0:05:23.160
So können wir mit den selben Kabeln des Mikrocontrollers quasi unendlich viele dieser ICs ansteuern

0:05:23.160,0:05:30.800
Das Limit ist meist die Zeit: Mehr Kisten zu befüllen dauert entsprechend länger

0:05:30.800,0:05:36.520
Dateneingang verstanden? Dann schauen wir uns jetzt die “Latch” an

0:05:36.520,0:05:41.400
Dahinter versteckt sich der Pin STCP (STorage Clock Pin)

0:05:41.400,0:05:51.840
Hintergrund: Wenn wir die Boxen direkt mit den Ausgängen verbinden würden, würde jedes neue Bit alle Ausgänge ändern

0:05:51.840,0:05:58.960
Wir könnten gar nicht sagen: “Ausgang vier soll Eins sein, alle anderen aber Null”

0:05:58.960,0:06:05.120
Wir müssten ja erst eine Eins eingeben und dann von links mit Nullen auffüllen bis wir an der vierten Position sind

0:06:05.120,0:06:10.600
und das wollen wir ja nicht auf dem Ausgang sehen – dafür ist die Latch zuständig

0:06:10.600,0:06:17.680
Machen wir die Ansicht mal kleiner und denken uns weitere Boxen, welche jetzt direkt mit den Ausgängen verbunden sind

0:06:17.680,0:06:28.120
Erst wenn wir STCP pulsen kopieren die Boxen den Zustand unseres Förderbandes

0:06:28.120,0:06:35.200
Die diesem Fall sind jetzt Q0,2,4,6 und Q0 des zweiten ICs eingeschaltet

0:06:35.200,0:06:43.840
Wenn wir jetzt ein weiteres Bit eingeben schiebt sich oben alles weiter, der Ausgang bleibt aber gleich

0:06:43.840,0:06:50.360
Und zwar so lange, bis wir auf STCP wieder signalisieren: “Bitte jetzte den Ausgang ändern”

0:06:50.360,0:06:55.880
Einen Pin haben wir noch: Nicht MR, Nicht Master Reset

0:06:55.880,0:07:00.520
Wie der Name schon sagt: Dieser ist zum zurücksetzen

0:07:00.520,0:07:07.880
Wenn wir hier kurz pulsen wird der Schieberegister wieder komplett mit Nullen gefüllt

0:07:07.880,0:07:13.160
Der Ausgang ist wie wir sehen hiervon nicht betroffen

0:07:13.160,0:07:19.960
Wenn dieser auch zurückgesetzt werden soll müssen wir zusätzlich mit STCP den Zustand auf die Ausgänge übertragen

0:07:19.960,0:07:24.720
Schauen wir uns das Ganze in der Realität an

0:07:24.720,0:07:39.520
Hier unten ist der 74HC595, ein Kondensator und ein Widerstand, welcher ^OE auf GND zieht, die Ausgänge sind also immer an

0:07:39.520,0:07:48.440
Oben sind die Eingänge – links ein Taster für DS, also den Dateneingang

0:07:48.440,0:07:53.280
Daneben ist SHCP, der Takt des Schieberegisters

0:07:53.280,0:07:56.720
Beide haben eine LED, so sehr ihr was ich drücke

0:07:56.720,0:08:00.280
Dann haben wir einen Taster für die Latch

0:08:00.280,0:08:03.160
Und einen für RESET

0:08:03.160,0:08:08.880
Zuletzt links einige LEDs. In Grün die Ausgänge Q0 bis Q7

0:08:08.880,0:08:19.180
Und unten in Rot Q7S, der Pin zum kaskadieren weiterer ICs

0:08:19.180,0:08:25.580
Das mit den Tastern sollte man wegen “Prellen” nicht machen

0:08:25.580,0:08:32.260
Prellen heißt: Beim Schließen oder öffnen wackelt der Kontakt etwas

0:08:32.260,0:08:38.140
Dieses Modell prellt recht wenig – wird zum Zeigen schon schief gehen

0:08:38.140,0:08:44.260
Erst mal das Licht abdunkeln, sonst sieht man die LEDs nicht

0:08:44.280,0:08:46.660
Wie wir sehen: Alles ist aktuell ausgeschlatet

0:08:46.660,0:08:55.160
Wenn ich jetzt DS gedrückt halte und zwei mal SHCP pulse

0:08:55.160,0:09:02.460
haben wir in den ersten Pins des Schieberegisters eine Eins, der Rest ist Null

0:09:02.460,0:09:10.400
Am Ausgang ist davon nichts zu sehen – erst wenn ich STCP drücke leuchten die gewählten LEDs auf

0:09:10.400,0:09:16.580
Das können wir weiterführen: Ich gebe noch zwei Nullen ein

0:09:16.580,0:09:21.140
Im Schieberegister steht nun also Null, Null, Eins, Eins

0:09:21.140,0:09:25.300
Und auch das können wir mit STCP am Ausgang sichtbar machen

0:09:25.300,0:09:30.540
Drücken wir die Einsen noch drei Positionen weiter

0:09:30.540,0:09:38.320
Wenn ich jetzt noch mal pulse leuchtet die Rote LED auf

0:09:38.320,0:09:46.240
Dort wird der letzte Platz des Schieberegisters ausgegeben und kann so von einem anderen IC übernommen werden

0:09:46.240,0:09:50.040
Und wie immer können wir den Inhalt des Schieberegisters auch am Ausgang anzeigen lassen

0:09:50.040,0:09:57.160
Der letzte Pin kommt also direkt von Schieberegister und ist nicht mit der Latch verbunden

0:09:57.160,0:10:06.560
Machen wir jetzt mal ein Muster rein: Immer abwechselnd an und aus

0:10:06.560,0:10:10.840
Bleibt noch ein Pin, den wir nicht genutzt haben: Reset

0:10:10.840,0:10:19.460
Da gehen wir aber noch einen Platz weiter, dann sieht man das Konzept besser

0:10:19.460,0:10:24.320
Das letzte Bit vom Schieberegister ist eins, entsprechend leuchtet die rote LED

0:10:24.320,0:10:29.960
Durch drücken von Reset wird der komplette Schieberegister auf Null gesetzt

0:10:29.960,0:10:32.980
Können wir auch sehen: Die rote LED geht aus

0:10:32.980,0:10:42.540
Der Ausgang ist davon nicht betroffen – soll der auch Null sein müssen wir nochmal STCP drücken

0:10:42.540,0:10:46.440
Ich würde sagen: Theorie und Praxis stimmen überein

0:10:46.440,0:10:51.700
Ich hoffe ihr habt jetzt verstanden wie der Chip funktioniert und ihr ihn einsetzen könnt

0:10:51.700,0:10:56.460
Und ihr habt gesehen: Die Ansteuerung ist simpel, ich konnte es mit den Händen machen

0:10:56.460,0:11:04.480
Jeder Mikrocontroller und jede Schaltung die Pins an und aus machen kann, kann den Schieberegister nutzen

0:11:04.480,0:11:16.500
Wenn also mal an Arduino, Raspberry & Co die Pins ausgehen: Das hier ist der Chip der Wahl um mehr Ausgänge zu erhalten

0:11:16.500,0:11:21.080
Bei Arduino gibts mit ShiftOut sogar einen eigenen Befehl zur Ansteuerung

0:11:21.080,0:11:25.020
Beim Raspi geht es z.B. mit wenigen Zeilen Python, lässt sich im Netz schnell finden

0:11:25.020,0:11:28.900
Also: Ran an die Steckbretter, baut euch eine Testschaltung auf

0:11:28.900,0:11:34.480
Experimentiert herum und dann dürftet ihr merken: Meistens tut er was er soll

Text Englisch

Let’s take a look at the 74HC595 shift register used to increase the number of outputs.

If you need a large amount of outputs shift registers like the 74HC595 are usually a goot choice. With only a few pins coming from your control circuit you can manage eight outputs. The clever part: The IC can be chained without using additional control pins increasing the number of outputs on and on.

0:00:12.340,0:00:15.520
Its theory-time again

0:00:15.520,0:00:17.880
we’ll take a look at a IC

0:00:17.880,0:00:28.740
the IC belongs to the 74 series, a collection of basic logic components

0:00:28.740,0:00:33.780
the ICs are produced by various vendors, model numbers may differ slightly

0:00:33.780,0:00:40.460
if the name contains 74 and the corresponding function number they are usually interchangeable

0:00:40.460,0:00:44.120
this time we take a look at the 74**595

0:00:44.120,0:00:51.660
It is described as “8-bit serial-in, serial or parallel-out shift register with output latches and 3-state output”

0:00:51.680,0:00:54.680
Let’s use the common name “shift register”

0:00:54.680,0:00:58.320
shift registers are interesting if you need a lot of outputs

0:00:58.320,0:01:03.720
usually you use e.g. the pins of a micro controller as outputs

0:01:03.720,0:01:10.000
however these are finite – if you run out this component could be a solution

0:01:10.000,0:01:16.280
the advantage: you only need a few pins to drive the circuit

0:01:16.280,0:01:21.120
and get a lot of outputs at the other side. So you can increase the number of outputs

0:01:21.120,0:01:26.960
I’ve got the large package, DIL16 with 16 pins

0:01:26.960,0:01:31.360
but there are also a lot of SMD-packages available

0:01:31.360,0:01:34.920
let’s take a look at the pin functions

0:01:34.920,0:01:38.160
GND and Vcc should be obvious: power supply

0:01:38.160,0:01:42.560
usually these ICs accept between 2.5 and 5 volts

0:01:42.560,0:01:47.480
and like every IC: If you expect pulsing loads you should add a bypass capacitor

0:01:47.500,0:01:52.320
the pins Q0 to Q7 are our outputs

0:01:52.320,0:01:54.160
So Q0 is the first output

0:01:54.160,0:01:57.380
Q1 the second an so on up to Q7, the eighth output

0:01:57.380,0:02:08.980
depending on the vendor the pin names might differ, function and position should however be identical

0:02:08.980,0:02:15.960
OE (Output Enable) controls whether the outputs are active

0:02:15.960,0:02:21.640
If the pin is not connected (LOW) the outputs are active

0:02:21.640,0:02:26.080
If you apply a HIGH level the outputs enter a high impedance mode

0:02:26.080,0:02:32.840
roughly speaking: for the rest of your circuit it looks like the shift register is no longer connected

0:02:32.840,0:02:41.880
normally (=LOW) the 595 will pull the output to GND or push to Vcc

0:02:41.880,0:02:47.080
DS and SHCP are our data inputs

0:02:47.080,0:02:51.680
it’s a classic serial connection – let’s take a look at it’s function

0:02:51.680,0:02:58.600
Let’s say the chip would contain eight boxes on a conveyor belt

0:02:58.600,0:03:06.320
DS goes to the start of the conveyor, SHCP is connected to a motor driving the belt

0:03:06.320,0:03:13.280
If we apply a one through DS it goes to a imaginary box at the start

0:03:13.280,0:03:19.440
this box is still carried by the worker and not standing on the belt yet

0:03:19.440,0:03:26.520
If we turn on SHCP, so the motor, everything moves to the right. The one is now located at the first box on the belt

0:03:26.520,0:03:31.160
The box at the end is recycled and vanishes

0:03:31.160,0:03:42.680
The conveyor has a latching mechanism and will only move one position regardless how long the power is on

0:03:42.680,0:03:51.600
we can repeat the procedure as we like – let’s add another zero

0:03:51.600,0:03:58.240
so we can add new ones and zeros as we like and add them to this shift register

0:03:58.240,0:04:05.640
what happens if the one we added first reaches the end of the belt?

0:04:05.640,0:04:09.600
usually it should just vanish, right?

0:04:09.600,0:04:15.320
but we still got Q7S

0:04:15.320,0:04:21.920
with this pin we can cascade, or chain, multiple of these ICs

0:04:21.920,0:04:27.960
we connect Q7S with DS of the next IC

0:04:27.960,0:04:31.800
The clock “SHCP” is connected to all chips in parallel

0:04:31.800,0:04:38.320
if we now got all boxes filles and a one in the rightmost position

0:04:38.320,0:04:48.040
and add another one at the beginning everything moves to the right as expected

0:04:48.040,0:05:05.320
but the right bulb doesn’t just vanish but is transfered to the next IC using Q7S

0:05:05.320,0:05:13.320
and since the motor is active this one will now be stored in the first position of the second chip

0:05:13.320,0:05:23.160
with this we can chain infinite of these ICs using the same control pins of our micro controller

0:05:23.160,0:05:30.800
the practical limit is usually time – filling more boxes takes more time

0:05:30.800,0:05:36.520
understood data input? Fine, lets move on to the “latch”

0:05:36.520,0:05:41.400
this is related to the pin STCP (STorage Clock Pin)

0:05:41.400,0:05:51.840
Reason: If the boxes where directly connected to the outputs every new bit would change all outputs

0:05:51.840,0:05:58.960
we wouldn’t be able to say: “output four is high, everything else low”

0:05:58.960,0:06:05.120
we would have to add a one and fill up zeros to the left until we reach the fourth position

0:06:05.120,0:06:10.600
and this moving one should not be visible on the output – this is where the latch comes in

0:06:10.600,0:06:17.680
lets shrink our visualization and add another row of boxes which are connected to the output

0:06:17.680,0:06:28.120
only after STCP is pulsed the lower boxes copy the current state of our belt

0:06:28.120,0:06:35.200
now the outputs Q0,2,4,6 and Q0 of the second IC are turned on

0:06:35.200,0:06:43.840
if we now add another bit the belt will still move to the right, the outputs however will not change

0:06:43.840,0:06:50.360
only if we use STCP to signalize “please adjust the outputs to the current state” we’ll see the new data on our outputs

0:06:50.360,0:06:55.880
we still have one pin to go: no MR, not master reset

0:06:55.880,0:07:00.520
as the name implies: it is used to reset the logic

0:07:00.520,0:07:07.880
if we pulse this pin LOW our shift register well be filled with zeros

0:07:07.880,0:07:13.160
as we see the output is not affectd

0:07:13.160,0:07:19.960
should this also be reset we’ll need to pulse STCP to apply the changes to our output pins

0:07:19.960,0:07:24.720
let’s take a look at this in practice

0:07:24.720,0:07:39.520
at the bottom board there is a 74HC595, a bypass capacitor and a resistor pulling ^OE to GND so the outputs are always active

0:07:39.520,0:07:48.440
at the top we’ll find our inputs – at the left a push button for DS, the data input

0:07:48.440,0:07:53.280
next up there is SHCP, the clock for the shift register

0:07:53.280,0:07:56.720
both got LEDs so you can see what buttons I am pressing

0:07:56.720,0:08:00.280
then we’ve got a button for the latch

0:08:00.280,0:08:03.160
and another one for reset

0:08:03.160,0:08:08.880
on the left there are a lot of LEDs. the green ones representing the outputs Q0 to Q7

0:08:08.880,0:08:19.180
and at the bottom in red Q7S, the pin used to chain additional ICs

0:08:19.180,0:08:25.580
The push buttons are bad practice due to “contact bounce”

0:08:25.580,0:08:32.260
meaning: switches usually do not just close when pressed but their mechanic will jump a bit arround

0:08:32.260,0:08:38.140
this type got a fairly clean switching – it will work out for this demonstration

0:08:38.140,0:08:44.260
firstly lets dim the lights so the LEDs can be seen more easily

0:08:44.280,0:08:46.660
we see: everything is turned off at the moment

0:08:46.660,0:08:55.160
if I now hold DS and apply two pulses to SHCP

0:08:55.160,0:09:02.460
we get ones in the first positions of the shift register

0:09:02.460,0:09:10.400
however we can’t see anything on the output until I press STCP, now the corresponding LEDs light up

0:09:10.400,0:09:16.580
lets add two zeros

0:09:16.580,0:09:21.140
so the register now reads zero, zero, one, one

0:09:21.140,0:09:25.300
and again we can use STCP to make the changes visible at the output

0:09:25.300,0:09:30.540
lets shit three more positions down

0:09:30.540,0:09:38.320
if i now pulse for another time the red LED will turn on

0:09:38.320,0:09:46.240
this output is connected to the last position of the shift register and can be used by the following IC

0:09:46.240,0:09:50.040
as always we can apply the contents of the shift register to our outputs

0:09:50.040,0:09:57.160
so the last pin is directly controlled by the shift register and not using the latch

0:09:57.160,0:10:06.560
let’s load a pattern: alternating ones and zeros

0:10:06.560,0:10:10.840
and let’s look at the last pin: reset

0:10:10.840,0:10:19.460
I’ll shift the pattern one position down, this will we better to illustrate the reset

0:10:19.460,0:10:24.320
the last bit of the shift register is now one, as such the red LED is illuminated

0:10:24.320,0:10:29.960
if I now press reset the shift register is filled with zeros

0:10:29.960,0:10:32.980
We can see this since the red LED turns off

0:10:32.980,0:10:42.540
the output is not affected – we have to pulse STCP to get these also to zeros

0:10:42.540,0:10:46.440
I would conclude: theroy and reallity seem to match

0:10:46.440,0:10:51.700
I hope you understood how the chip operates and how to use it in your own designs

0:10:51.700,0:10:56.460
As you could see: I operated the input using my hands, it’s really simple

0:10:56.460,0:11:04.480
Every micro controller or other circuit able to apply high and low levels to pins can use this IC

0:11:04.480,0:11:16.500
so if your Arduino, Raspberry Pi or whatever doesn’t provide enough pins: This chip is the right choice to get additional outputs.

0:11:16.500,0:11:21.080
For Arduino there is even a dedicated command “ShiftOut” to control these ICs

0:11:21.080,0:11:25.020
For the Raspi you could use e.G. a few lines of python available online

0:11:25.020,0:11:28.900
So: take out your breadboards, build a sample circuit

0:11:28.900,0:11:34.480
experiment and I guess you’ll see: Usually it does what it should do

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.