TPS steuert Schieberegister            

von  Martin Hülse                 
Elektronik-Labor  Literatur  Projekte  Lernpakete  TPS




Ziel war es ein Schieberegister ("serial-in parallel out") durch die Tastenprogrammierbare Steuerung (TPS) anzusteuern. Bei dem verwendeten Schieberegister handelt es sich um den Typ SN74HC164N.

Zur Demonstration des Schieberegisters werden drei Signalquellen benötigt: 
Erstens, ein konstantes High-Signal als Eingang für das asynchrone "clear"-Signal (CLR) des Schieberegisters.
Zweitens, ein periodisches Signal. Dieses determiniert den Takt (CLK) der Signalverarbeitung im Schieberegister.
Drittens, ein Signal, welches als serielle Eingabe des Schieberegisters dient. Letztes, muss also  beliebig zwischen High und Low wechseln können.

Die TPS stellt diese drei Signalkanäle zur Verfügung. Die beliebige Umschaltung des dritten Signals von wird durch ein Tastendruck der TPS-Einheit gesteuert.

Zum Aufbau der TPS-Einheit wurde das Conrad Lernpaket "Mikrocontroller - verstehen und anwenden" verwendet. Der Aufbau erfolgt auf einem Steckboard und kann somit leicht mit dem Schieberegister verschaltet werden. Die Schieberegistereinheit mit LEDs wurde auf einem zweiten Steckboard verschaltet. Folgende Bauelemente wurden für das Schieberegister verwendet:
- SN74HC164N
- 8 x LEDs
- 1 x 220 Ohm, Widerstand
- Klingeldraht
- Steckboard

Der Aufbau der TPS entspricht dem Standardaufbau mit Tastschaltern, ganz wie im Lernpaket beschrieben (Abb. 1 und 2 im Handbuch des Lernpakets).

Schieberegister-Einheit

Im Schema oben ist zum einen das Schieberegister (SN74HC164N) mit den entsprechenden Signaleingängen festgehalten. Zweitens ist die Verschaltung des Schieberegisters mit übrigen Bauteilen (LEDs und Widerstand) aufgezeigt. Die Ausgänge mit der Beschriftung A1, A2 und A4 verweisen direkt auf die Verschaltung mit dem TPS. A1, A2 und A4 sind die entsprechende digitalen Ausgänge der TPS und werden also direkt mit diesen Eingängen des Schieberegisters verbunden.

Der TPS Ausgang A1 muss also das periodische Taktsignal liefern, der TPS Ausgang A2 das konstante High-Signal. Während der TPS Ausgang A4 die seriellen Dateneingangssignal des Schieberegisters bereitstellt.


Programmierung des TPS

Die Programmierung der TPS zur Erzeugung des konstanten und periodischen Signals der Ausgänge A1 und A2 ist recht einfach. Die Herausforderung für mich war jedoch Signal A4. Per Tastendruck muss dieses Signal negiert werden ohne die Zustände der anderen Signal A1 und A3 zu verändern.

Beim TPS können die Werte der Signalausgänge A1 bis A4 nicht direkt abgefragt werden. Der Zustand dieser Ausgangssignale muss also erstens, immer in einem Register A  gespeichert bleiben; und zweitens, muss ein einzelnes Bit in diesem Register A negiert werden können. Eine bit-weise Manipulation der Register ist mit dem Befehlssatz der TPS jedoch nicht direkt möglich.

Die bit-weise Manipulation des Registerinhaltes A wurde per logischer Verknüpfungen mit einer fixen Bit-Maske umgesetzt. Um dies zu demonstrieren, soll zuerst das folgende TPS-Programm "Bit-weise per Tastendruck" vorgestellt werden

Programm: Bit-weise Manipulation per Tastendruck

Das Verhalten dieses Programms lässt sich folgender Massen beschreiben: Linke und rechte LED der TPS (Standardaufbau mit Tastschaltern) werden individuell durch die Schalter S1 bzw. S2 an- und ausgeschaltet. Dabei bleibt der Zustand der restlichen LEDs erhalten.

Das Programm ist durch eine Hauptprogramm inklusive zweier Sub-Routinen umgesetzt.

Hauptprogramm mit Endlosschleife:

0x00: 40; A = 0000
0x01: 51; B = A
0x02: 52; C = A
0x03: 40; A = 0000
0x04: 51; B = A
0x05: 82; page = 2
0x06: D0; call (2)0 (Sub-Routine für Tastschalter S2)
0x07: 83; page = 3
0x08: D0; call (3)0
0x09: 62; A = C
0x0A: 77; A AND B -> A
0x0B: 7A; NOT A -> A
0x0C: 53; D = A
0x0D: 62; A = C
0x0E: 78; A OR B -> A
0x0F: 51; B = A
0x10: 63; A = D
0x11: 77; A AND B -> A
0x12: 54; Dout = A
0x13: 80; page = 0
0x14: 92; jump (0)2


Sub-Routine für Tastschalter S2:
0x20: CD; S2 = 0?
0x21: E0; return (zurück zum Hauptprogramm)
0x22: 20; wait 1 msec
0x23: CF; S2 = 1?
0x24: 32; jump-2
0x25: 41; A = 0001 (Lade die S2 repräsentierende Bit-Maske, rechte LED)
0x26: 51; B = A (speichere Bit-Maske in Register B)
0x27: E0; return (zurueck zum Hauptprogramm)


