Alphanumerisches LED-Display

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".
PD 2437 Display Modul

Die Schaltung des Display-Moduls

Schaltplan des 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

Layout des Moduls
Um die nicht gerade geringe Anzahl von Adress- und Datenleitungen zu den Displays zu führen, wurde ein doppelseitig ausgeführtes Layout notwendig, und die beiden PD 2437-Displays habe ich auf einer separaten Leiterplatte montiert. Jedoch auch mit doppelseitigem Layout wäre die Querverbindungen zwischen den beiden Display-Chips nicht zu realisieren gewesen. Daher habe ich diese Verbindungen mit Fädeldraht ausgeführt, und das Layout dieses Teils einseitig gehalten. Die Verbindungen zwischen den beiden Leiterplatten sind mit Lötzinn realisiert. Da diese Art der Verbindungen aufgrund der auftretenden Kräfte bekanntermaßen nicht stabil sind, habe ich zwei zusätzliche, dreieckige Leiterplattenreste eingeklebt, die die auftretenden Kräfte aufnehmen. Die Verbindungen, die per Lötbrücken oder Fädeldraht hergestellt werden, sind im Layout in separaten Layern (und sehr dünn) aufgeführt, sodaß sich diese Leiterbahnen bei der Erzeugung von Layouts für die Leiterplatten einfach ausblenden lassen.
Modul Front

Modul Rückseite

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:
Befehl (b6-4)Parameter (b3-0)Funktion
0-Modul initialisieren, Standardwerte (D) setzen
1-Display löschen
20→aus (D), 1→einBlinken ein/ausschalten
30→aus ... 3→maximal (D=2)Helligkeit einstellen
40→links ... 7→rechts (D=7)Aktuelle Position setzen
50→aus (D), 1→einCursor an aktueller Position ein/ausschalten
60→Tastennachrichten aus, Tastenzustand nicht senden (D)Tastennachrichten ein/ausschalten,
Tastenzustand abfragen
1→Tastennachrichten aus, Tastenzustand senden
2→Tastennachrichten ein, Tastenzustand nicht senden
3→Tastennachrichten ein, Tastenzustand senden
70→Keine Positionsänderung nach dem Schreiben eines ZeichensSchreibmodus setzen
1→Reservierter Code
2→Akutelle Position nach rechts versetzen nach dem Schreiben
3→Akutelle Position nach links versetzen nach dem Schreiben
4→Text nach links verschieben, dann Zeichen schreiben (D)
5→Text nach rechts verschieben, dann Zeichen schreiben
78→Befehle bearbeiten (D)Sonderfunktion "Befehlsbearbeitung"
9→Befehle ignorieren, bis Anweisung "Befehle bearbeiten"
Codierung des Bytes mit dem Tastenzustand, welches ggf. als Antwort auf die Anweisung "Tastenzustand abfragen" gesendet wird:
BitFunktion
4-7Immer 0100→Festes Kennzeichen für "Tastenzustand"
30→Taste 4 nicht gedrückt, 1→Taste 4 gedrückt
20→Taste 3 nicht gedrückt, 1→Taste 3 gedrückt
10→Taste 2 nicht gedrückt, 1→Taste 2 gedrückt
00→Taste 1 nicht gedrückt, 1→Taste 1 gedrückt
Codierung eines Bytes mit einer Nachricht über die Änderung eines Tastenzustands. Diese Nachrichten können mittels der Anweisung "Tastennachrichten ein/ausschalten" aktiviert werden.
BitFunktion
7Immer 1→Festes Kennzeichen für "Tastennachricht"
60→Taste wurde losgelassen, 1→Taste wurde grdrückt
5-2Immer 1100→Festes Kennzeichen für "Tastennachricht vom Display-Modul"
1-000→Taste 1, 01→Taste 2, 10→Taste 3, 11→Taste 4

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

HTML und Design: DK1RM erstellt: 26.9.2019 - letzte Änderung: 20.10.2019