[ lamepage · Hardware · GFX LCD ]

GFX-LCD

Betrieb eines grafischen LC-Displays mittels SED1335/S1D13305 am Parallelport

Übersicht


Vorwort

Vor einiger Zeit gab es bei Conrad Electronic ein günstiges LCD-Panel im Restpostenmarkt. Es handelt sich hierbei um ein grafisches Display von EPSON, mit der Bezeichnung ECM-A0635-2. Dieses monochrome LCD hat eine Auflösung von 320x240 Pixeln und eine integrierte Hintergrundbeleuchtung. Der nötige Konverter, der die Hochspannung für die Beleuchtung erzeugt, wurde mitgeliefert. Weiterhin war eine Anschlußbuchse für das am LCD angebrachte Flexkabel dabei.

Hier soll nun eine Möglichkeit beschrieben werden, wie das LCD an einem passenden Controller betrieben werden kann. Als Controller wird hier der SED1335 von Seiko/Epson (Von Epson gibt es einen kompatiblen Typ: S1D13305) verwendet. Die Verbindung mit dem Rechner geschieht über dessen Parallelport. Die Software wurde unter Linux (Kernel 2.2.x), geschrieben und getestet.

Achtung: Um die in dieser Anleitung angegebene Hardware nachzubauen bedarf es einiger Erfahrung im SMD-Löten.
Außerdem besteht grundsätzlich die Gefahr, daß man seinen PC und/oder andere damit verbundene Komponenten zerstören kann!
Die Arbeit an elektronischen und elektrischen Komponenten kann immer gefährlich sein; in diesem Fall sei besonders auf den CFL-Konverter hingewiesen, der eine Hochspannung von einigen Hundert Volt erzeugt, so daß die Gefahr eines elektrischen Schlages besteht! Also Vorsicht!


Neues, Änderungen, usw.


Download

Scans vom Epson Datenbuch: EpsonLCD_TCMA0635-1.tar.gz (Achtung: ca. 4.2 MB!)

Die ganzen Schaltpläne, Stücklisten, Programme, usw. gibt es hier: gfxlcd-0.3.tar.gz

Dateien im Archiv und dessen Beschreibung:

Unterverzeichnis /cflres-ctrl-0.3 (CFL/RESET-Controller)
--------------------------------------------------------
control_logic3.brd        - Schaltplan
control_logic3.sch        - Layout
part-list                 - Bauteilliste
reedrel.lbr               - Bibliothek fü das Reed-Relais
shematics_cflres_ctrl.pdf - Schaltplan als PDF

Unterverzeichnis /gfxlcdctrl-hw-1.7 (LCD-Controller)
----------------------------------------------------
62256SO28L.lbr            - Bibliothek für das statische RAM 62256 (32Kx8) im SOJ28 Gehäuse
lcdcon.lbr                - Bibliothek für die LCD-Anschlußbuchse
new_hand5_1_8_64k_smd.brd - Das Layout
new_hand5_1_8_64k_smd.sch - Der Schaltplan
part-list                 - Bauteilliste
sed1335F0B_QFP60.lbr      - Bibliothek für den SED1335F0B im QFP-60 Gehäuse
shematics_lcd_ctrl.pdf    - Schaltplan als PDF

Unterverzeichnis /gfxlcdtest-0.7 (Das Testprogramm)
---------------------------------------------------
Makefile                  - Das Makefile für gfxlcdtest.c
README.hantronix	  - Beschreibung des Hantronix Beispielcodes [1]
font_pearl_8x8.c          - Der Zeichensatz den das LCD anzeigen soll
gfxlcd.h                  - Headerfile
gfxlcdtest.c              - Das Testprogramm
sed133x.h                 - SED1335 Headerfile
testbild2_bw.pbm          - Eine Grafik 320x240 (PBM-Format _ohne_ Header!) 

[1] nicht im Archiv enthalten. Den Beispielcode gibt es auf der Hantronix
Webseite (siehe unten).

