Koch: mirwi
Ein Teilprojekt im Dunstkreis der Ausstellung zur 2wickl2014.
Später eingesetzt beim 32C3.
„Binary Kitchen lehrt hexadezimale und binäre Zahlendarstellung“. Auf einer 7-Segmentanzeige wird ein zufällig gewürfeltes HEX Zeichen angezeigt. Die Nutzer müssen nun diese Zahl in Binärdarstellung eingeben. Fürs Zwickl geschah dies über vier Fussschalter. Bei richtigem Bit-Muster wird für eine gewisse Zeit eine Aktion ausgelöst (→Jubelbox) sowie zeitgleich eine neue Zufallshexzahl ermittelt.
Eine einfache Umsetzungsmöglichkeit wäre, die Anzeige und die nötigen Eingabeschalter einfach an einen kleinen uC zu hängen und die primitive Funktionalität mit ein paar Zeilen Code abzubilden. Das wäre Stand der Technik ist aber langweilig.
Daher wurde die 2. Lösung gewählt.
Viel Lustiger ist es, die nötige Schaltung diskret, naja schon mit IC's, aber eben mit althergebrachten Logikschaltkreisen, aufzubauen. Ausserdem war es mal wieder interessant etwas in diesem Modus zu machen: Lochraster mit einigen gelöteten Leiterbahnen, der Rest mit Kupferlackdraht „geroutet“.
Zwei der vier NAND Gatter eines 74HC00 bilden einen standard CMOS RC-Oszillator mit ca. 40 kHz. Über einen der NAND-Eingänge kann er aktiviert bzw. ausgeschaltet werden. Dieser Takt speist einen 4040 11-Bit Binärzähler, dessen niederwertigste vier Bit die „Zufallszahl“ bilden. 7-Segment Treiber, die den vollen Hex-Zeichensatz darstellen, sind schwer zu bekommen. Als Alternative wurde der Dekoder über ein altes 2732 EPROM realisiert, bei dem nur die ersten 16 Byte im Speicher mit Daten belegt sind. Jedes der Datenbits aus dem EPROM schaltet masseseitig über einen BS170 MOS-FET ein Anzeigesegment, bzw. den Dezimalpunkt (wenn auch bisher nicht benutzt). Die Einzelsegmente des verwendeten großen Displays bestehen aus vier in Serie geschalteten LEDs. Die für alle Segmente gemeinsame Anode wird daher direkt mit +12V gespeist. Bipolartransistoren (unbekannten Typs) in jedem Zweig bilden eine Art diskretem Stromspiegel mit starker Gegenkopplung. Damit kann die Helligkeit aller Segmente gemeinsam über einen Referenzstrom einigestellt werden. Parallel zum Anzeigedekoder liegt die Zufallzahl als Referenzwert an einem 4585 vier Bit Vergleicher an. Der andere Satz Vergleichereingänge ist mit Pull-Down-Widerständen und den nach +5V schaltenden Eingabetasten belegt. Der „Werte sind gleich“ Ausgang Triggert eines der beiden Monoflops in einem 74HC123, dessen Zeitkonstante die Einschaltdauer des Aktionsausgangs bestimmt. Über einen kräftigeren MOS-FET (IRF640) wird die externe Last gegen Masse geschaltet. Gleichzeitig wird der Taktgenerator am Zähler aktiviert. D.h. während dieser Zeit läuft die Anzeige mit hoher Geschwindigkeit durch und alle Segmente erscheinen aktiviert.
TODO: Schaltplan zeichnen.
Ausbaumöglichkeiten: Die nächst höherwertigen Bits aus dem Zähler können auch noch zur Adressierung des EPROMS benutzt werden und verschiedene „Spielmodi“ auswählen. Durch entsprechende Anzeigedekodierung wäre neben HEX→BIN auch HEX→ NOT(BIN), BIN bitgeschoben, Paritätsbit (gerade/ungerade) an bestimmten Positionen … möglich.
Segmentpositionen
a | |||
f | b | ||
g | |||
e | c | ||
d | dp |
Warheitstabelle für die Segmentausgänge, nur die untersten 4 Adressbits sind benutzt, der Rest ist 0.
Addr hex | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Byte hex |
---|---|---|---|---|---|---|---|---|---|
a | b | c | d | e | f | g | dp | ||
0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | FC |
1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 60 |
2 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | DA |
3 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | F2 |
4 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 66 |
5 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | B6 |
6 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | BE |
7 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | E0 |
8 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | FE |
9 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | F6 |
A | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | EE |
B | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 3E |
C | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 9C |
D | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 7A |
E | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 9E |
F | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 8E |
Ein kleiner Bitfehler hatte sich noch eingeschlichen, das F war ein P. Ist oben in der Tabelle und auch in den EPROMS korrigiert.
Ich hatte noch drei „kleine“, fast schon historische, EPROMS rumliegen, die ich mit den Dekoderdaten gefüttert habe. Ein 2716 (2kByte) und zwei 2732 mit ganzen 4kByte Kapazität.
So alte EPROMS programmiert man natürlich stilecht mit legacy Hardware .