RETRO-ICs / SCHIEBEREGISTER

MM74HC165: acht Schalter mit drei Leitungen lesen

Einem Mikrocontroller gehen die Pins lange vor den Schaltern aus. Ein Schieberegister mit parallelem Eingang und seriellem Ausgang tauscht Pins gegen Zeit: acht Eingänge werden gleichzeitig übernommen und danach über eine einzige Leitung herausgetaktet.

Was ein Schieberegister wirklich tut

Ein Schieberegister ist eine Kette von Flipflops. Jede Taktflanke kopiert den Wert eines Flipflops in das nächste, wie eine Eimerkette. Der MM74HC165 hat acht solche Stufen, QA bis QH, und schiebt Daten von QA in Richtung QH.

Zum Parallel-Eingangs-Register wird er durch den zweiten Weg, Daten hineinzubekommen. Statt acht Taktflanken abzuwarten, kann der Baustein einen Wert gleichzeitig in alle acht Stufen laden, direkt von acht Eingangspins. Das ist der Ladevorgang und der eigentliche Zweck des Bausteins: Sie frieren acht Signale in einem Augenblick ein und lesen sie in Ruhe aus.

Acht Schaltereingänge A bis H an den Pins 11, 12, 13, 14, 3, 4, 5 und 6 führen zu einem MM74HC165; SHIFT/LOAD an Pin 1, CLOCK an Pin 2 und CLOCK INHIBIT an Pin 15 steuern ihn, und der serielle Ausgang QH an Pin 9 geht zu einem Mikrocontroller, erstes Bit H und letztes Bit A.
Prinzipdarstellung, kein fertiger Schaltplan. Abblockkondensator, Pull-Widerstände und Signalaufbereitung sind nicht gezeichnet.

Die drei Steuerpins

SHIFT/LOAD (Pin 1) wählt die Betriebsart. Bleibt er high, schiebt der Baustein mit jeder Taktflanke. Wird er low gezogen, werden die acht parallelen Eingänge direkt in das Register geladen. Das Datenblatt sagt ausdrücklich, dass dieses Laden unabhängig vom Zustand des Takts erfolgt – es ist asynchron, muss also mit nichts synchronisiert werden.

CLOCK (Pin 2) besorgt das Schieben. Die Datenübernahme erfolgt an der steigenden Flanke, also beim Übergang von Low nach High.

CLOCK INHIBIT (Pin 15) ist ein Tor vor dem Takt. Intern führen beide Taktpins auf ein NOR-Gatter mit zwei Eingängen; hält man einen davon auf High, steht das Register still. Wer nur eine Taktquelle verwendet, legt CLOCK INHIBIT auf Masse und vergisst ihn.

Ein vollständiger Lesevorgang, Schritt für Schritt

VCC liegt an Pin 16, Masse an Pin 8, und ein 100 nF-Kondensator gehört nahe am IC dazwischen. Acht Schalter kommen an A–H (Pins 11, 12, 13, 14, 3, 4, 5 und 6), jeder mit einem Widerstand auf einen definierten Pegel, damit kein Eingang jemals offen bleibt.

  1. Übernehmen. Mit CLOCK low und CLOCK INHIBIT low SHIFT/LOAD kurz auf Low und wieder auf High ziehen. Alle acht Schalterzustände stehen nun im Register. Ab diesem Moment dürfen die Schalter prellen oder sich ändern – gelesen wird eine Momentaufnahme.
  2. Das erste Bit ohne Takt lesen. QH (Pin 9) trägt bereits den Wert der achten Stufe, der vom Eingang H (Pin 6) stammt. Genau hier liegt der häufigste Fehler: Wer zuerst taktet und dann liest, verliert Bit H und liest ein Bit, das es nie gab.
  3. Siebenmal schieben. Jede steigende Flanke an CLOCK verschiebt die Kette eine Position Richtung QH; nach der ersten Flanke zeigt QH also G, dann F, E, D, C, B und zuletzt A (Pin 11). Zusammen acht Bit: eines geschenkt, sieben getaktet.
  4. Wiederholen. Für die nächste Momentaufnahme SHIFT/LOAD erneut kurz auf Low. Das Register muss nicht geleert werden; der Ladevorgang überschreibt alle acht Stufen auf einmal.

Das Byte kommt also H zuerst, A zuletzt – höchstwertiges Bit zuerst, wenn man H als Bit 7 bezeichnet. Wenn die Software die Schalter spiegelverkehrt sieht, liegt es fast immer daran.

Auslesen per SPI

Der Ablauf oben ist genau ein SPI-Lesevorgang mit Taktpolarität 0 und Phase 0; die meisten Mikrocontroller erledigen ihn daher in Hardware: CLOCK an SCK, QH an MISO, SHIFT/LOAD an einen freien Ausgangspin. Ein übertragenes Byte, acht gelesene Schalter. Zum Baustein hin wird nie etwas gesendet, MOSI bleibt also unbeschaltet.

Der Takt sollte im Rahmen bleiben: Das Datenblatt nennt eine typische Verzögerung von Takt zu Q von 20 ns, und die garantierten Grenzwerte sind für Versorgungsspannungen von 2 V, 4,5 V und 6 V angegeben. Bei 5 V sind einige Megahertz unspektakulär; die Grenze setzt meist der Aufbau, nicht der Baustein.

Zwei Register in Kette für 16 Eingänge

Pin 10 ist SERIAL INPUT. Er speist die erste Stufe QA – das vom Ausgang am weitesten entfernte Kettenende. Verbinden Sie den QH-Ausgang (Pin 9) eines Bausteins mit SERIAL INPUT (Pin 10) des nächsten, teilen Sie SHIFT/LOAD und CLOCK, und Sie haben ein 16-Bit-Register, das mit sechzehn Taktflanken über eine Leitung gelesen wird. Ein dritter Baustein ergibt 24 Eingänge; bezahlt wird ausschließlich mit Zeit.

