Hi, Ich habe schonmal gepostet, und keine Antwort bekommen, darum gehe ich die Sache jetzt einmal ein bisschen gründlicher an (und ich bitte darum meine Rechtschreibung/Grammatik zu entschuldigen ;) ): Ich habe LCD-Display (Hitachi LMG9520RPCC) günstig bekommen, und das ganze war natürlich ohne einen Grafikkontroller um das Teil anzusteuern. Das Display verfügt über: - 320 x 240 x 3 (8Farben) = 28.800 kbyte Displaygrösse - C1 (byte-Takt) - C2 (Zeilentakt) - FLM (First Line Marker) - 8 Datenleitungen Ich habe mich mal zu dem Thema schlau gemacht (zum Glück habe ich Urlaub ;) ), und bin auf folgendes gekommen: 1. Ich kann das Display über einen Standard-Controller anschliessen, oder einen Controller über einen Microprozessor emulieren. 2. Für mein Display gibt es leider keinen Standardcontroller, weil es wohl ein bisschen zu alt ist (3bit pro pixel sagt schon alles, oder :) ), und eine selbstgestrickter sowieso besser (sprich: flexibler) wäre. 3. Ich brauche weiterhin eine negative Steuerspannung Vee (-23 Volt) und einen Inverter (460 V bei 6 mA) für das Backlight. Also, und nun guck 'mer mal: Das einfachste zuerst: Die negative Steuerspannung für das LCD. Auf meinem Datenblatt steht was von -23 Volt. Nun ja, ich kenne die Spannungsregler 7920 und 7924, die eine Spannung von -20V bzw -24 Volt erzeugen, und darum nehme ich den 7924, und hoffe mal auf's beste. Als nächstes: brauche ich den Inverter fürs Backlight: 460V bei 6 mA, einem Takt von 30k bis 85KHertz und mit einer "starting discharge voltage" von 1000V . Das bedeutet wohl, das Teile sollte ohne Belastung mehr als 1000V liefern, und unter Load dann auf ca 460V bei einem Strom von 6mA runtergehen. Die 1000V sind dabei die "Zündspannung", ohne die wohl gar nix läuft. Eine ganz nette Doku dazu hab ich unter "http://www.ergpower.com/pdf30/confer.pdf" gefunden. Bei Conrad habe ich so ein Teil gesehen, das von admatec ist, und ohne Belastung 1000V liefert, danach auf eine Spannung von 340V bei 5+-1ma runter geht. Ich bin mir nun nicht sicher, ob der Unterschied von 340V zu den nötigen 460V das Teil jetzt zu Dunkel bzw. funktionsunfähig machen. Wenn ich mehr Spannung (Vin = 11-13V) beim Eingang gebe, ist es wahrscheinlich so (steht zumindest in der Doku, wo ich oben angegeben habe), dass die Ausgangsspannung höher geht, aber der Ausgangsstrom auch. Und wie ich gelesen habe, ist der Ausgangsstrom direkt für die Lebenszeit der CCFL verantwortlich. Ich brauche jetzt nicht, dass mir das Teil unter der Nase wegraucht... Ich hab' mir auch schon überlegt eine einfache billige Kaltkathodenlampe zu kaufen und das Teil auszuschlachten (die Dinger werden einem ja in jedem Moddingladen nachgeworfen), ich kann aber die Spannung/Taktung ohne Oszi nicht austesten, falls mal einer Erfahrungen damit gemacht hat, dann meldet euch bitte. Weiterhin hat das Teil bei Conrad leider nur einen Takt von 26KHertz. Die Default-Frequenz bei meinem Display sollte wohl bei 70KHertz (min/max bei 30 und 85) liegen, aber ich probiers halt einfach mal, und hoffe das haut hin. Die Frequenz hat zwar nichts mit der Helligkeit oder der Langlebigkeit des Backlights zu tun, aber es könnte evtl. Störungen/Interferenzen mit der Darstellung geben. Da das ganze aber ein recht primitives Display ohne Grafikengine ist, und der Frequenzbereich sowieso schon so gross ist, hoffe ich hier auch wieder mal aufs beste :) ... Trotzdem, falls einer da mehr weiß, wäre ich für jede Info sehr Dankbar. Hier ist der Link zum Datenblatt des Inverters bei Konrad: http://www.produktinfo.conrad.com/datenblaetter/175000-199999/183571-da-01-deLCD_Inverter_12V_Typ_ADL-10L.pdf Und jetzt geht's ans eingemachte: Die Logik ! Ich hab hier einige threads dazu gelesen, und die waren teilweise auch recht lang, aber wie es aussieht will jeder, soweit er kann, einen fertigen LCD-Controller verwenden. Leider gibt es für mein Display keinen, darum hab ich mir versucht selber was einfallen zu lassen. Dabei kam ich auf ein paar Gründe, die für beide Vorgehensweise sprechen: fertige Logik: - Einfach anzuschliessen - vielzahl an Steuerfunktionen (Blit, panning, etc..) - kompakt Eigene Logik: - man lernt etwas dabei ;) - konfigurierbar wie man will (2,3,4 Displays/backbuffer, etc.. ) - billiger - komponenten leicht zu beschaffen - Displaytricks für höhere Farbzahl (8 -> 4096, etc..) leicht machbar - simple Logik die mit kleinen Variationen auf viele Displays angepasst werden kann Ich finde es sprechen viele Gründe dafür einen eigenen Kontroller zu bauen, obwohl ich zugeben muss, dass, in meinem Falle, der Grund, dass es für mein Display nunmal keinen Controller (mehr) gibt, doch recht zwingend war... :) Ich habe dazu mich mal umgeschaut, und die Idee das Teil direkt mit einem Mikrokontroller anzusteuern ist doch recht ansprechend. Jemand hatte die Idee das mit einem Atmel Mega128 zu machen, und das klang ganz interessant. Bei meinem Display bedeutet das; 320 x 240 x 3bpp / 8bit = 28800Kb * 70fps = ca 2Mbyte pro Sekunde. Bei 16Mips des Mega128 und 8bit Dateninterface des LCD-Diplays wären das wohl 8 Befehle bzw. 500ns pro Pixel. Das müsste an sich doch recht einfach zu machen sein. Also habe ich mir die Ganze Sache mal durch den Kopf gehen lassen: - 2 SRam Bausteine für den Speicher (eines zum Darstellen und eines zum beschreiben) - 1 Microprozessor um die Daten darzustellen - evtl. 1 Microprozessor um die Daten reinzuschreiben (vielleicht unnötig) Bei den SRam bausteinen könnte ich jetzt 2x 32Kb nehmen, was bei meinen 28,8K pro Page völlig reichen würde, oder z.B.: 2 128K Bausteine mit 4 Pages zum cyclen oder 2 512er mit 16 Pages zum cyclen nehmen. Ich habe da von dem Trick gehört (Als Amiga-Veteran ;) ), dass wenn man die Pages aus alternierenden Memoryblöcken holt so bei 16Pages von 8 Farben auf 4096 interpolieren kann, und das ist doch 'ne ganz feine Sache. die Verschiedenen Pages könnte man auch ganz einfach über den Adressbereich der ICs ansteuern und wären, jedem dem die alte x86 Assemlerhoblerei geläufig ist, bekannt. Zur Einfachheit versuche ich es aber erst einmal mit nur 2 Pages: Eine zum lesen, eine zum schreiben. Dazu brauche ich: - 2 * 15 Adressbits (2^15 = 32768) - 2 * 8 Datenbits (fürs schreiben der LCD-Daten) - 2 mal chipselect/Outputenable und writeenable der Srams - die Steuersignale des LCDs: flm (Bildstart), c1 (nächste Zeile), c2 (nächstes byte) Ergo: 2*(15+8+3) +3 = 55 Datenleitungen !!! Nunja das geht so nicht ! Also, dann hängen wir mal den Optimierer raus: Die Adressbits der beiden srams kann ich zusammenfassen. Ich steuer die dann beide zwar gleichzeitig an, muss dann aber mit z.B.: einer Reihe Und-Gatter den Mikroprozessor und die SRams entkoppeln, so dass ich nur das Lese-Ram ansteuere, und das schreibe-Ram seperat ansteuern kann. 15 Leitungen gespart, eine zum Ansteuern verschendet, Netto: 14 gespart. Die gleiche Leitung mit dem die Und-Gatter gesteuert werden, kann ich quasi negiert als Writeenable für das Schreibe-Sram und nicht negiert für das Lese-Sram verwenden, und das ganze negiert für die outputenables (sram 1: we-ja oe-nein & sram2: we-nein oe-ja) : 4 Steuerleitungen gespart. Das Schreiben und Lesen trenne ich wohl doch in 2 Prozessoren auf, schon allein wegen der Performance. Vom 2. Prozessor steuere ich dann auch die Leitung der Und-gatter, die den 1.Microprozessor und das Sram entkoppeln, und schalte damit zwischen den beiden Srams vom 2. Microprozessor aus hin und her, und mache diesen Somit zum Steuerprozessor. Das chipenable des lese-rams kommt dann auch auf diesen : 8 Datenleitungen + 2 Steuerleitungen gespart. Jetzt stechen nur noch die dicken 15 Adressleitungen raus, und da hatte ich eine Idee: da gibt es doch die Möglichkeit anstatt alle Adressen (0-28799) nacheinander anzusprechen einfach einen zähler zu nehmen, den man dann durchtaktet. Leider gibt es den nicht in einem Baustein, aber 2x8er zähler in Kaskade tun es doch auch. Man brauch dann eine Leitung für den Reset, aber die kann man mit der Steuer-Leitung für das Display zum Seitenaufbau verbinden. Das hat auch noch den netten Nebeneffekt, dass dann die Entkoppelung des Microprozessors und der SRams gnadenlos vereinfacht wird, und zwar von 15 auf 1 Pin :), ergo: 15 adressleitungen + 1 lcd-steuerleitung gespart, 1-Resetleitung für zähler + Display verschwendet, netto: 14 gespart. Da man nun einen quasi 16-bit Zähler anstatt eines 15-bit zählers hat, könnte man nun das Ram ab Leitung 1-15 des Zählers beschalten und Leitung 0 als Steuerleitung c2 (Datenbyte übernehmen) für das LCD-Display verwenden. Man muss dann doppelt so viele Pulse (28800 * 2) geben, aber ob man jetzt einen Puls für den Zähler und dann noch einen für die Steuerleitung gibt, oder 2 Pulse für die Zähler gibt ist ja letztendlich eigentlich egal. Aufpassen muss man nur auf die Geschwindigkeit der Zählerbausteine, denn wenn die bei 10ns pro Ausgang liegt, kommen da ganz schnell 150ns (15Leitungen) zusammen, und das entspricht etwa 3 Takten, wo der Prozessor still stehen muss (nop) und das sind immerhin 30% der Gesamten Zykluszeit pro Pixel. Man könnte hier noch eine Leitung sparen, aber das kostet dann doch zuviel Zeit (bis zu 160ns !), die man aber evtl. Parallelisieren könnte. Ausserdem kann man die Leitung c1 für das LCD-Display, mit der das Ende der Zeile Signalisiert wird einigermassen elegant sparen: Mein Display ist 320 Bildpunkte breit, bei 3 farben sind das 120 byte. Wenn ich jetzt das 120. byte übertrage, kann ich das mit einer Und-verknüpfung zwischen den Datenleitungen 3,4,5,6 den Puls zusätzlich auf die Steuerleitung c1 des LCD-Displays übertragen, um hiermit einen Zeilenumbruch anzuzeigen. Und dafür gibt es einen schönen Cmos Baustein mit 2 Und-Gattern und je 4 Eingängen mit dem Ergebnis: 1 Steuerleitung gespart. Man kann jetzt sogar das 2. Und mit 4 Eingängen des Cmos zum Reset für das LCD-Display & die Adressierungs-Zähler verwenden, indem man die bits 7,12,13 und 14 zusammenschaltet, das ergibt nämlich 28800, genauso viele bytes, wie das Display pro Seite hat. Beim ersten Einschalten, dann einfach einmal den Puls ein bisschen verzögert (warten muss man bei dem LCD-Displays sowieso) oder ähnliches auslösen, und ab dann wird er jedesmal beim Seitenende erneut automatisch ausgelöst. Mittlerweile sind nur noch wenige Leitungen bei dem Lese-Prozessor übrig: 1 Puls für 2x8 = 16 stufiger zähler zur Ansteuerung der Lese-SRam-Adressierung 1 Chip-enable für das Lese-Ram 1 C2 für das LCD-Display (Takt für Byte übernehmen) Aus 55 mach 3, aber dafür einen Prozessor ? Man könnte jetzt einen leicht Quarz mit 16 oder 20 Mhz nehmen, das Ding mit ein paar zähler/schieberegister (wie auch immer) ausstatten, um die Befehlsfolge zu timen, und man hätte die Darstellungslogik für das auslesen völlig Microprozessor frei, und weit unter 5 Euro für die Bauteile, fertig. Das Reinschreiben mit dem Prozessor müsste nun doch auch nur noch ein Kinderspiel sein, oder ? Nunja, kommt darauf an, ob man gezielte Adressierung will, oder einfach die Seiten jedesmal ganz reinknallt, aber das könnte man so oder so ganz bequem ohne Timingprobleme machen, da die Logik immer auf das Lese-Sram zugreift, und man quasi alle Zeit der Welt hat, da man ja selber die SRams flippt. Falls jemand da irgendwo in meinen Überlegungen einen Fehler entdeckt hat, dann lasst es mich bitte wissen. Rein logisch gesehen müsste alles stimmen (mal abgesehen von der Rechtschreibung ;) ), und ich hoffe, dass das Teil so funktionieren wird, da sind aber immer noch ein paar Themen, bei denen ich, durch mangelnde Informationen, ein bisschen auf schwammigem Boden stehe: 1. 24 V für Vee (anstatt default 23) sollte doch klargehen, oder ? 2. Die Taktrate + Spannung/Strom für den Inverter weichen doch ein bisschen weit von den Specs ab, sind sie aber trotzdem noch innerhalb der akzeptablen Grenzen (vor allem Takt) ? 3. Wäre ein 0/8/15 Inverter einer Kaltlichtkathodenlampe (Moddingbereich und so) vielleicht besser ? 4. Da meine Hardware-Zeit doch schon recht lange hinter mir liegen, könnte mir beim Design der Auslese-Logik hier ein grober Schnitzer unterlaufen sein... Da ich mir soviel Mühe gemacht habe, mein Idee von dem ganzen mal zusammenzufassen, hoffe ich doch auch auf ein paar Antworten... ;-) Erich
Hallo, Siehe mal die Thread Farbdisplay. http://www.mikrocontroller.net/forum/read-1-52477.html Der controller kannst Du auch benutzen. oder auf http://www.uc-projects.com/ Grüße Mark,
hallo, habs mir ganz durchgelesen, klingt recht interessant, aber warum willst du die ganzen fetten logikbausteine verwenden? wie wäre es mit 1-2 (bei bedarf größeren) gal´s? die teile sind super simpel und vor allem flott dabei, zudem sind sie kleiner, und verknüpfungen lassen sich einfacher ändern Mfg Marcel
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.