Ich habe zwar schon einige Display-Module entwickelt und gebaut, aber
die heutigen LC-Displays passen einfach nicht zu etwas älteren
Konstrukten, wie z.B. meinem Formant-Aufbau.
Ein Display für ein solches Gerät sollte schon "so etwa" zu
dem Stil der Zeit passen, zu der das Gerät entstand. 7-Segment-Anzeigen
würden zwar zeitlich in die '70er passen, aber ich benötigte eine
alphanumerische Anzeige. Es gibt zwar auch 13-Segment-Anzeigen, nur
deren Lesbarkeit war mir doch etwas zu dürftig. Glücklicherweise
fand ich in meinen "Altbeständen" zwei
PD 2437,
die mir mal ein freundlicher OM geschenkt hatte. Diese Displays enthalten
je vier "5x7"-LED-Punktmatrix-Anzeigen, und passen noch recht gut
zu dem erwünschten "Vintage-Style".
|
Die Schaltung des Display-Moduls
|
Die Ansteuerung der beiden "PD 2437"-Display-Module ist den heutigen LCD-Modulen
recht ähnlich: Es gibt acht Datenleitungen, drei Adresseingänge, und ein paar
Steuersignale. Also mal wieder viel zu viele Signale für meine bevorzugten
"8Pin"-Mikrocontroller. Demzufolge habe ich etwas in meinen Vorräten
an TTL-Chips gekramt, und die Schieberegister 74HC299 und 74LS195 gefunden, aus denen
sich mit einigen zusätzlichen Bauteilen ein entsprechendes Interface aufbauen
ließ. Da der 74LS195-Chip noch über vier parallele Eingänge verfügt,
die zur Ansteuerung des Displays nicht notwendig sind, ergab sich die Möglichkeit,
gleich noch vier Tasten auslesen zu können, was das aufzubauende Display-Modul in
ein "interaktives I/O-Modul" verwandelt. Als Controller für dieses Modul
wählte ich einen PIC12F629, für den ich schon einmal Code für meinen
Kommunikationsbus geschrieben hatte → Ein
"Display-Modul mit Tasten" ist recht sinnlos, wenn es nicht mit anderen
Modulen kommunizieren kann.
|
Das Layout und der Aufbau
Die Firmware
Zur Kommunikation mit den beiden Display-Chips taktet die Firmware die notwendigen Adressen
und Daten in die beiden Schieberegister, löst einen Schreibimpuls aus, und liest danach
(bei Bedarf) die Zustände der vier Tasten wieder seriell ein. Das Schreiben eines Wertes
dauert ca. 200µs, sollen auch die Tasten ausgelesen werden, 300µs. Das Auslesen der
Tasten erfolgt in einem Interval von 16-32ms. Der Zustand der Tasten kann sowohl per Befehl
abgefragt werden, als auch so konfiguriert werden, daß bei einer Änderung des
Zustandes eine entsprechende Nachricht (ein Byte) auf dem Kommunikationsbus gesendet wird.
Da ein Lesen von den Display-Registern von der Interface-Hardware nicht vorgesehen ist, werden
sämtliche geschiebenen Registerinhalte im RAM des Controllers vorgehalten. Damit wird es
möglich, z.B. solche Features wie "Text verschieben" zu realisieren, die nicht
von der Hardware der Display-Module unterstützt werden. Da die beiden Schreibmodi, die
den bisher angezeigten Text verschieben, unter Umständen (→Aktuelle Position) alle
acht angezeigten Zeichen neu schreiben müssen (8 x 200µs = 1.6ms), und
ein seriell gesendetes Byte ca. 1ms dauert, kann es bei seriellen "Dauersendungen"
zum Überlauf des internen 8-Byte-Puffers kommen. Aber da es recht sinnlos ist, mehr
Zeichen zu senden, als das Display anzeigen kann (→es sollte ja auch Zeit zum Ablesen
bleiben), sollte dieser Umstand im "normalen Betrieb" nicht stören.
|
Das Protokoll auf dem Kommunikationsbus
Sämtliche Funktionen dieses Display-Modules werden von dem Kommunikationsbus gesteuert.
Damit der (nicht besonders schnelle) Bus dabei nur möglichst kurzzeitig belegt/blockiert
wird, bestehen sämtliche Anweisungen an das Modul aus lediglich einem Byte. Zur
Unterscheidung, ob ein Byte ein Befehl an das Modul ist, oder ein darzustellendes Zeichen
codiert, wird das höchstwertige Bit (b7) als Kennzeichen verwendet. Ist dieses Bit
"1", handelt es sich um einen Befehl (in Bits 0-6), ist dieses Bit "0",
stellt das Byte ein darzustellendes Zeichen dar. Damit ist es u.A. möglich, mit Hilfe
eines "Terminalprogramms" (z.B. "minicom") und eines entsprechenden
PC-Interfaces Texte ohne vorherige
Konfiguration auf dem Display erscheinen zu lassen. Die Befehlscodes (b7=1) sind wiederum
unterteilt in die eigentliche Anweisung in den Bits 4 bis 6 und einem (ggf. notwendigen) Parameter
in den Bits 0 bis 3:
|
|||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||
Codierung des Bytes mit dem Tastenzustand, welches ggf. als Antwort auf die
Anweisung "Tastenzustand abfragen" gesendet wird:
|
|||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||
Codierung eines Bytes mit einer Nachricht über die Änderung eines Tastenzustands.
Diese Nachrichten können mittels der Anweisung "Tastennachrichten ein/ausschalten"
aktiviert werden.
|
|||||||||||||||||||||||||||||||||||||||
|
Das "Material"
Das hier angebotene Material unterliegt der Creative Commons Lizenz
"CC BY-NC-SA".
|
vindisp_V0.1_kicad.tgz Archiv mit allen benötigten KiCad-Dateien.
|
vindisp_V0.3_src.tgz Archiv mit Quellcode und Hexcode für den Mikrocontroller.
|
Hinweise für Nachbauwillige
Wer diese Konstruktion nachbauen möchte, sollte über etwas Kenntnisse der Erstellung von doppelseitigen Leiterplatten, des Aufbaus elektronischer Schaltungen, und im Umgang mit PIC-Mikrocontrollern verfügen. Es handelt sich hierbei nicht um einen Bausatz, sondern eher um eine Anregung für eigene Konstruktionen. Alles, was ich dazu anbieten kann, befindet sich auf dieser Seite, d.h. Nachfragen nach fertigen Modulen, Bausätzen, oder bereits programmierten Microcontrollern sind zwecklos → Ich "produziere" ausschliesslich für den Eigenbedarf.
Für die Funktionalität und Nachbausicherheit dieser Konstruktion kann ich keinerlei Verantwortung übernehmen. Der Schaltplan, das Layout, und PIC-Quellcode unterliegen der Creative Commons Lizenz "CC BY-NC-SA" Eine kommerzielle Verwertung dieses Materials (oder auch von Teilen davon) ist nur mit meiner ausdrücklichen Genehmigung zulässig.
Startseite Hardware Rechtliches Kontakt