Nokia 3510i-Display
(mit S1D15G14, Version 1.1)

Nachdem die Ansteuerung des 3310-Displays so fein klappte, musste etwas neues her.
Irgendwie hab ich mich an meinen ganzen monochromen Displays sattgesehen.
Ich weiß nicht mehr wie und wann, aber irgendwann bin ich auf einen Forumeintrag auf www.mikrocontroller.net gestoßen.
Das 3510i-Display hat 98x67 Pixel, 4069 Farben und ist relativ günstig bei eBay zu bekommen (Ich habe mit Versand knapp 10 Euro gezahlt).

-?- -?-

Die Kontakte direkt am Display sind zwar lötfähig, ich habe trotzdem die Kontakte im Anschlussrahmen benutzt. Aus der "Vernichtung" des 3310-Displays habe ich gelernt: nur noch dünne Kupferlackdrähte an das Display - Flachbandkabel sind viel zu starr und die Kontakte reißen schneller ab.

Der "Nachteil" von dem Display ist, dass der Controller (S1D15G14 von Seiko/Epson) 3V will. Darüber wird es mit der richtigen Farbdarstellung schwierig bzw. der Controller wird zerstört. Deshalb kann man das Display leider nicht ohne weitere Elektronik am PC anschließen.
Um den TTL-Pegel der parallelen Schnittstelle auf 3V herunter zu trimmen, kommt ein CD4050 zum Einsatz. Die Spannungsregelung übernimmt ein (eigentlich völlig überdimensionierter) LM317:

-?-

Achtung beim Aufbau der Schaltung: Zuerst den ganzen Logikteil ohne Display aufbauen und mit dem Potentiometer die Spannung auf 3V trimmen. Erst jetzt kann das Display angeschlossen werden. Den Stromlaufplan im EAGLE-Format zu dieser Schaltung gibt es im Download-Bereich.

Bei der Ansteuerung muss ich einen großen Dank an Martin K. aussprechen, der mir mit seinem Quelltext für Mikrocontroller eine sehr große Hilfe beim Einstieg gab!
Leider ist seine Seite jetzt offline gegangen und ich kann keinen Link zu ihm setzen.

Das Interface des Controllers nennt sich MPU und kann seriell und parallel angesteuert werden, wobei das parallele Interface leider nicht nach außen getragen wird. Eine weitere Besonderheit bei dem Interface (in diesem speziellen Fall) ist, dass ein Datensatz nicht 8 Bit, sondern 9 Bit lang ist. Als erstes Bit wird immer übertragen, ob es sich bei den Daten um einen Befehl oder Parameter handelt.

Bei der Initialisierung des Displays kann man sich an das, im Datenblatt beschriebene Beispiel ab Seite 82 halten.

Interessant ist bei dem Display die Übertragung der Displayinhalte:
Während der Initialisierung kann eingestellt werden, ob das Display mit 12 Bit Farbtiefe (4069 Farben) oder 8 Bit (256 Farben) arbeiten soll.
Bei 12 Bit ist jeder Pixel 3 Halbbytes lang. Weil man dem Controller aber schlecht 1.5 Byte senden kann, werden immer 2 Pixel übertragen.
Um die Farbwerte richtig zusammenzusetzen, habe ich für mein Modul ein paar (etwas unübersichtliche) Formeln geschrieben, damit die Umsetzung nicht unnötig lang wird.

Damit du mir auch glaubst, dass es funktioniert, hier ein kleiner "Screenshot" des Displays bei der Arbeit:

Die Streifen im Bild stammen nicht von meiner Kamera, sondern vom Display selbst. So schlimm wie hier sieht es IRL allerdings nicht aus.
Wie beim 3310-Display sind auch beim 3510i-Display die Pixel nicht genauso hoch wie breit, was den Inhalt etwas gestreckt erscheinen lässt. Schade eigentlich.

In dieser Version der Ansteuerung fehlen noch ein paar Features des Controllers. Entweder schreibst du sie noch selber oder wartest, bis ich sie schreibe ;)

Download:
Modul: gLCD (Code-Highlighting, gLCD.bas befindet sich im Beispiel)
Programmbeispiel: gLCD-Beispiel (VB6)

Achja: Momentan arbeite ich an der Beschleunigung der Ausgabe an das Display. Vorbeischauen in der nächsten Zeit wird sich wahrscheinlich lohnen ;)

Nachtrag:
Also, ich habe jetzt so einiges versucht, das Display schneller zu bekommen...
Zuerst hab ich die serielle Schnittstelle mit PIC als RS232-SPI-Wandler verwendet, was auch bei 20MHz µC-Takt nichts brachte (die Testroutine zwischen PIC selbst und dem Display war aber sehr effektiv - das Spannungswandler für die Kontrastspannung war noch nicht fertig, da war schon der "Testinhalt" auf dem Display :) )
Nachdem ich festgestellt habe, dass das so nichts wird, habe ich das Display direkt an die Schnittstelle (mit Pegelwandler natürlich) angeschlossen. Ich weiß nicht - entweder sind die Treiber zu lahm (um TxD direkt anzusteuern, kann ich inpout32.dll nicht verwenden) oder VB ist einfach ungeeignet für eine relativ schnelle Übertragung.
Vorerst wird es also noch nichts mit einer schnelleren Übertragung, aber ich bleib dran!