Sub-Routine für Tastschalter S1:
0x30: CC; S1 = 0?
0x31: E0; return (zurück zum Hauptprogramm)
0x32: 20; wait 1 msec
0x33: CE; S1 = 1?
0x34: 32; jump-2
0x35: 48; A = 1000 (Lade die S1 repräsentierende Bit-Maske, linke LED)
0x36: 51; B = A (speichere Bit-Maske in Register B)
0x37: E0; return (zurück zum Hauptprogramm)


Das Hauptprogramm läuft in einer Endlosschleife und ruft immer die Sub-Routine für die Abfrage der Taster S1 (Adresse 0x08) und S2 (Adresse 0x06) auf. Falls die Taste S1 bzw. S2 gedrückt und wieder losgelassen ist, wird die entsprechende Bit-Maske in das Register B geladen. Bei Druck des Tasters S1 wird die Maske 1000 geladen (Adresse 0x35 und 0x36). Für Taster S2 ist es die Maske 0001 (Adresse 0x25 und 0x26).

Ist kein Taster gedrückt, dann bleibt im Register B die Standardmaske 0000 gespeichert (siehe Adresse 0x03 und 0x04). Mit dieser Maske werden keine Bits verändert.

Nach dem Aufruf der Sub-Routinen für die Tasterabfrage, wird der Inhalt des Registers A mit dem Inhalt von Register B (aktuelle Bit-Maske) mittels logischen Operationen verarbeitet (beginnend bei Adresse 0x0A). Nach dieser Verarbeitung wird der neue Inhalt des Registers A auf die digitalen Ausgänge geschrieben (Adresse 0x12) und wieder zurück auf Zeile 0x02 gesprungen.

In Zeile 0x00 wird das initiale Bit-Muster definiert, welches direkt nach dem Start von der TPS angezeigt wird. Hier kann jedes beliebiges Muster eingetragen werden.


Programm für die Schieberegisteransteuerung

Beim Programm zur Ansteuerung des Schieberegisters ist nun die Sub-Routine für Taster S1 durch eine Routine ersetzt, welche immer die Bit-Maske 0100 in Register B speichert (ab Adresse 0x30). Auf diese Weise wird das entsprechende Bit im Register A bei jedem Schleifendurchlauf negiert. Dies erzeugt das periodische Signal für die Taktsteuerung des Schieberegisters.

Bei jedem Durchlauf der Endlosschleife im Hauptprogramm wird die Befehlsausführung für 200 Millisekunden gestoppt (Adresse 0x13). Dies ergibt eine Taktrate (ca. 2,5 Hz) bei der sich die Wirkungsweise des Schieberegisters gut demonstrieren lässt.

Das benötigte konstante High-Signal wird durch die Definition des initialen Bit-Musters 1000 (Adresse 0x00) erzeugt. Damit ist der Linke Ausgang immer auf Wert High gesetzt.

Die serielle Signal-Eingabe wird durch den Tastenschalter S2 definiert. Bei entsprechenden Tastendruck wird die Bit-Maske 0001 in Register B gespeichert (Adresse 0x25 und folgende).


Hauptprogramm mit Endlosschleife:
0x00: 48; A = 1000
0x01: 51; B = A
0x02: 52; C = A
0x03: 40; A = 0000
0x04: 51; B = A
0x05: 82; page = 2
0x06: D0; call (2)0
0x07: 83; page = 3
0x08: D0; call (3)0
0x09: 62; A = C
0x0A: 77; A AND B -> A
0x0B: 7A; NOT A -> A
0x0C: 53; D = A
0x0D: 62; A = C
0x0E: 78; A OR B -> A
0x0F: 51; B = A
0x10: 63; A = D
0x11: 77; A AND B -> A
0x12: 54; Dout A
0x13: 27; wait 200 msec
0x14: 80; page = 0
0x15: 92; jump (0)2


Sub-Routine für Tastschalter S2:
0x20: CD; S2 = 0?
0x21: E0; return
0x22: 20; wait 1msec
0x23: CF; S2 = 1?
0x24: 32; jump-2
0x25: 41; A = 0001
0x26: 51; B = A
0x27: E0; return


Sub-Routine für periodisches Signal:
0x30: 44; A = 0100
0x31: 78; A AND B -> B
0x32: 51; B = A
0x33: E0; return;



Demonstration

Ein im Internet veröffentlichtes Video (https://www.youtube.com/watch?v=abLRbk8eYoE) demonstriert die Funktionsweise der finalen Schaltung. Die grünen LEDs zeigen die Ausgabewerte Q_A bis Q_H (von rechts nach links) des Schieberegisters an; die roten LEDs die Ausgänge A1 bis A4 (von links nach rechts).

Sobald die TPS angeschaltet ist, ist A1 konstant auf High während A2 periodisch blinkt. Alle anderen Ausgänge sind Low. Durch Tastendruck kann nun der Wert von A4 auf High gesetzt werden bzw. wieder zurück auf Low. Wie im Video zu sehen, werden  High- und Low-Signale taktweise in das Schieberegister eingelesen und von diesen weitergeschoben. Bleibt A4 auf High, werden permanent die Signale High ins Schieberegister gelesen, so dass nach einigen Zyklen alle grünen LED leuchten (ab Sekunde 22 im Video). Wird dann A4 auf Low gesetzt (Sekunde 29), dann werden entsprechend die Low-Signale in das Schieberegister gelesen. Nach 8 Zyklen sind  alle LEDs wieder dunkel.

Ein Reset der TPS (Sekunde 41) setzt auch alle Ausgänge des Schieberegisters auf den Wert Low. Mit dem Rest wird Signal A1 und damit ebenfalls der CLR-Eingang des Schieberegisters auf Low gesetzt. Dies hat den Reset des Schieberegisters zur Folge.


Elektronik-Labor  Literatur  Projekte  Lernpakete  TPS