Unterverzeichnis /sed-mdacon-0.1.4 (Der Kerneltreiber)
------------------------------------------------------
README                    - README zum Kernelmodul
mdacon_sed.c              - Kernelmodul

Unterverzeichnis /lcd-supply-1.2 (Spannungsversorgung)
------------------------------------------------------
LCD_PowerSupply.brd	  - Das Layout (Eagle)	
LCD_PowerSupply.pdf	  - Schaltplan der Eagle-Version als PDF
LCD_PowerSupply_print.png - Belichtungsvorlage
LCD_PowerSupply.sch	  - Der Schaltplan (Eagle)
lcdsupply1_1.pdf	  - V1.1 Schaltplan in PDF
part-list		  - V1.1 Bauteilliste
part-list.eagle		  - Bauteilliste der Eagle-Version
TL497A.lbr		  - Bibliothek für den TL497A


Die Hardware

Die Schaltpläne und Layouts für den LCD-Controller und den CFL-Controller wurden mit der Light-Version von Eagle erstellt. Man kann diese kostenlos bei Cadsoft Computer GmbH herunterladen. Bei dieser Version ist die Größe des Layouts auf eine halbe Europlatine beschränkt, was aber in den meisten Fällen ausreicht.
Die Harware ist nach und nach entstanden, d.h. als erstes wurde der LCD-Controller entworfen und zusammengebaut. Als dieser dann funktionierte, kam die Spannungsversorgung hinzu. Denn es werden drei Betriebsspannungen benötigt, 12V für den CFL-Konverter, 5V für die Logik und -22V für das Display. Anfangs (im Experimentierstadium) wurde das hier auch mit drei Spannungsquellen gemacht, die 12 und 5V aus dem PC und die negative Spannung von einem Labornetzteil. Das dies keine dauerhafte Lösung sein konnte, dürfte einleuchten.
Anschließend kam noch der CFL/RESET-Controller dazu, da man ja gerne das Licht steuern sollte.

Das Display

Hier ein paar Bilder vom Conrad-Display und dem CFL-Konverter:

Conrad LCD Vorderseite Conrad LCD Rueckseite CFL Konverter

Der LCD-Controller

Das Hardware-Layout des Controllers basiert auf der Schaltung aus der Hantronix Application Note, es beinhaltet also den SED1335, 64k RAM und ein bisschen Logik. Es wurde teilweise etwas erweitert, wie z.B. um die Kontroll-Schaltung für die neagtive Betriebsspannung.

Schaltbild (PDF-Version):

LCD 
Controller Schaltbild

Stückliste:

Part     Value          Device     Package  Library  Sheet

C1       12p            C0805      C0805    ipc-rcl  1
C2       12p            C0805      C0805    ipc-rcl  1
C3       100n           C1206      C1206    ipc-rcl  1
C4       100n           C1206      C1206    ipc-rcl  1
C5       100n           C1206      C1206    ipc-rcl  1
C6       100n           C1206      C1206    ipc-rcl  1
C7       100n           C1206      C1206    ipc-rcl  1
C8       100n           C1206      C1206    ipc-rcl  1
D1       1N4148         DMLL-41    MLL-41   ipc-rcl  1
IC1      74HC04         7404       SO14     74xxsmd  1
IC2      74HC32         7432       SO14     74xxsmd  1
P1       25k            B25P       B25P     trimpot  1
Q1       10MHz          SM49       SM49     quartz   1
Q2       BC817          SOT23_N    SOT23    ipc-rcl  1
Q3       BC807          SOT23_P    SOT23    ipc-rcl  1
R1       100k           R0805      R0805    ipc-rcl  1
R2       47k            R0805      R0805    ipc-rcl  1
R3       4.7k           R0805      R0805    ipc-rcl  1
R4       100k           R0805      R0805    ipc-rcl  1
SV1      ML10           ML10       ML10     con-ml   1
U$2      62256SOJ       62256SOJ   SOJ-28/3 62256SO2 1
U$3      LCD_CON14      LCD_CON14  CON_LCD  lcdcon   1
U$4      SED1335        SED1335    QFP60-BB sed1335F 1
U$5      62256SOJ       62256SOJ   SOJ-28/3 62256SO2 1
X1       M25H           M25H       M25H     subd     1

Den SED1335 gibt es z.B. bei Spezial Electronic, das RAM und die anderen Kleinteile gibt es bei Conrad Electronic.

Das größte Hindernis ist die doppelseitige Platine. Denn sowas richtig zu belichten und zu ätzen ist nicht ganz einfach, da ja beide Seiten deckungsgleich übereinander liegen müssen. Vielen Dank geht hier an Peter Sobisch, der diese Platine wahrlich kunstvoll geätzt und gebohrt hat. Ein weiteres Problem, bzw. ein ganzes Stück Arbeit, ist das Durchkontaktieren. Das wurde hier händisch mit ganz dünnem Draht gemacht. Dazu wurde eine einzelne Ader von normalem Schaltdraht durch die Bohrung gesteckt und auf beiden Seiten vorsichtig verlötet. Eine Sauarbeit, wirklich.
Ein bisschen Mühe macht auch das Einlöten des SEDs , aber mit einer feinen Spitze läßt sich das einigermaßen problemlos bewältigen.

Hier zwei Bilder von dem fertigen LCD-Controller:

LCD-Controller Vorderseite LCD-Controller Rueckseite


Die Spannungsversorgung

Der LCD-Controller braucht zwei Bestriebsspannungen, einmal die +5V für die Logik und einmal -22V für das eigentliche Display. Der CFL-Konverter benötigt für den Betrieb +12V. Es liegt also nahe, aus einer einzigen Spannung, nämlich den +12V, die beiden anderen zu erzeugen. Für die +5V ist das kein größeres Problem, man nimmt einfach einen 7805 Längsregler und fertig ist die Laube. Um die relativ hohe negative Spannung zu erzeugen, wird sich hier des Schaltreglers TL497A von Texas bedient. Die Schaltung selbst ist die Referenzschaltung aus dem TL497-Datenblatt Seite 7, mit den entprechenden Werten für -22V. Da der Chip und auch der 7805 teilweise etwas warm werden, ist es angebracht diese mit kleinen Kühlkörpern auszustatten.

Stückliste (Version 1.1):

Part	Value
----    -----
R1	1.5R
R2	18k
R3	10k Poti
R4	1.2k
R5	20R/1W
L1	470µ
D1	1N4002
U1	TL497A
U2	7805
C1	47µ/35V
C2	100n
C3	150p
C4	47µ/35V
C5	100µ
C6	100n
C7	10µ

Hier die Schaltung (PDF-Datei) und ein Bild:

Schaltbild der Spannungsversorgung Bild Spannungsversorgung

Neu: Eagle-Schaltplan und Layout von der Spannungsversorgung. Vielen Dank geht hier an Ralf Grafe, der sich die Mühe gemacht hat:

Stückliste (Eagle-Version 1.2):

Part     Value          Device        Package    Library        Sheet

C1       100n           C2,5-3        C2.5-3     capacitor-wima 1
C2       100n           C2,5-3        C2.5-3     capacitor-wima 1
C3       10u            CPOL-EUE3.5-8 E3,5-8     rcl            1
C4       150p           C2,5-3        C2.5-3     capacitor-wima 1
C5       47u            CPOL-EUE3.5-8 E3,5-8     rcl            1
C6       100u           CPOL-EUE3.5-8 E3,5-8     rcl            1
C7       100n           C2,5-3        C2.5-3     capacitor-wima 1
C8       100u/25V       CPOL-EUE3.5-8 E3,5-8     rcl            1
D1       1N4001         1N4004        DO41-10    diode          1
D2       1N4004         1N4004        DO41-10    diode          1
IC1      7805           78XXL         78XXL      v-reg          1
L1                      L-EU0207/10   0207/10    rcl            1
POWER                   22-23-2021    22-23-2021 con-molex      1
R1       1,5            R-EU_0207/10  0207/10    rcl            1
R2       20/1W          R-EU_0207/10  0207/10    rcl            1
R3       18k            R-EU_0207/10  0207/10    rcl            1
R4       1k2            R-EU_0207/10  0207/10    rcl            1
R5       10k            TRIM_EU-PT10S PT-10S     pot            1
SV2      ML10           ML10          ML10       CON-ML         1
U$1      TL497A         TL497A        DIL14      TL497A         1

Hier die Schaltung (PDF-Datei):

Schaltbild der Spannungsversorgung

Der CFL/RESET-Controller

Diese Schaltung ist ein mieser Hack. Sie steuert die CFL Hintergrundbeleuchtung und die Reset-Leitung des SED1335. Diese Logik ist (leider) notwendig, weil keine Steuerleitungen am Parallelport mehr frei sind, die das sonst direkt übernehmen könnten. Die Resetleitung und das Licht werden über ein FlipFlop gesteuert, das Licht zusätzlich noch über ein Relais.
Wenn man auf die Steuerung der Hintergrundbeleuchtung und der Reset-Leitung (ist ja nicht umbedingt erforderlich) verzichten kann, braucht man diese Schaltung nicht.
Nachtrag: Ich empfehle es, diese Schaltung nicht zu benutzen, bzw. nachzubauen, da sie mit "heißer Nadel gestrickt" wurde und nicht zuverlässig funktioniert.

Stückliste:

Part     Value          Device     Package  Library  Sheet

BUS      ML10           ML10       ML10     con-ml   1
C1       100n           C5B2,5     C5B2,5   cap      1
C2       100n           C5B2,5     C5B2,5   cap      1
C3       100n           C5B2,5     C5B2,5   cap      1
CFL      MA03-1         MA03-1     MA03-1   con-lstb 1
D1       1N4148         1N4148     DO35-10  diode    1
EXT      MA04-1         MA04-1     MA04-1   con-lstb 1
IC1      74HC30         7430       DIL14    74xx     1
IC2      74HC175        74175      DIL16    74xx     1
IC3      74HC00         7400       DIL14    74xx     1
R1       4.7k           0204/7     0204/7   r        1
R2       4.7k           0204/7     0204/7   r        1
R3       4.7k           0204/7     0204/7   r        1
SUPPLY   MA03-1         MA03-1     MA03-1   con-lstb 1
U$2      REED           REED       REED     reedrel  1

Der Stecker BUS muß dann folgendermaßen mit dem LCD-Controller, bzw. dem parallelen Port verbunden werden:

 CFL-Controller (BUS)		LCD-Controller/Parallelport
------------------------------------------------------------
   1 - A0              -------   14 - /FEED
   2 - D3              -------    5 - D3
   3 - /RD             -------   16 - /RESET
   4 - D2              -------    4 - D2
   5 - /WR             -------    1 - /STROBE
   6 - D1              -------    3 - D1
   7 - D7              -------    9 - D7
   8 - D0              -------    2 - D0
   9 - /CS             -------   17 - /SELOUT
  10 - /RESET_OUT      -------   Reset SED1335 = Diode 1, Anode

Hier die Schaltung (PDF-Version) und ein Bild von dem Controller (die Platine auf der rechten Seite):

CFL/RES
Logig Schaltplan CFL-Controller

Die Software

Leider braucht fast jede Hardware auch ein Stück Software um eingermaßen sinnvoll zu funktionieren. Hier gibt es nun zwei Sachen: ein einfaches Testprogramm und einen Kernel-Treiber. Wer sich für die Programmierung des SED1335 interessiert, sollte sich auf jeden Fall das Datenblatt von der Seiko-Seite besorgen.

Ein Testprogramm

Dies ist ein einfaches Testprogramm mit ncurses-Oberfläche, womit man die grundlegenden Funktionen des LCDs ausprobieren kann. Zum kompilieren einfach in das Verzeichnis wechseln und make eingeben. Dann das Programm als root aufrufen, da es direkt auf den parallelen Port zugreifen muß. Nach dem Start erscheint im oberen Teil das Menu und im unteren sind Logging-Ausgaben zu sehen.