Pin 7 ist der komplementäre Ausgang /QH – dieselben seriellen Daten, invertiert. Er ist nützlich, wenn die empfangende Logik die umgekehrte Polarität erwartet, und darf sonst unbeschaltet bleiben.

Die maßgeblichen Werte

MM74HC165Wert
Versorgungsspannung2–6 V
Betriebstemperatur−40 bis +85 °C
Verzögerung Takt zu Qtypisch 20 ns
Eingangsstrommax. 1 µA
Ruhestrommax. 80 µA (74HC-Serie)
AusgangstreiberfähigkeitFan-out von 10 LS-TTL-Lasten
High-Pegel am Eingang, VCC = 4,5 Vmin. 3,15 V
Low-Pegel am Eingang, VCC = 4,5 Vmax. 1,35 V
Max. Anstiegs-/Abfallzeit am Eingang, VCC = 4,5 V500 ns

Vier typische Stolperfallen

Ein 3,3-V-Mikrocontroller kann diesen Baustein bei 5 V nicht zuverlässig ansteuern. Bei 4,5 V garantiert das Datenblatt ein High erst ab 3,15 V, bei 5 V sind rund 3,5 V nötig. Sauber ist, den ’165 ebenfalls mit 3,3 V zu betreiben – das liegt in seinem Bereich von 2–6 V – oder die Steuerleitungen zu übersetzen, siehe den Leitfaden zur Pegelumsetzung mit dem SN74AHCT08. Sein serieller Ausgang in einen 3,3-V-Eingang braucht die Gegenrichtung; Versorgungen also nicht beiläufig mischen.

Niemals einen parallelen Eingang offen lassen. Ein unbenutzter Pin A–H gehört an VCC oder Masse. Ein Schalter allein genügt nicht: Er definiert den Pegel nur in einer seiner beiden Stellungen, jeder Schalter braucht also einen Pull-up- oder Pull-down-Widerstand.

CLOCK INHIBIT nur ändern, solange CLOCK high ist. Weil beide Taktpins auf dasselbe NOR-Gatter führen, wirkt eine Änderung an CLOCK INHIBIT bei niedrigem CLOCK auf das Register wie eine Taktflanke und verschiebt die Daten unbemerkt um eine Position.

Mechanische Schalter prellen. Das Register übernimmt ein Prellen bereitwillig als echten Zustandswechsel. Entweder langsam abtasten und aufeinanderfolgende Messungen in Software vergleichen, oder die Flanken in Hardware mit einem Schmitt-Trigger-Eingang säubern, etwa dem 74AC14 Hex-Schmitt-Trigger-Inverter.

Einordnung zwischen anderen Registern

Der Baustein ist bewusst einseitig: Eingänge hinein, seriell hinaus. Sollen sich dagegen mehrere Bausteine beim Treiben eines gemeinsamen Busses abwechseln, braucht es 3-State-Ausgänge wie im Leitfaden zum MC74HC173, dem 4-Bit-3-State-Register. Muss ein ganzes Byte in beide Richtungen zwischen CPU und Bus wandern, ist das Aufgabe eines Transceivers – siehe den 74HC245-Leitfaden. Und wenn die eben eingeschobenen acht Bit eine Ziffer anzeigen sollen, übernimmt der MC74HC4511-Leitfaden zur 7-Segment-Anzeige.

In einer busbasierten Maschine wie einem 6502-System ist ein Schieberegister meist die billige Alternative dazu, noch eine Adresse zu dekodieren: kein Chip-Select, kein Zeitfenster, nur drei gewöhnliche Ausgangspins. Der 74HC138-Leitfaden zur Adressdekodierung beschreibt den anderen Weg, und der 6502-Teileleitfaden ordnet beides ein.

Die genaue vorrätige Variante

MM74HC165MX im SOIC-16 in Draufsicht: Pins 1 bis 8 sind SHIFT/LOAD, CLOCK, E, F, G, H, invertiertes QH und Masse; Pins 16 bis 9 sind VCC, CLOCK INHIBIT, D, C, B, A, SERIAL INPUT und QH.
Draufsicht, nach dem Anschlussbild von Fairchild für den MM74HC165 neu gezeichnet. Dieselbe Pinbelegung gilt für DIP, SOIC, SOP und TSSOP.

iMania führt den MM74HC165MX. In Fairchilds Bestellcode steht M für das Gehäuse M16A, einen schmalen 16-poligen SOIC nach JEDEC MS-012 (0,150″-Körper), und das angehängte X kennzeichnet die Tape/Reel-Verpackung. Das Rollenetikett trägt zusätzlich den Kundencode 099.200.052; der Hersteller dieser konkreten Rolle wurde nicht gesondert verifiziert, vergleichen Sie daher vor dem Serieneinsatz die Beschriftung des Bauteils selbst.

Es handelt sich um ein SMD-Bauteil mit 1,27 mm Rastermaß. Von Hand lötbar ist es mit üblichem Werkzeug, für Steckbrettarbeit brauchen Sie jedoch eine SOIC-16-auf-DIP-Adapterplatine. Der bedrahtete MM74HC165 im PDIP-16 ist derselbe Chip im Gehäuse N16E; das ist ein anderer Bestellcode und nicht Teil dieser Charge.

Zur Produktseite des MM74HC165MX und zur Verfügbarkeit.

Originaldatenblatt: Fairchild Semiconductor MM74HC165 Parallel-in/Serial-out 8-Bit Shift Register, DS005316, September 1983, überarbeitet Februar 1999. Pinnummern, Steuerverhalten, Gehäusecodes und alle obigen Werte stammen daraus.