Keiang's electronics hobby side

This website deals with the topics of electronics, digital signal processing and embedded programming.

flag-english flag-german
 

Digitale, temperaturabhängige Lüfterregelung mit USB-Interface - Grafik-LCD SED1565

Anschluss des Grafik LCD "SED1565" an der Lüfterregelung



GLCD HP12542-DYO

 

Das hier verwendete GLCD arbeitet mit dem Grafikcontroller SED1565 und hat eine Auflösung von 128* 64 Bildpunkten.


Vergleich: T6963C < -- > SED1565

Im Gegensatz zu dem anderen hier verwendeten Grafikcontroller t6963c besitzt der SED1565 lediglich einen Grafikmodus und keinen Textmodus. Die Textdaten können also nicht als ASCII-Zeichen an das Grafik LCD übertragen werden, sondern müssen vorher von dem Mikrocontroller über eine Fonttable in ein Pixelmuster konvertiert werden und können dann als Grafikdaten in das RAM von dem Grafik-LCD geladen werden. Das hat einen sehr großen Nachteil, so müssen für jedes Textzeichen 6 Bytes übertragen werden, da jedes Textzeichen als ein Pixelmuster von 6 * 8 Pixel dargestellt wird -> 6 Byte. Dadurch werden reine Textausgaben deutlich langsamer.

In dem Textmodus von dem t6963c-Controller genügte es ein Zeichen im ASCII-Code zu übertragen -> 1 Byte. Der Controller "übersetzte" dann dieses ASCII Zeichen selbstständig in ein Pixelmuster. Auch verfügt der Controller SED1565 nicht über die Möglichkeit zwischen verschiedenen Pages hin und her zu schalten, was sehr vorteilhaft bei Animationen auf dem GLCD sein kann. Zwar hat der SED1565 verschiedene Pages, allerdings werden die hier dazu benutzt die einzelnen Grafikzeilen anzusprechen. Es kann also eine Animation nur dadurch erreicht werden, indem man aktiv den Raminhalt ändert (dazu weiter unten mehr) .

Bei versuchen mit Animationen schien es auch so, als ob das Grafik-LCD mit dem SED1565 Controller einiges träger reagiert. Dies machte sich zum Beispiel bei einem kontinuierlichen verschieben des Bildes bemerkbar was sich als verschwimmen und einer unscharfen Grafik äußere . Der SED1565 hat aber nicht nur Nachteile, so hat er z.B. einen internen DC-DC Wandler der für die Erzeugung der negativen LCD-Kontrastspannung sorgt. Der Kontrast muss aber nicht, wie bei vielen LCDs, mit einem externen Poti eingestellt werden sondern kann durch einen Befehl an den Grafik Controller in 32 Stufen angepasst werden.



technische Beschreibung des GLCD

 

Fontsatz:

Da der Controller "SED1565" keinen eigenen Fontsatz hat, muss sich dieser in dem Mikrocontroller ( µC ) befinden und auch dort verwaltet werden. Dieser Fontsatz ist in dem Eeprom der Regelung abgespeichert und kann sehr einfach durch einen anderen ausgetauscht werden. Dazu habe ich in der Windows-Software eine extra Funktion eingebaut, die einen neuen Fontsatz in das Eeprom flashen kann. Ein Fontsatz kann z.B. dem Tool FastLCD - ver 1.4.1 Free! erstellt / verändert werden, so kann das Aussehen vom dem GLCD individuell angepasst werden. Eine andere Möglichkeit wäre für jedes Textzeichen die 5 Bytes selber in das Eeprom oder die Fonttable einzutragen. Die Umwandlung von einem Pixelmuster in die richtigen Bytes kann mit diesem Tool hier gemacht werden: Custom-Character Calculator for KS0108 / SED1565 and compatibles ( 5*7 Font )


Speicherorganisation:

Das hier vorgestellte GLCD ( "Hyundai HP12542R-DYO" ) hat eine Auflösung von 128 * 64 Pixel. Für die Verwaltung dieser Pixel hat es einen eigenen Ram mit einer Größe von 132 * 65 Bit, es besitzt also etwas mehr Ram wie es für die Darstellung seiner Pixel benötigt. Speicherorganisation Für jedes gesetzte Bit in dem Ram wird von dem Grafikcontroller automatisch ein Pixel auf dem GLCD aktiviert ( siehe Bild ). Daneben gibt es noch einen speziellen Befehl ( 0xa1 ) der das gesamte GLCD invertiert, es wird dann für jedes nicht aktive Bit ein Pixel aktiviert. Mit dem Befehl "0xa0" kann die Invertierung wieder aufgehoben werden.

