Vom Transistor zur CPU
Hier findest du Aufgaben, Lösungen und das Skript zum Elektronik-/Digitaltechnikkurs im Ergänzungsfach Informatik.
Übersicht
Ziel des Kurses ist, die nötigen Grundlagen zu erarbeiten, um die Funktionsweise der 8-Bit-CPU von Ben Eater zu verstehn. Folgendes Bild zeigt das Blockschaltbild, also eine vereinfachte Darstellung, dieser 8-Bit-CPU:
Skript
Aufgaben
Woche 8 – Zähler und Decoder, CPU programmieren
Aufgabe 1
Baue in EveryCircuit einen 4-Bit Zähler. Schliese an die vier Ausgänge jeweils LEDs mit Vorwiderständen an. Als Clk-Eingang kannst du eine normale Logic-Source verwenden, die du dann manuell ein- und ausschaltest – oder du verwendest gleich ein „Logic train“, also quasi ein Clock-Modul, das automatisch zwischen 0 und 1 wechselt.
Aufgabe 2
Speichere die Schaltung aus Aufgabe 1 unter neuem Namen und ändere sie: Schliesse anstelle der 4 LEDs eine 7-Segment-Anzeige an. Dazu musst du erst einen „Binäry to 7-Segment Decoder“ dazwischenschalten.
Aufgabe 3
Schreibe ein Programm für die 8-Bit CPU. Falls dir nichts Anderes einfällt, versuche das hier:
Die CPU soll in 7er-Schritten von 0 bis 77 Zählen, dann in 11-er-Schritten runter bis 0, dann wieder von vorne beginnen.
Tipp: Um zu überprüfen, ob das eben errechnete Resultat (nach Addition oder Subtraktion) einem bestimmten Zielwert entspricht, kannst du wie folgt vorgehen:
- Subtrahiere Zielwert
- Frage, ob Resultat 0 (Jump Zero); falls ja, sringe nach …
- Addiere Zielwert (damit das Resultat wieder gleich ist wie vor der Überprüfung)
Nächste Woche: PRÜFUNG!
Woche 7 – Rechnen im Binärsystem; Halbaddierer, Volladdierer und Subtrahierer
Aufgabe 1 – Binär, Dezimal und Hexadezimal
Löse folgende Aufgaben ohne Taschenrechner oder Computer. Kontrolliere mit dem Taschenrechner, falls du unsicher bist. Schaue evtl. dieses Video zum Verständnis des Hexadezimalsystems.
- Schreibe folgende Zahlen binär: 7, 37, 77, 255
- Schreibe folgende vier Zahlen dezimal: 1010, 1111’0000, A7, FF
- Schreibe folgende vier Zahlen hexadezimal: 7, 15, 172, 220
Aufgabe 2 – Binäre Addition
Addiere folgende Zahlenpaare binär. Kontrolliere die Lösungen, indem du in dezimal umwandelst und nachrechnest..
- 11 und 10
- 101 und 110
- 0110 und 1001
- 1111 und 1111
Aufgabe 3 – Binäre Uhr
Aufgabe 4 – Binäre Subtraktion mit 2er-Komplement-Darstellung
- Subtrahiere schriftlich im Binärsystem in der 2er-Komplement-Darstellung. Verwende für jede Zahl 8 Stellen (stelle jede Zahl als 8-Bit-Wert dar)! Auch das Resultat hat 8 Stellen, nicht mehr und nicht weniger.
- Kontrolliere das Resultat: Wenn es positiv ist, wandle es in Dezimal um; wenn es negativ ist, bilde davon das 2-er-Komplement, wandle es anschliessend in Dezimal um und setze ein Minus-Zeichen davor.
- 42 - 33
- -29 - 11
- 129 - 130
Aufgabe 5 – Halbaddierer in Everycircuit
Wenn du bloss zwei 1-Bit-Zahlen addieren musst, reicht diese Schaltung aus:
- Baue diese Halbaddierer-Schalung in EveryCircuit und teste sie: Am besten verbindest du mit jedem Ausgang eine LED (mit Vorwiderstand), so siehst du sofort, ob der Ausgang 1 oder 0 ist.=
Aufgabe 6 – Volladdierer in Everycircuit
Wenn du nun Zahlen addieren willst, die aus mehr als nur einem Bit bestehen, musst du mehrere Addier-Schaltungen zusammenschliessen können. Das heisst, der Ausgang für den Übertrag (Carry out) muss beim nächsten Addierer auf einen entsprechenden Übertrags-Eingang (Carry in) geführt werden. Der Halbaddierer hat keinenen solchen Eingang. Deshalb brauchen wir hier einen Volladdierer:
- Baue diese Volladdierer-Schalung in EveryCircuit (inkl. LEDs an den beiden Ausgängen) und teste sie anhand der Wahrheitstabelle im Skript auf Seite 23
- Verbinde zwei oder drei Volladdiererschaltungen zu einer 2 bzw. 3-Bit-Addierschaltung. Teste sie anhand einiger Beispiele.
Aufgabe 7 – 2-Bit-Addier-Subtrahier-Schaltung in Everycircuit
Baue eine Schaltung mit folgenden Ein- und Ausgägnen:
- 2 Eingägne für 2-Bit-Operand A
- 2 Eingänge für 2-Bit-Operand B
- 1 Eingang für Modus: 0 = Addieren; 1 = Subtrahieren
- 3 Ausägnge für 3-Bit-Resultat
Schaue im Skript nach, falls nötig. Teste die Schaltung und beachte dabei: Ein negatives Resultat wird in der 2er-Komplement-Darstellung angzeigt. Umwandeln von 2er-Komplement- in normale Darstellung (und umgekehrt): Invertieren und +1 addieren.
Hausaufgaben auf nächste Woche
- Lese das Skript bis und mit Seite 27.
- Löse die Aufgaben 4 bis 7.
Woche 5 und 6 – Schieberegister, Tri-State und Datenbus
Aufgabe 1
Stelle Aufgabe 3 von letzter Woche fertig: Baue auf dem Breadboard ein Schieberegister mit dem Register 74LS173.
Aufgabe 2
Baut gemeinsam die „kleine Datenbus-Anwendung“ aus dem Skript (Seite 21) nach. Clock und Counter/Decoder werden bereitgestellt. IC1 bis IC8 müssen so mit Daten gefüllt werden, dass das im Skript gezeigte Muster (Lauflicht mit drei leuchtenden LEDs) erscheint.
Hausaufgaben
- Lese das Skript bis und mit Seite 21.
Woche 4 – Logikschaltungen, Flipflops und Register
Aufgabe 1
Karl baut eine Anlage, die seine Blumen automatisch tränkt, die Steuerung soll wie folgt funktionieren:
- Die Wasserpumpe pumpt Wasser zu den Blumen (Ausgang P = 1), wenn mindestens einer der beiden Feuchtigkeitssensoren zu wenig Feuchtigkeit meldet (Eingänge S1, S2 = 0). Wann immer der Wasserstand im Wassertank zu niedrig ist (Eingang Wa = 0), pumpt die Wasserpumpe nicht.
- Die Heizung erwärmt das Wasser (Ausgang H = 1), wenn beide Feuchtigkeitssensoren ausreichend Feuchtigkeit melden (Eingänge S1, S2 = 1). Die Heizung läuft nur, wenn der Wasserstand im Wassertank hoch genug ist (Eingang Wa = 1).
- Zeichne die Wahrheitstabelle für die Steuerung: links die Spalten für die Eingänge, rechts die für die Ausgänge.
- Notiere für beide Ausgänge P und H die Funktionsgleichungen in der Schreibweise der booleschen Algebra.
- Schreibe die Gleichung für Ausgang P mit den Gesetzen von De Morgan so um, dass sie keine OR- Verknüpfungen mehr enthält.
- Zeichne nach deiner neuen Funktionsgleichung die Schaltung für Ausgang P. Überprüfe mit der Wahrheitstabelle, ob die Schaltung richtig funktioniert.
- Baue die Schaltung evtl. auf Breadboards oder in Everycircuit auf.
Aufgabe 2
Baue ein D-Flipflop aus NOR-, NOT- und AND-Gates in Everycircuit, teste es und zeige es einer Lehrperson.
Aufgabe 3
- Lese im Skript die Abschnitte „Serielle Datenübertragung“, „Schieberegister (shift registers)“ und „Eine kleine Schieberegister-Anwendung“.
- Baue auf dem Breadboard ein Schieberegister mit dem Register 74LS173, teste es und zeige es der Lehrperson.
- Mit zwei Tasten für Clk und Data-In füllst du das Regiser.
- Die übrigen Eingänge werden fix auf LOW/HIGH geschaltet.
- Die Ausgänge werden auf LEDs (mit Vorwiderständen zwischen 100 und 330 Ω) geführt.
Aufgabe 4 (für die Schnellen)
- Erweitere deine Schaltung aus Aufgabe 3 um ein zweites Register und verbinde eine 7-Segment-Anzeige mit den Ausgängen. Fülle das Register mit Daten, sodass die 7-Segment-Anzeige eine Zahl anzeigt. Führe die Schaltung der Lehrperson vor.
Hausaufgaben
- Lese das Skript bis und mit Seite 18.
- Baue in Everycircuit ein 7-Bit-Schieberegister aus D-Flipflops. Daran schliesst du eine 7-Segemtanzeige an. Starte die Simulation und fülle das Schieberegister so, dass die 7-Segemtanzeige eine 5 anzeigt.
Woche 3 – Little Man vs 8-Bit-CPU, Logic Gates, Boolsche Algebra
Aufgabe 1
Programmiere den Little Man Computer so, dass er eine Zahlenreihe bis zu einer bestimmten Zahl hochzählt und dann wieder von vorne beginnt. Endlos. Beachte folgende Hinweise/Bedingungen:
- Unter Adresse 10 wird der Start-Wert gespeichert, zum Beispiel 0
- Unter Adresse 11 wird der Summand gespeichert, zum Beispiel 7
- Unter Adresse 12 wird der End-Wert gespeichert, zum Beispiel 77.
- Dein Programm soll innerhalb der Adressen 00 bis 09 Platz haben. Für die Beispielzahlen hier soll es in 7ner-Schritten bis 77 Zählen und wieder von vorne beginnen.
Aufgabe 2
Programmiere nun den mit Breadboards aufgebauten 8-Bit-Computer, sodass er dasselbe Programm wie in Aufgabe 1 ausführt.
- Erstelle zuerst den Assembly-Code: Zeile für Zeile jeweils 3 Buchstaben für den Befehl und eine Zahl für die Adresse/den Wert. Unten findest du die Liste der Befehle.
- Erstelle eine Tabelle, mit zwei Spalten und 16 Zeilen. In die linke Spalte schreibst du die Adressen 0000 bis 1111 (binär), in die rechte Spalte schreibst du die in Maschinencode1) übersetzten Befehle.
- Programmiere die 8-Bit-CPU und teste dein Programm.
Op Code | Kürzel | Bedeutung | Beispiel | Code für dieses Beispiel |
---|---|---|---|---|
0001 | LDA | Load A: Lade Wert unter gegebener Adresse und schreibe sie ins A-Register. | LDA 15 | 0001'1111 |
0010 | ADD | Add: Addiere Wert unter gegebener Adresse zum Wert im A-Register und schreibe das Resultat ins A-Register. | ADD 14 | 0010’1110 |
0011 | SUB | Subtract: Subtrahiere Wert unter gegebener Adresse vom Wert im A-Register und schreibe das Resultat ins A-Register. | SUB 13 | 0011'1101 |
0100 | STA | Store A: Speichere Wert vom A-Register in das RAM unter gegebener Adresse. | STA 12 | 0100'1100 |
0101 | LDI | Load Immediate: Lade den gegebenen Wert direkt ins A-Register. | LDI 11 | 0101'1011 |
0110 | JMP | Jump: Springe zu gegebener Adresse. | JMP 10 | 0110'1010 |
0111 | JC | Jump Carry: Springe zu gegebener Adresse, wenn das Carry-Flag gesetzt ist. Also dann, wenn bei der letzten Operation der ALU ein Übertrag (Carry) entstand; wenn das Resultat grösser als 255 (nach einer Addition) oder kleiner als 0 (nach einer Subtraktion) ist. | JC 9 | 0111'1001 |
1000 | JZ | Jumo Zero: Springe zu gegebener Adresse, wenn das Zero-Flag gesetzt ist. Also dann, wenn wenn die letzte Operation der ALU die Summe 0 ergab. | JZ 8 | 1000'1000 |
1110 | OUT | Out: Lade Wert aus dem A-Register und schreibe ihn ins Output-Register (von wo er angezeigt wird). | OUT | 1110'0000 |
1111 | HLT | Halt: Stoppe das Programm | HLT | 1111'0000 |
Aufgabe 3
Bertha baut eine Anlage, die ihre Katze unterhalten soll: Drei Stoffmäuse sind mit jeweils einem Meter Abstand in einem Dreieck aufgestellt. Bei jeder ist ein kleiner Motor (Ausgänge M1…M3) installiert, der die Maus in Bewegung bringt. Auch ist bei jeder Maus ein Sensor (Eingänge S1…S3) installiert, der merkt, ob die Katze bei dieser Maus ist. Sobald die Katze in die Nähe dieser Anlage kommt, bewegt sich immer eine Maus, bei der die Katze nicht ist:
- M1 läuft (= 1), wenn S3 = 1 ist.
- M2 läuft (= 1), wenn S1 = 1 ist.
- M3 läuft (= 1), wenn S2 = 1 ist.
- Wenn mehr als zwei Sensoren = 1 sind, läuft keiner der Motoren! (Dann ist vielleicht eine zweite Katze im Spiel).
- Die Steuerung hat also 3 Eingänge. Wie viele Zustände sind möglich?
- Zeichne die Wahrheitstabelle für die Steuerung: links die Spalten für die Eingänge, rechts die für die Ausgänge.
- Notiere für jeden Ausgang M1 bis M3 die Funktionsgleichung in der Schreibweise der booleschen Algebra.
- Zeichne die Schaltungen für M1 bis M3 mit Logik-Gattern.
Hausaufgaben
- Lese das Skript bis und mit Seite 14.
- Zeichne eine XOR-Schaltung ohne XOR-Gatter:
- Zeichne die Wahrheitstabelle einer XOR-Schaltung mit den Eingängen A und B und dem Ausgang Y.
- Zeichne mit AND-, OR- und NOT-Gates eine XOR Schaltung. Überprüfe, ob sie die Wahrheitstabelle erfüllt.
- Notiere die Funktion deiner Schaltung in der Schreibweise der boolschen Algebra: A ⊻ B = …
- Wandle die Funktionsgleichung mit De Morgan so um, dass sie nur noch aus AND- und NOT-Gates besteht.
- Zeichne nun die Schaltung ausschliesslich mit NAND-Gates. Tipp: werden die beiden Eingänge eines NAND- Gates miteinander verbunden, so funktioniert es als NOT-Gate.
- Baue diese Schaltung mit NAND-Gates auf EveryCircuit auf und teste sie.
Woche 2 – Transistoren und logische Verknüpfungen
Aufgabe 1
Baue die Schaltung aus Bild 6 im Skript nach:
- Als kleine Spannungsquelle verwendest du die 5V von der Breadboard-Versorgung.
- Schalte zwischen Pluspol der kleinen Spannungsquelle und die Basis des Transistors nacheinander einen Schalter und einen 1kΩ-Widerstand. So kannst du den Transistor ein- und ausschalten.
- Verwende eine 12-V-Glühbirne und für die grosse Spannungsquelle ein Labor-Netzgerät, das du auf 12 V einstellst.
- Der BC547 steht als Transistor zur Verfügung (im Internet nach Pinbelegung suchen).
Aufgabe 2
Zeichne ein UND-Verknüpfung mit Transisoten. Danach baust du sie auf und testest sie.
- Die Tasten A und B sind am einen Ende mit dem Pluspol der Spannungsquelle (+5V) verbunden. Zeichne die Tasten untereinander mit ca. einer Handbreite Abstand.
- Am anderen Ende führt jede Taste zu einem 1kΩ-Widerstand und von diesem gehts jeweils zur Basis des Transistors. Zeichne auch die Transitoren mit gleichem Abstand schön untereinander.
- Verbinde nun eine LED mit 150Ω-Vorwiderstand so mit den Transistoren, dass sie nur dann leuchtet, wenn beide Tasten gedrückt sind.
Aufgabe 3
Baue die Schaltung aus Aufgabe 2 eins zu eins in Everycircuit auf und simuliere die Schaltung. Falls du noch keine Everycircuit-Lizenz hast: Löse eine lebenslage Lizenz mit folgenden Angaben:
Aufgabe 4
Zeichne ein ODER-Verknüpfung mit Transisoten. Danach baust du sie auf und testest sie.
- Wieder sollen Tasten A und B über 1kΩ-Widerstand je einen Transistor schalten.
- Die LED mit 150Ω-Vorwiderstand soll nun leuchten, sobald eine der beiden Schalter (oder beide) betätigt wird.
Aufgabe 5
Zeichne ein NOT-Verknüpfung mit Transisoten. Danach baust du sie auf und testest sie.
- Taste A schaltet über einen 1kΩ-Widerstand einen Transistor.
- Wenn Taste A nicht betätig ist, soll die LED mit 150Ω-Vorwiderstand leuchten, wenn Taste A betätig ist, soll die LED ausgehen.
Hausaufgaben
- Lese das Skript bis und mit Seite 10.
- Baue in Everycircuit eine NOT-Vernküpfung mit Taste, Transistor (inkl. Vorwiderstand) und LED (inkl. Vorwiderstand) auf und simuliere sie.
Woche 1 – Einführung und Übersicht
Aufgabe 1 – Einfache Schaltung mit Breadboards aufbauen.
Mit Breadboards (engl. für Brotbrett) kannst du elektronische Schaltungen schnell aufbauen und testen. Die Bauteile und die Verbindungen können einfach hineingesteckt werden. Folgendes Bild zeigt, wie die Leitungen innerhalb eines Breadboards verlaufen:
- Die rot und blau markierten Leitungen verlaufen oben und unten horizontal. Sie werden üblicherweise für die Spannungsversorgung genutzt: Rot = Pluspol der Spannungsquelle; Blau = Minuspol der Spannungsquelle.
- Die grün markierten Leitungen verlaufen vertikal und verbinden immer fünf Löcher miteinander.
Baue folgende Schaltung auf dem Breadboard auf und teste, ob sie funktioniert:
Tipps:
- Folge dem Schaltplan von links nach rechts und stelle die Verbindungen zwischen den Bauteilen her: Der Pluspol der Spannungsquelle wird mit der Taste verbunden; das andere Ende der Taste wird mit dem einen Ende des Widerstands verbunden; das andere Ende des Widerstands mit dem einen Ende der LED etc.
- Beachte folgende Bilder: Das erste zeigt, wie die Anschlüsse der Taste miteinander verbunden sind. Das zweite zeigt, welcher Anschluss der LED mit dem Plus- bzw. Minuspol verbunden werden muss.
Aufgabe 2
- Messe mit einem Oszilloskop die Spannung nach der Taste. Stelle die horizontale (Zeit) und vertikale (Spannung) Auflösung so ein, dass du ein schönes Rechtecksignal erkennst, wenn du die Taste regelmässig drückst und loslässt.
- Optional: Schliesse anstelle von Spannungsquelle und Taste einen Funktionsgenerator an. Damit kannst du die Frequenz varieren und mit dem Oszilloskop messen.
Aufgabe 3
Baue auf dem Breadboard ein 4-Bit-Register auf. Nutze folgende Bauteile:
- IC (Integrierte Schaltung) 74LS173. Hier das Datenblatt.
- 4 LEDs, die den 4-Bit Wert anzeigen.
- 4 Vorwiderstände (150…220 Ohm) vor oder nach jeder LED.
- Eine Taste, mit der die Werte, die an den Eingängen anliegen, an die Ausgänge geladen/gespeichert werden.
Demonstriere der Lehrperson, wie du mit einem Tastendruck einen beliebigen 4-Bit-Wert speichern kannst. Den Wert definierst du, indem du die Eingänge mit dem Pluspol (1) oder Minuspol (0) der Spannungsquelle verbindest.
Anfänger: Frage die Lehrperson nach Hinweisen dazu, wie du den IC mit den anderen Bauteilen verbinden sollst.
Fortgeschrittene: Nutze das Datenblatt.
Hausaufgaben
- Lese das Skript bis und mit Seite 4 (obligatorisch).
- Lese das Skript bis und mit Seite 7 (freiwillig).
- Zeichne ein Schema/Schaltplan von folgendem Breadboard-Aufbau (obligatorisch). Die Symbole für die Bauteile müssen nicht genau der Norm entsprechen: