Ich betreibe ein LCD/TFT Display an einem ARM9 (Samsung S3c2410). Das Display braucht nur DataEnable und Pixelclk sowie 18 Datenleitungen (18 Bit Farbtiefe). Im Datenblatt des Displays fand ich Angaben ueber den benoetigten Pixelclock (25 MHz), dieser ist konfiguriert, ebenso Aufloesung und Farbtiefe. Auch laut Datasheet gewuenschte Bildwiederholrate von 60 Hz passt. Auf dem Display sollte links oben ein blinkender Cursor angezeigt werden, dieser wird nun aber 2mal angezeigt, links oben, und nochmal oben in der Mitte? Was is da denn los? Im LCD Controller Register des Samsung kann ich noch Werte wie Hor/Ver Back und Front Porch einstellen. Dazu stehen aber keine Angaben im Display Datenblatt. Auch einstellbar sind HSYNC und VSYNC, diese erzeugt das Display aber intern es besitzt ja schliesslich auch keine Anscluesse dafuer. Jemand einen Tipp? Danke.
Fritz Meyer wrote: > Im Datenblatt des Displays fand ich Angaben ueber den benoetigten > Pixelclock (25 MHz), dieser ist konfiguriert, ebenso Aufloesung und > Farbtiefe. Auch laut Datasheet gewuenschte Bildwiederholrate von 60 Hz > passt. Kommen die Signale auch so raus wie eingestellt ? > Auf dem Display sollte links oben ein blinkender Cursor angezeigt > werden, dieser wird nun aber 2mal angezeigt, links oben, und nochmal > oben in der Mitte? > Was is da denn los? Klingt danach, als wäre entweder die Auflösung falsch (eingestelle Displaybreite ist nur halb so groß wie die des Displays, daher werden 2 Zeilen nebeneinander dargestellt), oder das Display bekommt nur jeden 2. Pixeltakt mit. > Im LCD Controller Register des Samsung kann ich noch Werte wie Hor/Ver > Back und Front Porch einstellen. Dazu stehen aber keine Angaben im > Display Datenblatt. Die sind dem Display auch nahezu egal, da es ja keine H/VSync Signale bekommt. Frontporch + Backporch zusammen sollte rund 10% der Displaygröße sein. Falls dieser Wert zu niedrig ist, kann auch so ein komisches Ergebnis zustande kommen. Eine weitere Möglichkeit wäre, wenn DataEnable invertiert ist. Einige TFTs möchten den High aktiv, andere Low aktiv.
Die 25MHz passen, mit dem Oszi ueberprueft. Wie kann ich die Bildwiederholrate (=Framerate) messen? 1 / Abstand der steigenden Flanke des Dataenable, oder? Ja Aufloesung daran hab ich auch als erstes gedacht, aber die passt, 100%. Ok gut zu wissen die Sache mit dem Porch etc ... (dacht ich mir auch schon). > oder das Display bekommt nur jeden 2. Pixeltakt mit. Was meinst damit, bzw wie kommt sowas zu Stande? > Eine weitere Möglichkeit wäre, wenn DataEnable invertiert ist. Einige > TFTs möchten den High aktiv, andere Low aktiv. Mh aber wieso kommt dan so ein eigenartiges Bild zustande? Die erste Haelfte des Bildes (also 320 + 240) wird ja korrekt dargestellt die zweite nichtmehr.
Fritz Meyer wrote: > Die 25MHz passen, mit dem Oszi ueberprueft. > Wie kann ich die Bildwiederholrate (=Framerate) messen? > 1 / Abstand der steigenden Flanke des Dataenable, oder? Es ist etwas schwer. Das DataEnable Signal hat erstmal die Zeilenfrequenz (es sollten rund 32kHz +/- ein paar sein). Dann gibt es immer mal wieder Bereiche in denen das Signal für eine etwas längere Zeit High oder Low ist. Auf diesen Bereich zu triggern ist nicht einfach. Das sollten dann irgendwas ein wenig über 60Hz sein, falls ich mit einem 640x480 Display richtig geraten habe). >> oder das Display bekommt nur jeden 2. Pixeltakt mit. > Was meinst damit, bzw wie kommt sowas zu Stande? Wenn das Kabel lang ist, es irgendwelche Reflektionen gibt o.ä. könnte es ja sein, dass irgendwie jeder 2. Pixeltakt verloren geht. Ist zwar unwarscheinlich, würde aber so ein Fehlerbild erklären. >> Eine weitere Möglichkeit wäre, wenn DataEnable invertiert ist. Einige >> TFTs möchten den High aktiv, andere Low aktiv. > Mh aber wieso kommt dan so ein eigenartiges Bild zustande? > Die erste Haelfte des Bildes (also 320 + 240) wird ja korrekt > dargestellt die zweite nichtmehr. Die TFTs sind dafür ausgelegt zu funktionieren wenn die Signale so aussehen wie im Datenblatt. Das Verhalten bei anderen Signalen ist nicht definiert, da kann dann alles mögliche rauskommen. Falls möglich, zeig mal ein Vollbild an, z.B. eine Farbfläche mit Regenbogenverlauf, oder einfach auch nur einen Farbbalken von dunkel nach hell. Daran kann man dann einigermaßen erkennen, ob Bildanfang/Ende irgendwo auf dem Display auftauchen.
>Es ist etwas schwer. Das DataEnable Signal hat erstmal die >Zeilenfrequenz (es sollten rund 32kHz +/- ein paar sein). Dann gibt es >immer mal wieder Bereiche in denen das Signal für eine etwas längere >Zeit High oder Low ist. Auf diesen Bereich zu triggern ist nicht >einfach. Das sollten dann irgendwas ein wenig über 60Hz sein, falls ich >mit einem 640x480 Display richtig geraten habe). Hm versteh ich zwar nicht so ganz, einmal hat DateEnable 32kHz und dann ploetzlich die geforderten 60 Hz? (so wie ich meinte ueber Abstand der steigenden Flanken, oder?) Jo korrekt, 640x480, und laut Datasheet 60Hz und 25MHz. Hm, wie sollte denn das Kabel maximal sein? Deine Voschlaege werd ich Morgen mal testen, dann gibts wieder Infos.
Fritz Meyer wrote: > Hm versteh ich zwar nicht so ganz, einmal hat DateEnable 32kHz und dann > ploetzlich die geforderten 60 Hz? (so wie ich meinte ueber Abstand der > steigenden Flanken, oder?) Es hat eben 32kHz und mit 60Hz wird das Signal kurz angehalten. Also Quasi eine logische UND Verknüpfung der H und V Sync Signale. > Jo korrekt, 640x480, und laut Datasheet 60Hz und 25MHz. > > Hm, wie sollte denn das Kabel maximal sein? Kommt auf das Kabel an, wie gut die Impedanz angepasst ist usw. Üblicherweise so kurz wie möglich. Ab etwa 20-30cm wird es kritisch. Dann sollte man schon die Leitungen auf jeden fall impedanzrichtig anschließen (was jetzt nicht heißt, dass man dies bei kürzeren Leitungen nicht machen sollte).
Hm also leider haben Deine Tipps nichts geholfen, das Kabel sollte auch ok sein, hoechstens 8cm lang. Ich stelle nun fest mit Hilfe eines Testbilds, dass das Bild in Auszuegen 3mal auf dem Display dargestellt wird (auf horizonzaler Ebene). Mh woran kann das nur liegen?
Kannst du mal ein Foto machen ? Interessant wären folgende Details: - Wird konstant nur jeder x.te Pixel dargestellt ? - Beginnt das Bild genau in der linken Ecke ? - Ist das Bild komplett (also auch die rechte Ecke des Testbilder ist irgendwo zu sehen) ? - Wie sieht es vertikal aus ? Wird das Bild da auch mehrmals dargestellt ? Und das Datenblatt von dem Display wäre auch nicht verkehrt.
Im Anhang zwei Testbilder. Man sieht die vertikale ANzeige ist ok. Probleme in der horizontalen. Das Bild beginnt zwar oben, aber nicht ganz links. Hier das Db: http://www.beck-oled-lcd-tft-display.de/display-datenblatt/typ/ampire/AM-640480GTMQW-00H%20Ver1.0.pdf Gruesse,
Scheint so als würde irgendein Timing nicht eingehalten. Dieses Display braucht eine relative lange Pause nach jeder Zeile. Überprüf mal ob die Summe aus Frontporch + Backporch in die unter Horizontal/Vertical Blank angegebenen Bereiche fallen.
Hm, welche Werte wuerdest Du fuer die sechs entsprechenden Werte in den Register LCDCON3/4 VSPW, VBPD, VFPD, HSPW, HBPD, HFPD (Seite 15-26: http://www.aesop-embedded.org/doc/um_s3c2410a_manual_r10.pdf) Ich verstehe nicht wie ich die aus dem Display Datasheet entnehmen soll? Ausserdem dachte ich sie seien unwichtig, da diese das Display intern selbst erzeugt. Besten Dank.
Fritz Meyer wrote: > Hm, welche Werte wuerdest Du fuer die sechs entsprechenden Werte in den > Register LCDCON3/4 > VSPW, VBPD, VFPD, HSPW, HBPD, HFPD VBPD + VFP + VSPW= Vertical Blank, also 35...80 HBPD + HFP + HSPW= Horizontal Blank, also 110...260 > Ausserdem dachte ich sie seien unwichtig, da diese das Display intern > selbst erzeugt. Nur weil ein Auto ABS und ESP hat, kann man noch lange nicht mit 200 in eine enge Kurve rasen (OK, man kann es schon, man wird nur das Ende der Kurve nie erreichen...) Die konkreten Werte von Front und Back Porch sind egal, ebenso Sync Width, nur deren Summe muss in dem zulässigen Bereich liegen.
>Das Bild beginnt zwar oben, aber nicht ganz links.
Die Bildlage ist eine Sache.
Bei testbild1_tft wird die Zeile doch garnicht komplett dargestellt,
sondern zweimal begonnen. Kann es sein, daß der Bildspeicher nicht
richtig angesprochen wird, oder zuwenig Pixel/Zeile eingestellt sind,
oder die Adresse zum Auslesen Faktor 2 inkrementiert wird?
Hi, mich würde mal interessieren woher du das TFT LCD hast und wie teuer so ein teil ist. Gruß Jörn
so haben ein bessere testbild gemacht. hab ein bisschen mit front porch und back porch einstellungen probiert, aber das bild sieht bei allen bisherigen einstellungen so aus. auch bei maximalen einstellungen, also hor. front porch 0, hor. back porch 148 und umgekehrt. die hor pulse width is jeweils 12.
Mess mal die Impuslbreite des DataEnable Signals. Dieses müsste eigentlich 640 x 25MHz also 25,6µs lang high sein, gefolgt von einer 110 x 25MHz bis 260 x 25MHz = 4,4-10,4µs langen Pause.
Hm also wenn ich das Datasheet des Displays angucken braucht dieses ja nur Den Pixeltakt, die Daten und DataEnable. Dann fehlen aber doch dem Display die Signale fuer Hsync (zeigt Beginn einer neuen Zeile an) und Vsync (synchronisiert eben auf vertikaler Ebene) Oder wie soll das Display diese selbst erzeugen koennen?
hans wrote: > Dann fehlen aber doch dem Display die Signale fuer Hsync (zeigt Beginn > einer neuen Zeile an) und Vsync (synchronisiert eben auf vertikaler > Ebene) > Die erzeugt es aus dem DataEnable Signal. Da das Display dafür aber auf entsprechende Verhältnisse zwischen H und V braucht, muss man die Timingwerte genau nach Datenblatt einstellen. Einige von den Displays sind ziemlich intelligent, die schalten direkt wieder ab, sobald irgendwas nicht passt.
Benedikt K. wrote: > Mess mal die Impuslbreite des DataEnable Signals. > Dieses müsste eigentlich 640 x 25MHz also 25,6µs lang high sein, gefolgt > von einer 110 x 25MHz bis 260 x 25MHz = 4,4-10,4µs langen Pause. Mach ich sobald als moeglich, hab nur leider grad kein Oszi bei der Hand. Nur um mal noch alle Fehler auszuschliessen, kannste mal einen Blick in angaehngte File haengen, ob meine Ueberlegungen soweit stimmen? Dank Dir.
>Wie sehe ich denn diese Werte auf dem Oszi? > Sind das die 32KHz Zeilenfrequ. von DataEnable? Schau dir mal 7.1 im Datenblatt an. >HFPD, HBPD; und HSPW beeinflussen DataEnable. Die Summe muss hier >ca 160 VLK Perioden entsprechen, um auf die ingesamt 800 >horizontalen Perioden zu kommen. >Die einzelne Auftreilung ist auch hier nicht angegeben und muss probiert werden? Probiert muss eigentlich nichts werden. Ich würde Front Porch und Back Porch jeweils in etwa gleich groß machen, und die Sync Breite etwa 0,5-1µs. Das sollte dann passen. Eigentlich sind die Werte dem Display ja auch egal, da es nur die Summe mitbekommt (als Low Periode des DataEnable Signal) >Und INVCLK doch theoretisch egal sein sollte? Nicht ganz. Wenn das nicht passt, kann es zu Timingproblemen kommen, wenn gleichzeitig die neuen Daten ausgegeben werden, wärend die alten gesampled werden. Ob das LCD dann die neuen oder alten Werte übernimmt, darüber entscheiden dann u.a. Temperatur, Anzahl der Personen im Raum usw. Mit anderen Worten: Der Zufall. >Ich nehme an mit INVVDEN = 0 (also normal) ist gemeint dass die Daten bei >einem High-pegel gueltig sind? Müsste irgendwo im Datenblatt stehen, notfalls nachmessen. >Mich wuerde mal noch interssieren wie das Display genau aus dem Dataenable >die noetigen VSYNC und HSYNC Signale erzeugt? Es muss dieses ja irgendwie >aus DataEnbal und VCLK machen...? Vermutlich über eine Art Zähler: Ist DataEnable länger als z.B. 800 Pixeltakte Low wird dies als VSync interpretiert, ansonsten ist ein Low Pegel HSync.
>Probiert muss eigentlich nichts werden. Ich würde Front Porch und Back >Porch jeweils in etwa gleich groß machen, und die Sync Breite etwa >0,5-1µs. Das sollte dann passen. Eigentlich sind die Werte dem Display >ja auch egal, da es nur die Summe mitbekommt (als Low Periode des >DataEnable Signal) Mh verstehe dann scheint mein Problem also doch wo anders zu liegen. Evlt passen die Einstlelungen in den LCDSADDR Registern nicht, die den Framebuffer konfigurieren. Wenn ich mir das Bsp. dazu im Datenblatt anguck versteh ich da nicht ganz wieso die LCDBANK um 22 nach rechts geshiftet (also um 22 geteilt) wird. Auch verstehe ich nicht wie der Autor ueberhaupt auf den Wert fuer LCDBASEU kommt. Beispielhaft wurde dort als Startadresse 0c500000 herangezogen. OFFSIZE sollte bei mir 0 sein, da ich kein virtuelles Display unterstuetze? PAGEWIDTH = 640*16/16 ? (16 Bit Farbtiefe)
Benedikt K. wrote: > Mess mal die Impuslbreite des DataEnable Signals. > Dieses müsste eigentlich 640 x 25MHz also 25,6µs lang high sein, gefolgt > von einer 110 x 25MHz bis 260 x 25MHz = 4,4-10,4µs langen Pause. Eigenartig, es ist genau umgekehrt, also Dataenable ist 10 us high, und 21 us low. Pixeltakt sind aber besagt 25MHz. Klar VDEN hat falsche Polaritaet, aber das aendert nichts an der Sache! Eigenartig, waehrend der Dataenable low-phase kommt stets ein kurzer high-pegel von 0,2us Dauer? Thanks,
>Invertier DateEnable mal, dann sollte es gehen.
Jo.
Allerdings wird nun andtelle des Testbilds nur noch ein ganz duenner
Streifen im rechten Drittel des Displays dargestellt.
Wenn ich nun auch noch Polaritaet des VCLK (This bit controls the
polarity of the VCLK active edge. 0 = The video data is fetched at VCLK
falling edge
1 = The video data is fetched at VCLK rising edge)
aendere hab ich wieder das testbild, aber mit gleichem Problem wie
vorher!?
Sieht das Signal dann wenigstens auf dem Oszi richtig aus, wenn du es invertierst ?
Benedikt K. wrote: > Sieht das Signal dann wenigstens auf dem Oszi richtig aus, wenn du es > invertierst ? Also unabh. ob ich VDEN invetier oder nicht ich messe immer eine 10 us langen high Pegel und dann einen 20 us langen low Pegel. Wenn ich nun VDEN invertiert habe wird nur ein duenner weisser (vertikal verlaufender) Streifen angezeigt (im rechten Drittel des Displays) Wenn ich nun auch noch die Daten VCLK invertier (also die Daten bei fallenden bzw steigen VCLK uebernhemen) ist wieder urspruengliches Bild sichtbar.
Fritz Meyer wrote: > Also unabh. ob ich VDEN invetier oder nicht ich messe immer eine 10 us > langen high Pegel und dann einen 20 us langen low Pegel. Das ist ja in sich ein Wiederspruch: Wenn du ein Signal mit 10µs/20µs invertierst, wird ein 20µs/10µs Signal draus, und nichts anderes. Da dürfte der Fehler liegen, also irgendwo in den Einstellungen des Controllers.
Benedikt K. wrote: > Das ist ja in sich ein Wiederspruch: Wenn du ein Signal mit 10µs/20µs > invertierst, wird ein 20µs/10µs Signal draus, und nichts anderes. > > Da dürfte der Fehler liegen, also irgendwo in den Einstellungen des > Controllers. Hm es gibt eben das Regster INVVDEN da kann man 1 und 0 reinschreiben. Da kann man doch nichts falsch machen, oder haengt das evtl noch von anderen Einstellungen ab, und wenn ja von welchen denn? Datasheet: http://www.aesop-embedded.org/doc/um_s3c2410a_manual_r10.pdf
Ich hätte jetzt auch gesagt, dass dieses Bit das Signal invertiert. Allerdings kenne ich den µC nicht, von daher kann ich da nix dazu sagen. Notfalls musst du eben per Inverter das Signal invertieren.
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.