www.lamepage.de

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.

  • 31.03.2006
    • Schaltplan, Layout usw. der Spannungsversorgung gibts jetzt als Eagle-Dateien. Danke an Ralf Grafe für diese Daten. Alles wie gehabt im Archiv zu finden (gfxlcd-0.3.tar.gz). Siehe unten.
    • Möglicherweise gibt es Probleme den SED1335F0B zu beschaffen, da dieser wohl nicht mehr hergestellt wird. Wenn man noch irgendwo einen auftreiben kann, dann bitte auf das Package (QFP60) achten, nur dieses paßt auf die u.a. Platine.
      Info: Der Nachfolger des SED1335 ist wohl der Epson S1D13700. Dieser hat 32k SRAM Display Memory schon eingebaut, benötigt aber andere Betriebspannungen (Vcore 3.3V).
  • 04.03.2006
    • Die Bilder der Schaltpläne auf dieser Seite durch PDF-Dateien ersetzt und diese auch dem Archiv hinzugefügt (gfxlcd-0.2a.tar.gz). Siehe unten.
    • Des weiteren gibt es jetzt Scans vom Datenbuch des Epson-LCDs. Siehe unten.
    • Das Datenblatt von Seiko für den SED1335 gibts wohl nicht mehr. Also Link entfernt.
      Bei www.eio.com gibts das aber noch. Link hinzugefügt.
      Bei Epson ist der S1D13305 noch gelistet, allerdings "discontinued". Link berichtigt.
    • Die Seite von T. Baumann gibts auch nicht mehr, also Link entfernt.
  • Januar 2004 (eigentliche Änderung am 27.05.2003)
    Es gibt ein paar kleine Änderungen in den Shematics und im Layout, da neuere Eagle-Versionen anscheinend etwas genauer mit dem ER-Check sind, bzw. ich bei der ersten Fassung nicht wirklich darauf geachtet habe. Außerdem wurden die Eagle-Libs ein wenig verfeinert und zwei Komponenten in der Spannungsversorgung geändert.
    Die neue Version gibts unten beim Download.
  • Januar 2004
    Leider bin ich nicht dazu gekommen, die Software (aka Kernel-Modul) in irgendeiner Weise zu verbessern oder zu optimieren. Es wird wahrscheinlich auch nicht dazu kommen, da das LCD im Moment nicht wirklich mehr benutzt wird und dazu noch an einem Atmel-AVR Microcontroller hängt. Die Weiterentwicklung an diesem Projekt kann und will ich hier also nicht garantieren. Für Fragen, Probleme oder sonstiges Feedback bin ich aber unter der unten angegebenen Adresse wie gehabt zu erreichen.

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:

  • Dieses Modul ist ALPHA-SOFTWARE! Es wird möglicherweise den Rechner, bzw. den Kernel abschießen, wobei mit Datenverlusten zu rechnen ist! BENUTZUNG AUF EIGENE GEFAHR!
  • Wie gesagt, das Scrolling ist ziemlich langsam. Bei eingeschalteten Attributen ist es unerträglich!
  • Das Modul läßt sich nicht mehr entfernen, auch nicht, wenn man die gettys wieder killt. Warum das so ist, kann ich momentan nicht sagen.
  • Wenn kein Display angeschlossen ist, oder besser gesagt, wenn das Modul nicht mit dem Display kommunizieren kann, dann wird es sich und den Kernel mit großer Wahrscheinlichkeit aufhängen!

Hier ein paar Bilder von der Konsole:

Console MC Console MC 2 Console MC textview Console Shell

Links