Hier ein Screenshot und ein Bild der Ausgabe auf dem LCD:

Screenshot Testprogramm LCD Testbild

Funktionen:

1 - Display on                 = Schaltet das LCD an
2 - Display off                = Schaltet das LCD aus
3 - Enter sleep Mode           = Bringt den SED und das LCD zum schlafen
4 - Wakeup from Sleep Mode     = Weckt den SED und das LCD wieder auf
5 - Display default GFX        = Zeigt die Grafik an (testbild2_bw.pbm)
6 - Display default Text       = Zeigt einen Text an
7 - Clear GFX Screen           = Löscht den Grafikbildschirm
8 - Clear Text Screen          = Löscht den Textbildschirm
9 - Cursor off                 = Schaltet den Text-Cursor ab
0 - Cursor on                  = Schaltet den Text-Cursor ein
c - Console Mode               = Ein pseudo Konsolenmodus. Man kann tippen. (Beenden mit .)
r - read Cursor address        = Liest die aktuelle Cursor-Adresse
g - GFX Test                   = Zeichnet eine Sinus-Kurve (ziemlich langsam!)
s - read Status flag           = Liest das Status-Flag vom SED
o - read control port          = Liest den Controlport (Parallelport)
b - get byte at cursor address = Liest das Byte an der aktuellen Cursor-Position
a - attribute test             = Zeigt ein paar Buchstaben invers an
e - Reset SED                  = Resetet den SED
w - Backlight on               = Schaltet die Hintergrundbeleuchtung ein
v - Backlight off              = Schaltet die Hintergrundbeleuchtung aus
x - Exit                       = Beendet das Programm


mdacon - Der Kerneltreiber

