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!