Forum: Mikrocontroller und Digitale Elektronik Problem mit LCD-TFT Controller


von Fritz M. (codefritz)


Lesenswert?

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.

von Benedikt K. (benedikt)


Lesenswert?

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.

von Fritz M. (codefritz)


Lesenswert?

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.

von Benedikt K. (benedikt)


Lesenswert?

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.

von Fritz M. (codefritz)


Lesenswert?

>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.

von Benedikt K. (benedikt)


Lesenswert?

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).

von Fritz M. (codefritz)


Lesenswert?

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?

von Benedikt K. (benedikt)


Lesenswert?

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.

von Fritz M. (codefritz)


Angehängte Dateien:

Lesenswert?

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,

von Benedikt K. (benedikt)


Lesenswert?

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.

von Fritz M. (codefritz)


Lesenswert?

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.

von Benedikt K. (benedikt)


Lesenswert?

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.

von Gast (Gast)


Lesenswert?

>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?

von Jörn (Gast)


Lesenswert?

Hi,
mich würde mal interessieren woher du das TFT LCD hast und wie teuer so 
ein teil ist.

Gruß Jörn

von code fritz (Gast)


Lesenswert?

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.

von code fritz (Gast)


Angehängte Dateien:

Lesenswert?

sorry hier das original

von code fritz (Gast)


Angehängte Dateien:

Lesenswert?

und hier auf tft

von Benedikt K. (benedikt)


Lesenswert?

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.

von hans (Gast)


Lesenswert?

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?

von Benedikt K. (benedikt)


Lesenswert?

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.

von Fritz M. (codefritz)


Angehängte Dateien:

Lesenswert?

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.

von Benedikt K. (benedikt)


Lesenswert?

>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.

von Fritz M. (codefritz)


Lesenswert?

>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)

von Fritz M. (codefritz)


Lesenswert?

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,

von Benedikt K. (benedikt)


Lesenswert?

Invertier DateEnable mal, dann sollte es gehen.

von Fritz M. (codefritz)


Lesenswert?

>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!?

von Benedikt K. (benedikt)


Lesenswert?

Sieht das Signal dann wenigstens auf dem Oszi richtig aus, wenn du es 
invertierst ?

von Fritz M. (codefritz)


Lesenswert?

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.

von Benedikt K. (benedikt)


Lesenswert?

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.

von Fritz M. (codefritz)


Lesenswert?

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

von Benedikt K. (benedikt)


Lesenswert?

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
Noch kein Account? Hier anmelden.