Dieses Kernelmodul ermöglicht es, das LCD als eine weitere Konsole zu betreiben. Es basiert auf dem Kerneltreiber für ein Toshiba T6963C-LCD-Controller, der von Alexander Frink (siehe auch http://wwwthep.physik.uni-mainz.de/~frink/linux.html) geschrieben wurde. Im Original basiert er aber auf dem Konsolentreiber für VGA und MDA Karten, der im Kernel-Tree enthalten ist (linux/drivers/video/mdacon.c).
Nun denn, ich habe den Treiber soweit auf den SED1335 angepaßt, daß man ihn als Modul bauen kann und er auch einigermaßen funktioniert. Den Treiber vgacon.c, der fest in den Kernel integriert werden kann, habe ich jedoch noch nicht umgeschrieben. Vielleicht kommt das aber noch, es sollte so schwer nicht sein.

Um den Treiber einzubinden geht man so vor:

  1. Den originalen Treiber /usr/src/linux/drivers/video/mdacon.c sichern.
  2. Den neuen Treiber mdacon_sed.c nach /usr/src/linux/drivers/video/mdacon.c kopieren.
  3. Jetzt oder schon vorher entscheiden, ob man Attribute (Nur inverse ist bis jetzt unterstützt) braucht, oder nicht. Denn die Attribut-Darstellung ist sehr langsam, da hierfür der Grafik-Layer verwendet wird und somit sehr viele Daten an das Display übertragen werden müssen. Die Langsamkeit macht sich besonders beim Scrollen bemerkbar. Wenn man also die Konsole richtig als Shell benutzen will, würde ich empfehlen, die Attribute auszuschalten. Will man aber z.B. meistens eine ncurses-Anwendung laufen lassen, ist es besser, die Attribute einzuschalten.
    Diese Einstellung kann man ändern, indem das #define WITH_ATTR auskommentiert wird oder eben nicht.
  4. In der Kernel-Konfiguration CONFIG_MDA_CONSOLE=m eintragen.
  5. Module neu bauen: make dep; make modules; make modules_install
  6. /etc/inittab ändern: Das Kernel-Modul stellt drei weitere Konsolen zur Verfügung, tty13, 14, 15. Um diese benutzen zu können, folgendes bei den gettys hinzufügen:
    13:23:respawn:/sbin/getty 38400 tty13 (Beispiel für Konsole 13)
    Auf die Konsolen kann dann mit der rechten ALT-Taste+Fn (n = 1 - 3) umgschaltet werden.
  7. Die geänderte inittab neu einlesen lassen: telinit Q
  8. Modul laden: modprobe mdacon und auf eine der Konsolen umschalten. Die Login-Meldung wird vermutlich nicht zu sehen sein, aber der Cursor sollte da sein und man kann sich dann einloggen.
  9. Fertig.

Probleme:

Hier ein paar Bilder von der Konsole:

Console MC Console MC 2 Console MC textview Console Shell

LCDproc

Der Controller und das Display funktionieren - ohne Änderungen an der Hardware - mit der letzten Version (v0.5.2) von LCDproc. Der dortige Treiber für den SED1330 benutzt genau die gleiche Portbelegung, sofern in der Konfiguration der passende Typ angegeben wird.

Download von http://lcdproc.org/

Konfiguration

Die Installation wird dann einfach anhand der Dokumentation durchgeführt. Hier auf meinem Rechner habe ich als Installations-Ort /usr/local/ benutzt.
Hier die Kurzform, der Treiber muss beim configure mit --enable-drivers=... angegeben werden. Es ist evtl. auch sinnvoll, den curses-Treiber mit zu bauen, da man damit schön die Ausgabe testen kann.

> tar xzvf lcdproc-0.5.2.tar.gz

> cd lcdproc-0.5.2

> ./configure --prefix=/usr/local --enable-drivers=curses,sed1330

> make

> su
# make install
Die Konfigurationsdateien liegen dann unter /usr/local/etc.
Die Datei für den LCD Daemon, LCDd.conf muss folgendermaßen angepasst werden:

LCDd.conf
## Server section with all kinds of settings for the LCDd server ##
[server]

...

Driver=sed1330

...

DriverPath=/usr/local/lib/lcdproc/

...

### Driver sections are below this line, in alphabetical order  ###

...

## Seiko Epson 1330 driver ##
[sed1330]

# Port where the LPT is. Common values are 0x278, 0x378 and 0x3BC
Port=0x378

# Type of LCD module (legal: G321D, G121C, G242C, G191D, G2446, SP14Q002)
# Note: Currently only tested with G321D & SP14Q002.
Type=SP14Q002

# Width x Height of a character cell in pixels [legal: 6x7 - 8x16; default: 6x10]
CellSize=6x10

# Select what type of connection [legal: classic, bitshaker; default: classic]
ConnectionType=bitshaker

Auf den ConnectionType kommt es besonders an! Es muss bitshaker verwendet werden, da hier dann die Zuweisungen des Controlports richtig passen (Siehe Dokumentation oder Source).

Die anderen Konfig-Dateien können erstmal so bleiben, sie sind für die Clients, wobei lcdproc hier der wichtigste sein dürfte. Dieser zeigt nämlich die verschiedenen Screens, z.B. System-Load, Netzwerkstatistik, usw. an.

lcdexec kann über das Menu bestimmte Befehle starten. Das Menu benötigt aber ein Keyboard am Display, hier also nicht zu gebrauchen. Testen kann man das, wenn man den curses Treiber verwendet.

lcdvc ist ein einfacher Teminal-Client. Man hat dann die aktuelle Konsole auf dem Display und kann sich dann einloggen (über die normale Tastatur), usw.

Auf der Website von LCDproc gibt es noch mehr Links zu anderen Clients und im Web sind bestimmt noch viele mehr zu finden.

Nun denn, auf zum ersten Test. Als root einmal den LCDd aufrufen:
#  LCDd -r 4 -f
...
Server running in foreground
Listening for queries on 127.0.0.1:13666
sed1330: Using LCD type SP14Q002
sed1330: Using ConnectionType bitshaker
sed1330: Text size: 53x24
sed1330: Cell size: 6x10
sed1330: Graphical size: 320x240
...

Optionen sind mit -r 4 der Report-Level und mit -f die Anweisung, im Vordegrund zu laufen, also nicht als daemon.

Jetzt sollte am angeschlossen Display eine Ausgabe zu sehen sein:
## LCDproc Server ##########################+
Clients: 0
Screens: 0


Wenn das geklappt hat, kann man mal den lcdproc Client starten:
> lcdproc -f

Jetzt sollten die verschiedenen Screens nach und nach auf dem Display angezeigt werden. Diese können in der Konfig-Datei /usr/local/etc/lcdproc.conf angepasst werden.

Zu guter Letzt sollten dann noch die init-Scripte kopiert werden, damit der LCD daemon und der oder die benötigten Clients beim hochfahren des Systems gestartet werden.
Hinweis: Ich verwende hier debian und kopiere also die passenden Scripts:

# cp scripts/init-LCDd.debian /etc/init.d/LCDd

# cp scripts/init-lcdproc.debian /etc/init.d/lcdproc

Jetzt noch die Links auf die Runlevel anlegen.

Start in rc2
# cd /etc/rc2.d

# ln -s ../init.d/LCDd S20LCDd
# ln -s ../init.d/lcdproc S50lcdproc

Stop in rc0 und rc1
# cd /etc/rc0.d

# ln -s ../init.d/LCDd K50LCDd
# ln -s ../init.d/lcdproc K20lcdproc

# cd /etc/rc1.d

# ln -s ../init.d/LCDd K50LCDd
# ln -s ../init.d/lcdproc K20lcdproc

Fertig :-)

