Wichtig!
Weil mich langsam die Anfragen zum Notebook PCD-4ND überhäufen:
ICH HABE DAS (GANZE) NOTEBOOK NICHT, KEINE SCHALTPLÄNE, KEIN BIOS,
KEINE SYSTEMDISKETTEN UND AUCH SONST KEINERLEI AHNUNG VON DIESEM DING!
ICH WEISS NICHT MAL, WIE DAS TEIL AUSSIEHT!
PCD-4ND FAQ
Nachdem ich für das PCD-4ND inzwischen ein Controller mit einem FPGA
(XC3042 von Xilinx) gebaut habe, sind
fast alle Geheimnisse um das Display gelüftet.
Was ist das PCD-4ND?
Das PCD-4ND ist ein von Pollin für 39DM angebotenes "Auschlacht"-Display
aus einem Siemens-Nixdorf-Laptop. Das Display wird mit Klappscharnier und
dem ganzen Plastik-Drumherum geliefert, ein (schlechter) Schaltplan ist
auch dabei. Das Display-Modul an sich ist von Sharp (LM64183P) und hat
eine Auflösung von 640*480 in monochrom (mit CCFL-Hintergrundbeleuchtung).
Die nutzbare Bildschirmfläche ist ca. 19cm*14cm. Neben dem LCD-Modul
befindet sich noch eine Platine zur Hochspannungserzeugung für die
Hintergrundbeleuchtung und eine Platine zur Erzeugung der negativen LCD-Spannung
(VEE, ca. -17V) und zur Verteilung der Signale im Scharnier. Die eingebaute
Leuchtstoffröhre hat eine Leuchtlänge von 15.5cm.
Wie arbeitet das Display?
Das Modul hat keinerlei Controller, d.h. für Normalanwender ist das
Display völlig nutzlos, es hat keine VGA/RGB/FBAS/Monchrom-Eingänge,
die zu irgendwas (PC/TV) kompatibel wären. Zum Betrieb ist ein spezieller
LCD-Controller notwendig, entweder einer der üblichen VGA/LCD-Controller
(Chips&Technologies ct65xxx etc.)
oder (falls man Lust+Zeit hat) ein Eigenbaucontroller mit GALs/FPGAs.
Wie wird das Teil angeschlossen?
Die Verbindung geschieht (wenn man die Zwischenplatine hernehmen will)
über einen doppelseitigen Platinenstecker mit je 20 Anschlüssen
pro Seite im 1.27mm-Raster. Die passende Buchse befindet sich auf der Zwischenplatine(ZP).
Wenn man so auf die Buchse blickt, daß das Display nach rechts zeigt
(der mittlere Bolzen ist dann unterhalb der Buchse) gilt folgende Pinbelegung,
es sind nur die Signale aufgeführt, die wirklich was tun):
| Links oben |
Signal |
Rechts oben |
Signal |
| 1 |
|
21 |
VLD3 |
| 2 |
|
22 |
|
| 3 |
SCLK |
23 |
VLD1 |
| 4 |
VLD2 |
24 |
VLD0 |
| 5 |
|
25 |
|
| 6 |
|
26 |
|
| 7 |
VUD3 |
27 |
VUD2 |
| 8 |
VUD1 |
28 |
|
| 9 |
FP |
29 |
LP |
| 10 |
|
30 |
VUD0 |
| 11 |
STNW1 |
31 |
STNL1 |
| 12 |
DISPON |
32 |
VEEEN |
| 13 |
|
33 |
VDDEN |
| 14 |
+5V |
34 |
GND |
| 15 |
|
35 |
GND |
| 16 |
|
36 |
|
| 17 |
BATLED |
37 |
+5V |
| 18 |
+5V |
38 |
GND |
| 19 |
VIN |
39 |
VADJ |
| 20 |
VIN1 |
40 |
+5V |
Was braucht das Ding an Spannung?
5V (LCD), VIN1=7.5V-12V (CCFL) und VIN=5V-12V (für den VEE-Schaltwandler
auf der ZP). Ich betreibe VIN/VIN1 beide mit 12V.
Was sind denn das alles für Signale?
| BATLED |
geht zur Batterie-LED |
| VADJ |
Helligkeitsregelung CCFL |
| STNL1/STNW1 |
Kontrastregelung (steuert VEE) |
| VDDEN |
Schaltet die +5V für das LCD-Modul ein |
| VEEEN |
Schaltet die -17V (VEE) an |
| DISPON |
Schaltet die Hintergrundbeleuchtung an |
| FP |
Frame-Clock (Bildbeginn) |
| LP |
Line-Clock (Zeilenbeginn) |
| SCLK |
Pixeltakt |
| VLD(3:0) |
Daten für untere Bildschirmhälfte |
| VUD(3:0) |
Daten für obere Bildschirmhälfte |
VADJ wird über ein 10K-Poti an Masse angeschlossen, am hellsten
ist es, wenn VADJ=0V.
STW1/STH1: 10K-Poti zwischen STW1/STH1 (STW1 liegt entgegen dem
Schaltplan nicht an Masse!!!)
VDDEN/VEEEN/DSPON: Highaktiv, können miteinander verbunden werden,
aber:
!!! ACHTUNG !!!
Ohne vernünftigen FP-Takt führt das Anlegen von VEEEN nach kurzer
Zeit (einige Sekunden) zur fortschreitenden Zerstörung des Displays
durch Elektrolyse (LCDs werden deswegen intern IMMER mit Wechselspannung
betrieben, die wird im Modul aber aus FP abgeleitet). Wenn FP ausbleibt,
fängt die aktuelle Zeile an zu "kochen". Selbst wenn FP wieder taktet,
braucht es einige Minuten, bis die Zeile wieder einwandfrei funktioniert
und die hellen Winz-Bläschen verschwinden! Daher sollte man beim Experimentieren
das Display erst dann anschließen, wenn man die Korrektheit der Signale
vorher (mit Oszi etc.) überprüft hat!
FP/LP/SCLK: Siehe Timingdiagramm!
VUD(3:0)/VLD(3:0): Je 4 Pixel für obere/untere Hälfte, Bit
3 ist das linkeste.
Was soll das mit oberer und unterer Hälfte?Das Display ist in zwei
Hälften aufgeteilt (2 mal 240 Zeilen). Mit jedem Schiebetakt werden
je 4 Pixel für beide Bereiche reingeschoben, d.h. ein Frame besteht
aus 240 LP-Impulsen. Der Grund liegt in der Verminderung des Flimmerns,
da der eigentliche Updatevorgang trotz der Trägheit des Displays selbst
bei 40Hz noch als Flimmern wahrnehmbar ist. Mit scharfem Auge kann man
die Trennline in der Matrix sogar sehen.
Wie macht man GraustufenDas Display hat eine digitale Ansteuerung, d.h.
Graustufen gehen nur mit An/Abschalten der Pixel nach jedem Frame. Die
Controller von C&T haben dafür das "True Gray"-Feature, mit dem
max. 16 Graustufen erzeugt werden können, mehr geht mit Dithering.
Die beiden Hälften werden phasenverdreht angesteuert, damit fällt
die Halbierung bei der Graustufenerzeugung besonders auf, wenn nicht auch
die Erzeugung für die Hälften verdreht gemacht wird.
Was für ein Timing braucht man bei FP/LP/SCK?Damit es möglichst
wenig flimmert, sollte FP über 40Hz (mit Graustufen über 70Hz)
liegen, d.h. LP hat dann ca. 10kHz, SCLK ca. 1.5MHz. Zu hohe Framerates
verringern allerdings den Kontrast, brauchen mehr Strom und erzeugen mehr
Störungen (Schmieren)...
Im Prinzip ist das Display ein riesiges zweidimensionales Schieberegister.
Ich habe allerdings keine genauen Daten im WWW gefunden, hier also ein
mögliches
Timing frisch aus dem Simulator (so geht es auch in echt (nach vielen Versuchen)
bei mir):
Bemerkung: Signale, die mit X anfangen, sind externe Signale, der Rest
existiert nur intern im Controller.
Der Takt CLK beträgt 16MHz, die Statemachine hat in STATE 8 Zustände
(01, 02, 04 ... 80), in 01/02 wird aus dem RAM je ein Byte (bei 2Bit/Pixel
also eben gerade passend 4Pixel) für die obere bzw. untere Hälfte
ausgelesen. Der Einfachheit halber (Speicher ist ja sooo billig und Multiplizieren
mit 160 ist zeitaufwendig...) wird für eine Zeile nicht 160Byte (640/4)
sondern 256Byte gerechnet. Damit werden also nur zwei Zähler mit je
8Bit für X (A(7:0)) und Y-Position (A(15:8)) gebraucht, die Speicheradresse
wird einfach aus beiden Zählern zusammengesetzt. Die Adresse für
die untere Hälfte wird durch Addition von $F0 (240*256/256) auf den
Y-Zähler berechnet, der Carry-Ausgang des Adders ist dann A16. Die
Signale LOAD1 und LOAD2 laden mit der fallenden Flanke die Daten aus dem
RAM, und werden (durch Graustufen-Manipulation) einen Takt später
auf den LCD-Bus VUD(3:0) und VLD(3:0) gegeben (in der Simulation Dummy-Daten).
SCLK taktet die Daten dann ein.
Der LP-Impuls kommt nach 160 SCLK-Impulsen (X=$A0), der SCLK-Impuls
während LP scheint nicht zu schaden (es sind also effektiv 161 SCLK-Takte
pro Zeile, siehe übernächstes Bild):
Und noch lustiger ist, daß FP während der zweiten Zeile (Y=1)
aktiv sein muß, sonst verliert man die Zeile 0. D.h. das Sync-Signal
kommt nicht am Ende des Bildes sondern kurz nach dem Anfang!
FP wird nach einer Zeile (nach dem nächsten LP-Impuls) wieder zurückgenommen:
So geht das Spiel jetzt weiter , bis der Y-Zähler 239 erreicht
hat, nach Beendigung der Zeile 239 wird er wieder auf 0 gesetzt.
Zur Vereinfachung habe ich in der Simulation die 2 Timeslots (04/08)
für das Auslesen des zweiten Displays weggelassen (bei den Adressen
kann man sie noch erkennen...). Während 40/80 hat die CPU eine Zugriffsmöglichkeit,
10/20 ist für einen geplanten Videodigitizer reserviert.
Und wo liegt das Problem, wenn ich mir einen Controller selber bauen will?
Nur zu, aber es braucht schon einige Erfahrung mit Digitaltechnik, die
Arbeit beschränkt sich nicht auf ein paar NAND-Gatter. Und ohne Zugriff
auf GALs oder besser integrierte Logikchips (EPLD/FPGA) wird der Controller
ein TTL-Grab. Mein Controller im XC3042-FPGA (640*480 mit 4 Graustufen,
zwei Displays anschliessbar, 256K Speicher, 68030-Bus mit 8Bit) braucht
ca. 80 FlipFlops! Davon sind nur 16 der eigentliche Displayzähler,
der Rest geht für die Zustandsmaschine, Ein/Ausgangslatches, Graustufenerzeugung,
CPU-Zugriffslogik und diverse 'Glue'-Logik drauf. Und nebenbei:Die CPU
sollte auch ab und zu auf den Videospeicher zugreifen können :-) Als
'Video'RAM empfiehlt sich übrigens Cache-RAM, die Ansteuerung ist
trivial (im Gegensatz zu DRAM) und 128KB mit 15ns kosten auch nur ca. 10DM
(der PC-Mania sei Dank...).
Dann kaufe ich mir halt paar EPLDs/FPGAs!?!
Die ICs sind billig, aber die Entwicklungssysteme leider nicht so ganz.
Das Xilinx-System kostet in der billigsten Version ca.100$, für AMDs
bessere MACHs (oder Lattice oder Altera oder Cypress oder oder...) ist
es ähnlich. D.h. wenn man damit nicht unbedingt Geld verdienen will,
ist es rein als Hobby-Anschaffung nicht billig :-/ Aber (mit etwas mehr
Verdrahtungsarbeit) sollte es auch mit GALs hinzubekommen sein...
Wie kann denn so ein Controller aussehen?
Hier ein Bild von meiner selbst entwickelten Grafikkarte zur Ansteuerung
von zwei LC-Displays:
(HIRES, ca. 100KB)