Dies ist eine alte Version des Dokuments!
HEX-BIN-Trainer
Ein Teilprojekt im Dunstkreis der Ausstellung zur 2wickl2014.
Grundidee
„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.
Umsetzung
Primitivansatz: uC - langweilig
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 ziele ich auf die 2. Lösung ab.
Nostalgieansatz: TTL/CMOS-Grab
Viel Lustiger ist es, die nötige Schaltung diskret, naja schon mit IC's, aber eben mit althergebrachten Logikschaltkreisen, aufzubauen. Der Aufbau kann damit schön nach Funktionsgruppen getrennt erfolgen, anhand derer die Funktion der Schaltung dem geneigten Publikum auch erklärt werden kann. Bei genauerer Betrachtung ist die Anzahl an Bausteinen auch eigentlich sehr überschaubar…
Zufallsgenerator:
Ein einfacher Oszillator speist einen Binärzähler. Wird der Oszillator angehalten, so steht in den unteren 4 Bit des Zählers das Zufallsmuster stabil an. Wenn der Oszillator hineichend schnell im Vergleich zum Aktivierungspuls/Einschaltsignal ist, besonders wenn dessen Länge auch einem gewissen Jitter unterliegt, ist das 4 bit Ergebnis quasi zufällig.
4040 (Counter), externer Oszillator 74HC00
Anzeige
Mit einem HEX fähigem 7-Segment-Treiber sollte aus dem 4-bit „Soll-Wert“ direkt die Anzeige angesteuert werden. Aber an HEX fähigen Treibern habe ich nur den 4311 oder 4368 gefunden, die aber bei den einschlägigen Versandhändlern nicht erhältlich sind.
Daher benutze ich hier eine Fallbacklösung. Die Warheitstabelle des Segmentdekoders wird einfach in ein EPROM programmiert. Die 8 Datenbits passen wunderbar zu den 7 Segmenten + Dezimalpunkt (der aber nicht benutzt wird ). Die Datenleitungen des EPROMS steuern über weitere Transistorteiber die Segmente des Displays.
7segment Decoderprogrammierung für das EPROM
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 .
Auswertung
Vier Bit Vergleicher, was sonst.
4585 (Vergleicher)
Auslösetaste mit Mindestbetätigungsdauer über RC und Smidttrigger. Der Ausgang des Vergleichers muss also für eine bestimmte Zeit stabil ein „richtig“ ausgeben.
Aktuator
Liegt lange genug ein korrektes Vergleicherergebnis an, soll mit einem (retriggerbaren) Monoflop (74..123 liegt rum) für eine bestimmte Zeit der „Aktionsausgang“ aktiv werden. Gleichzeitig wird der Oszillator im Zufallsgenerator wieder freigegeben, so dass am Ende der Aktionsphase eine neue HEX-Kodezahl für die nächste Runde ansteht.
Aufbau
Da es sich um ein Einzelstück handeln wird, mache ich das auf Lochraster. Nicht weil ich den Aufwand einer „richtigen“ Platine scheue, sondern aus Spaß und nostalgischen Anwandlungen. Und weil ich für alles andere sowiso zu spät dran bin …