Abhilfe bei Timing Problemen

Bei meinem Display funktionierte die Geschichte leider nicht ganz auf Anhieb. Beim Testen mit LCDd wurde auf dem Display nur ein komplett schwarzes Bild angezeigt. Nachdem ich mir mal die Signale der Steuerleitungen mit dem Oszilloskope anschaute, war das auch kein Wunder. Von Rechtecksignalen war da nicht mehr viel über, so hat vermutlich nicht mal die Initialisierung richtig geklappt. Vermutlich liegt das an dem zu aggressiven Timing im Treiber sed1330, zumindest für mein Setup hier, welches im Moment zugebenermaßen auch etwas verbastelt ist. In Verbindung mit einem schlechten und/oder langen Parallelportkabel kann es dann halt Probleme geben.

Aber es gibt ja den Source-Code. Nach dem Einfügen von einigen Pausen in die Display Command Routine funktionierte alles wie gewünscht. Auch die Signale sahen auf dem Scope dann eingermaßen gut aus.

Hier die entsprechenden Änderungen am Source:

server/drivers/sed1330.c

/////////////////////////////////////////////////////////////////
// Send a command and accompanying p
// INTERNAL
//
void
sed1330_command( PrivateData * p, char command, int datacount, unsigned char * data )
{
    int i;
    int port = p->port;
    int s = 2;
    
    port_out(port+2, (p->nRESET|p->nWR|p->A0) ^ OUTMASK);       // set A0 to indicate command
    port_out(port, command);                // set up p
    uPause(s);
    port_out(port+2, (p->nRESET|p->A0) ^ OUTMASK);      // activate ^WR
    uPause(s);
    port_out(port+2, (p->nRESET|p->nWR|p->A0) ^ OUTMASK);       // deactivate ^WR again
    port_out(port+2, (p->nRESET|p->nWR) ^ OUTMASK);     // clear A0 to indicate p

    for (i = 0; i < datacount; i++) {
        port_out(port, data[i]);            // set up data
        uPause(s);
        port_out(port+2, (p->nRESET) ^ OUTMASK);        // activate ^WR
        uPause(s);
        port_out(port+2, (p->nRESET|p->nWR) ^ OUTMASK); // deactivate ^WR again
        uPause(s);
    }
}

Hier ist der Output von diff -u zum downloaden: sed1330-timingchange.diff

This works on my machine ;-)


Links