Das GLCD ist in insgesamt 8 Pages aufgeteilt. Die einzelnen Pages sind Horizontal angeordnet und jeweils 8 Pixel hoch / 128 Pixel breit. Die zugehörigen Bytes in dem Ram, die diesen Pages zugeordnet sind, stehen senkrecht in der Page. Wobei das niederwertigste Bit immer das oberste Pixel beeinflusst.

Um z.B. die ersten 4 Pixel (linke obere Ecke) auf dem GLCD zu aktivieren und die darunter liegenden 4 Pixel zu löschen muss das Datenwort "0x0f" in die erste Spalte (ColumnAddress 0x00) der ersten Page (Page 0) geschrieben werden. Bei jedem Schreib-/Lese-vorgang erhöht der Controller automatisch den Pointer in der Page. Es muss also nicht vor jeden Schreibvorgang die gewünschte Spalte ausgewählt werden, sondern die Daten werden idealerweise in Page-Blöcken an den Controller/Ram übertragen. Das erspart einiges an zusätzlichen Adressbefehlen und macht die Ausgabe von Grafikdaten doppelt so schnell. Man sollte aber beachten das die Umschaltung zwischen den Pages nicht automatisch von dem Controller übernommen wird und man selber dafür sorgen muss, daß nach 128 Datenbytes in die nächste Page gewechselt und der Pointer wieder auf die erste Spalte (Column 0) gesetzt wird. Die Umschaltung zwischen den Pages wird mit dem Befehl "0xb..." gemacht, mit dem niederwertigen nibble ( nibble = untere oder obere 4 Bit eines Bytes) des Befehls wählt man die gewünschte Page aus. Der Befehl 0xb0 würde also die Page0 auswählen. Um zur richtigen Spalte zu gelangen muss man einen "Doppelbefehl" an das GLCD schicken, dabei wird getrennt einmal das high-nibble und anschließend das low-nibble der gewünschte Spalte übertragen. Damit das Controller weiß welches der beiden Nibble gerade ankommt, gibt es zwei unterschiedliche Befehle dafür. Mit dem Befehl 0x1X wird das high-nibble und mit dem Befehl 0x0X das low-nibble übertragen. Um z.B. zur 20. Spalte zu gelangen ( 20 = 0x14 ) muss man zuerst die Befehle 0x11 und anschließend 0x04 an den Controller senden. Der Controller setzt darauf hin seinen Pointer auf die Spalte 20 und man kann ab dieser Stelle anfangen Daten in das Ram zu schreiben. Für einen normalen Pagewechsel würde man natürlich den Pointer auf die erste Spalte stellen und ab dieser Position die Daten eintragen.

Wenn man z.B. aber nur einzelne Bits in dem GLCD manipulieren möchte und die Grafikdaten nicht in dem Ram von dem µC gespiegelt hat, gibt es die Möglichkeit die Daten aus dem Ram auszulesen, zu manipulieren und wieder zurück zuschreiben. Dafür gibt es den speziellen Befehl 0xe0, dieser bewirkt das mit dem Lesen des Ram's der Spaltenpointer nicht automatisch um 1 erhöht wird. Ein Schreiben allerdings erhöht wiederum den Spaltenpointer. Dieser Modus muss spätestens am Ende der Page mit Befehl 0xee beendet werden, da innerhalb dieses Modus der Controller eine Manipulation des Spaltenpointer's nicht zuläßt. Ein Pagewechsel wäre also nicht wie bisher möglich.



Interface

Der Controller SED1565 (S1D15605) von EPSON lässt sich sowohl seriell als auch parallel ansteuern. In dem parallelen Modus kann nochmals zwischen 2 verschiedenen übertragungsarten unterschieden werden. So kann das GLCD direkt von einer 6800 CPU aber auch von einer 8080 CPU angesteuert werden. Die Unterscheidung zwischen den verschiedenen übertragungsarten wird mit Hilfe der Steuerleitungen CS2 und C86 gemacht. Bei dem hier vorgestellten GLCD liegen diese beiden Leitungen fest auf high womit das 6800 Busprotokoll eingestellt ist



Animation

Wie schon am Anfang angesprochen kann auf diesem Controller eine Animation nur dadurch erreicht werden indem man den Raminhalt aktiv ändert. Allerdings bietet der Controller zumindest die Möglichkeit an das Bild von oben/unten "durchlaufen" zu lassen. Dazu hat er einen speziellen Befehl durch den das Bild anders aus den Ram aufgebaut wird. Durch diesen Befehl kann z.B. das gesamte Bild um ein Pixel nach oben oder unten verschoben werden. Dabei wird dem Controller aber nicht gesagt das er das Bild relativ um ein Pixel verschieben soll sondern es wird dem Befehl eine weiterer Wert mitgegeben der ihm sagt um wieviel das Bild von der normalen Position (also absolut) verschoben werden soll. Dabei kann das Bild um 63 Positionen verschoben werden und landet mit der 64 wieder auf der normalen Position.

In einem ersten Versuch habe ich allerdings diesen Befehl von dem Controller nicht benutzt sondern den Raminhalt von dem GLCD in den µC gespiegelt und diesen dort von "Hand" um jeweils ein Pixel nach oben verschoben.

Ein Video davon gibt es hier: GLCD slide 1.

und eine 2.Version gibt es hier: GLCD slide 2.

[ Mein Dank an Silversilence für seine Hilfe beim Entwickeln der GLCD Routine. :-) ]



Anpassungen für die Lüfterregelung V1.4

Um das Grafik-LCD an der Regelung zum laufen zu bringen sind im wesentlichen zwei Anpassungen nötig.

  1. Verwendung der Adapterplatine GLCD SED1565-Adapter (siehe unten)
  2. auf der Regelung Austausch des Eeproms 24c64 mit dem größeren Eeprom 24C128

 

Verdrahtungsplan des GLCDs mit der Regelung:

Die hier aufgeführte Pinbelegung von dem GLCD gilt für das Display "Hyundai HP12542R-DYO", es kann aber auch jedes andere Grafik-LCD dem "SED1565" Controller verwendet werden. Bei anderen GLCDs kann natürlich eine andere Pinbelegung vorkommen, hier muss dann anhand der Funktionen der Verdrahtungsplan angepasst werden.


Rückseite von dem GLCD HP12542R-DYO

Rückseite von dem GLCD HP12542R-DYO


Grafik LCD mit "SED1565" Controller
( Funktion )
Lüfterregelung V1.4d
( Anschluss: "Display" )
Pin 1+2 ( Backlight + ) Anschluss: "LCD-Backlight"
Pin 3+4 ( Backlight - ) Anschluss: "LCD-Backlight"
Pin 5 ( keine Funktion ) -
Pin 6 ( Gnd ) Pin 13 ( Gnd )
Pin 7 ( Vcc ) Pin 14 ( +5V )
Pin 8 ( Gnd ) Pin 13 ( Gnd )
Pin 9 ( D7 ) Pin 1
Pin 10 ( D6 ) Pin 2
Pin 11 ( D5 ) Pin 3
Pin 12 ( D4 ) Pin 4
Pin 13 ( D3 ) Pin 5
Pin 14 ( D2 ) Pin 6
Pin 15 ( D1 ) Pin 7
Pin 16 ( D0 ) Pin 8
Pin 17 ( En ) Pin 9 ( über inv. Schmitt Trigger ! )
Pin 18 ( R/W ) Pin 10 ( über inv. Schmitt Trigger ! )
Pin 19 ( Vcc ) Pin 14 ( +5V )
Pin 20 ( A0 ) Pin 11 ( über inv. Schmitt Trigger ! )
Pin 21 ( /CS1 ) Pin 15 ( über inv. Schmitt Trigger ! )
Pin 22 ( /Res ) Pin 16 ( über inv. Schmitt Trigger ! )
Pin 23 ( Gnd ) Pin 13 ( Gnd )
Pin 24 ( Gnd ) Pin 13 ( Gnd )

 

 


Schaltplan, Platinenlayout


 

Schaltplan

Schaltplan GLCD SED1565-Adapter

 

Bestückungsplan

Bestückungsplan


Platinenlayout

Platinenlayout

 

GLCD mit umgebauter Hintergrundbeleuchtung

GLCD mit umgebauter Hintergrundbeleuchtung




Bauteileliste

 

Bauteil Wert Beschreibung Stückzahl Reichelt Bestellnummer
GLCD-Adapter
IC6 24c128 Austausch des Eeproms auf der Regelung 1 ST 24C128 BN6
IC1 7414 Hex Inv Schmitt Trigger 1 74AC 14
C1 / C2 100nF Keramik-Kondensator 2 Z5U-5 100N
IC-Sockel 14pol. IC-Sockel, 14-polig, superflach, vergold. 1 GS 14P
Wannenstecker 16pol. Wannenstecker, 16-polig, gerade 1 WSL 16G
Pfostenbuchse 16pol. Pfostenbuchse, 16-polig, mit Zugentlastung 2 PFL 16
Folienkabelbuchse 24pol. aus Bausatz von Pollin: 1 120 297
Flachbandkabel        


Downloads

 

 


KeiAng

Published on: Monday, November 14 2011 (3022 reads)
Copyright © by Keiang's electronics hobby side

[ Go back ]

 

Electronic Projects