Forum: Mikrocontroller und Digitale Elektronik Timings für TFT und FT810


von Rudolph R. (rudolph)


Lesenswert?

Ich habe mir ein 5" TFT mit FT810 zugelegt.
Das ist von HAOYOU, Modell FT810CB-HY50HD.

http://www.hotmcu.com/5-graphical-lcd-touchscreen-800x480-spi-ft810-p-286.html?cPath=6_16

Das TFT da drauf ist ein KD50G21-40NT-A1:
http://www.haoyuelectronics.com/Attachment/HY5-LCD-HD/KD50G21-40NT-A1.pdf

Ein anderes Datenblatt habe ich leider genauso wenig gefunden wie den 
Hersteller "ON TAT IDUSTRIAL".
Okay, die sitzen halt wohl in Honk Kong und es gibt die seit 1979, das 
war es dann aber auch schon an Informationen.

Jetzt versuche ich mir gerade die Timing Informationen dazu aus dem 
Datenblatt abzuleiten und bin auf das hier gekommen:
1
#define FT_VSYNC0  (13L)  // Tvf Vertical Front Porch
2
#define FT_VSYNC1  (16L)  // Tvf + Tvp Vertical Front Porch plus Vsync Pulse width
3
#define FT_VOFFSET  (48L)  // Tvf + Tvp + Tvb Number of non-visible lines (in lines)
4
#define FT_VCYCLE  (525L)  // Tv Total number of lines (visible and non-visible) (in lines)
5
#define FT_VSIZE  (480L)  // Tvd Number of visible lines (in lines) - display height
6
#define FT_HSYNC0  (40L)  // Thf Horizontal Front Porch
7
#define FT_HSYNC1  (88L)  // Thf + Thp Horizontal Front Porch plus Hsync Pulse width 
8
#define FT_HOFFSET   (176L)  // Thf + Thp + Thb Length of non-visible part of line (in PCLK cycles)
9
#define FT_HCYCLE   (928L)  // Th Total length of line (visible and non-visible) (in PCLKs)
10
#define FT_HSIZE  (800L)  // Thd Length of visible part of line (in PCLKs) - display width
11
#define FT_PCLKPOL   (1L)  // PCLK polarity (0 = rising edge, 1 = falling edge)
12
#define FT_SWIZZLE   (0L)  // Defines the arrangement of the RGB pins of the FT800
13
#define FT_PCLK    (2L)  // 60MHz / REG_PCLK = PCLK frequency  30 MHz

So nach Seite 13 und 14 des Datenblattes vom TFT.
Was mich jetzt wundert, sollte die Anzahl der Zeilen nicht die Summe der 
sichtbaren und nicht sichtbaren Zeilen sein?
Entsprechend bei der Zeilenlänge in Takten.

480 + 48 = 528 -> != 525
800 + 176 = 976 -> != 928

Habe ich mich da mit dem Datenblatt und den Parametern vertan, oder soll 
das so sein?

Das hier sind die Parameter für das 3,5" TFT das ich bisher benutzt 
habe, die habe ich von FTDI übernommen:
1
#define FT_VSYNC0  (0L)  // Tvf Vertical Front Porch
2
#define FT_VSYNC1  (2L)  // Tvf + Tvp Vertical Front Porch plus Vsync Pulse width
3
#define FT_VOFFSET  (13L)  // Tvf + Tvp + Tvb Number of non-visible lines (in lines)
4
#define FT_VCYCLE  (263L)  // Tv Total number of lines (visible and non-visible) (in lines)
5
#define FT_VSIZE  (240L)  // Tvd Number of visible lines (in lines) - display height
6
#define FT_HSYNC0  (0L)  // Thf Horizontal Front Porch
7
#define FT_HSYNC1  (10L)  // Thf + Thp Horizontal Front Porch plus Hsync Pulse width 
8
#define FT_HOFFSET   (70L)  // Thf + Thp + Thb Length of non-visible part of line (in PCLK cycles)
9
#define FT_HCYCLE   (408L)  // Th Total length of line (visible and non-visible) (in PCLKs)
10
#define FT_HSIZE  (320L)  // Thd Length of visible part of line (in PCLKs) - display width
11
#define FT_PCLKPOL   (0L)  // PCLK polarity (0 = rising edge, 1 = falling edge)
12
#define FT_SWIZZLE   (2L)  // Defines the arrangement of the RGB pins of the FT800
13
#define FT_PCLK    (8L)  // 48MHz / REG_PCLK = PCLK frequency

Da weichen die Summen auch ab.

: Bearbeitet durch User
von Rudolph (Gast)


Lesenswert?

Hmm, echt keiner der sich mit TFT Timings auskennt?

Ich bekomme inzwischen mit zwei Varianten ein Bild:
1
#define FT_VSYNC0  (0L) //(13L)  // Tvf Vertical Front Porch
2
#define FT_VSYNC1  (10L) //(16L)  // Tvf + Tvp Vertical Front Porch plus Vsync Pulse width
3
#define FT_VOFFSET  (23L) //(48L)  // Tvf + Tvp + Tvb Number of non-visible lines (in lines)
4
#define FT_VCYCLE  (525L)  // Tv Total number of lines (visible and non-visible) (in lines)
5
#define FT_VSIZE  (480L)  // Tvd Number of visible lines (in lines) - display height
6
#define FT_HSYNC0  (0L) //(40L)  // Thf Horizontal Front Porch
7
#define FT_HSYNC1  (88L)  // Thf + Thp Horizontal Front Porch plus Hsync Pulse width
8
#define FT_HOFFSET   (152L) //(176L)  // Thf + Thp + Thb Length of non-visible part of line (in PCLK cycles)
9
#define FT_HCYCLE   (952L) //(928L)  // Th Total length of line (visible and non-visible) (in PCLKs)
10
#define FT_HSIZE  (800L)  // Thd Length of visible part of line (in PCLKs) - display width
11
#define FT_PCLKPOL   (1L)  // PCLK polarity (0 = rising edge, 1 = falling edge)
12
#define FT_SWIZZLE   (0L)  // Defines the arrangement of the RGB pins of the FT800
13
#define FT_PCLK    (2L)  // 60MHz / REG_PCLK = PCLK frequency  30 MHz
1
#define FT_VSYNC0  (0L) //(13L)  // Tvf Vertical Front Porch
2
#define FT_VSYNC1  (10L) //(16L)  // Tvf + Tvp Vertical Front Porch plus Vsync Pulse width
3
#define FT_VOFFSET  (35L) //(48L)  // Tvf + Tvp + Tvb Number of non-visible lines (in lines)
4
#define FT_VCYCLE  (516L)  // Tv Total number of lines (visible and non-visible) (in lines)
5
#define FT_VSIZE  (480L)  // Tvd Number of visible lines (in lines) - display height
6
#define FT_HSYNC0  (0L) //(40L)  // Thf Horizontal Front Porch
7
#define FT_HSYNC1  (88L)  // Thf + Thp Horizontal Front Porch plus Hsync Pulse width
8
#define FT_HOFFSET   (169L) //(176L)  // Thf + Thp + Thb Length of non-visible part of line (in PCLK cycles)
9
#define FT_HCYCLE   (969L) //(928L)  // Th Total length of line (visible and non-visible) (in PCLKs)
10
#define FT_HSIZE  (800L)  // Thd Length of visible part of line (in PCLKs) - display width
11
#define FT_PCLKPOL   (1L)  // PCLK polarity (0 = rising edge, 1 = falling edge)
12
#define FT_SWIZZLE   (0L)  // Defines the arrangement of the RGB pins of the FT800
13
#define FT_PCLK    (2L)  // 60MHz / REG_PCLK = PCLK frequency  30 MHz

Vielleicht hilft das ja mal wem hier...
Und es gibt jetzt ein 5" FT811 von HAOYOU.

von Frank S. (franksanderdo)


Lesenswert?

Moin Rudolph

Ich muss zugeben das ich bisher nie darüber nachgedacht habe...

Nur mal eine Idee ohne Garantie auf sinnhaltigkeit:

Kann es sein das die unsichtbaren Pixel (Zeilen) am Ende des des Screens 
nicht mitgezählt werden?

Die andere Idee die ich hätte wäre das der jeweilige Sync Puls ganz oder 
teilweise abgezogen wurde.

Grüße
Frank

von Rudolph (Gast)


Lesenswert?

Das macht bestimmt irgendwie Sinn, nur passen die Angaben im TFT 
Datenblatt nicht zu den Angaben im Grafik-Chip.

Ich würde ja erwarten, dass die komplette Zeile die Summe aus sichtbaren 
und nicht sichtbarem Bereich ist.
Statt dessen sieht das so aus, als ob FT_VOFFSET sich nur auf den 
vorderen Bereich bezieht, das muss wohl kleiner sein als FTVCYLE - 
FT_VSIZE.

Und die hinteren Bereich sind irgendwie nur implizit enthalten, obwohl 
Tvb und Hvb von der Bezeichnung her zum TFT Datenblatt passen.

Hmm.

VCYLE = 525
VSIZE = 480

Nach Datenblatt vom TFT ist "VS Back Porch (Blanking)" mit 32 
anzusetzen.

525 - 480 - 32 = 13

VOFFSET = 13
VSYNC0 = 0 - einfach weil, ist bei allen Konfiguration die ich finden 
konnte so
VSYNC1 = 2 - aus dem Hut gezogen, ist kleiner als 13

HCYCLE = 952 -> 30 MHz Takt  525  952 -> 60,02 Hz
HSIZE = 800

"HS Back Porch (Blanking)" = 88

952 - 800 - 88 = 64

HOFFSET = 64
HSYNC0 = 0
HSYNC1 = 20 - warum nicht, ist kleiner als 64

Und sieh an, auch diese Konfiguration gibt ein Bild.

Wie man das wirklich und richtig einstellt weiss ich damit zwar leider 
immer noch nicht genau, aber wenigstens zeigt das Ding was an...

von Andi B. (Gast)


Lesenswert?

Rudolph schrieb:
> Wie man das wirklich und richtig einstellt weiss ich damit zwar leider
> immer noch nicht genau

Richtig steuert man ein TFT so an, dass es genau den Daten im Datenblatt 
des TFTs entspricht. Wobei üblicherweise bei den meisten Displays ein 
größerer Bereich für Front und Fack Porch erlaubt ist. Auch die 
Synclängen müssen meist nicht auf ein Pixel genau eingehalten werden, 
auch da gibt es im TFT Datenblatt min. und max. Werte. Man versucht 
zuerst mal das TFT Datenblatt zu verstehen, dann das Graphicchip 
Datenblatt, dann stellt man die Register, und dann misst man das ganze 
Timing mittels Oszi nach. Und zwar Pixelgenau (z.B. Trigger auch 950tes 
Pixel nach Syncflanke....).

Dabei stellt man dann manchmal fest, dass man so manche Angaben im 
Datenblatt falsch interpretiert hat, oder dass mit einen fixen 
Pixeloffset der irgendwo in der Fußnote beschrieben ist und welchen man 
bei der Berechnung abziehen müsste, übersehen hat, und dann stellt man 
die Register nochmal nach. Oder entscheidet dass es eh innerhalb der TFT 
min./max. Werte liegt. Oder die andere Möglichkeit die die Pfuscher 
nehmen - kopiere irgendwoher irgendwelchen Code für irgendein Display 
und wenn ein Bild angezeigt wird, dann wird's schon okay sein.

Sorry genauer kann ich dir nicht helfen. Ich habe zwar schon viele TFTs 
mit diversen Controllern angesteuert, aber deinen Controller und dein 
TFT eben noch nicht. Also musst du die korrekten Werte selber aus den 
Datenblättern suchen.

Und ja, Gesamtlänge ist sichtbare + unsichtbare Pixel. Manchmal wird 
aber der Teil des Syncs nicht mitgezählt (vor allem bei der 
Programmierung der Controller Register), manchmal schon. Je nachdem 
welcher interne Zähler von wo abgeleitet wird. Aber da gibt es bei allen 
Controllern und auch TFTs die ich kenne entsprechende Zeichnungen und 
Timingdiagramme wo man das alles ablesen kann.

von Rudolph R. (rudolph)


Angehängte Dateien:

Lesenswert?

Wenn das nur immer so einfach wäre. :-)
Ich habe ja schon vorher die Datenblätter gewälzt.
Und dann hier nachgefragt, bevor ich das ausprobiert habe.

Zusätzlich habe ich mir andere Konfigurationen aus dem Netz gefischt und 
diese mit den TFT Datenblättern dazu verglichen.
Sah nur leider auch wieder anders aus - und aus den Daten geht ja nicht 
hervor, was die sich dabei gedacht haben oder ob die stimmen.

Ich habe mal die dazugehörigen Abschnitte aus den Datenblättern 
extrahiert.

Wie man im DS_FT81x...pdf sehen kann wird im Diagramm der Abschnitt vor 
den eigentlichen Pixeln gezeigt.
Und die dazugehörigen xOFFSET werden beschrieben als "..of non-visible 
part...".
Passend dazu gibt es Txf und Txb Abschnitte, wobei Thf auch ausdrücklich 
als "Horizontal Front Porch" beschrieben wird, was nahe legt, dass mit 
"Thb" auch Horizontal Back Porch gemeint sein müsste.

Nur bekommt man mit der Annahme kein Bild raus.

Im Datenblatt vom TFT sieht das schon etwas anders aus.
Dort sind xSYNC0 und xSYNC1 in einem Wert zusammen gefasst.

Tvb ist auf der einen Seite der Pixel, Tvfp auf der anderen, tv ist der 
ganze Bereich und tvd der sichtbare.


Noch was ganz anderes, das FT810CB-HY50HD hat einen resistiven 
Touchscreen und unerklärlichweise scheint die Auflösung von diesem 
extrem schlecht zu sein, mit einem Stylus bekomme ich keinerlei 
Touch-Events.
Nur wenn man schön flächig die Fingerkuppe auflegt passiert da was.

von Andi B. (Gast)


Angehängte Dateien:

Lesenswert?

Ich meinte so ein Bildchen für einen Controller. Sowas veranschaulicht 
für mich die Tabelle. Und bei deinem Display Bild fehlt mir sowas wie 
hier im zweiten und dritten Bild (Sharp, Epson). Dieses Epson hier ist 
z.B. ganz pingelig während das Sharp einige Abweichungen verträgt. Wenn 
du diese Angaben vom TFT nicht hast, dann fehlt entscheidendes.

von Holger S. (223rem)


Lesenswert?

Hallo Rudolph,

angefixt durch die derzeitigen Beiträge zum FT8xx werde ich wohl auf 
diesen Zug aufspringen. Hast Du die Problematik mit der Empfindlichkeit 
des Touchs von Deinem 5" Touchdisplay von "Hotmcu" in den Griff 
bekommen?

Gruß Holger...

von Rudolph R. (rudolph)


Lesenswert?

Holger S. schrieb:
> Hast Du die Problematik mit der Empfindlichkeit
> des Touchs von Deinem 5" Touchdisplay von "Hotmcu" in den Griff
> bekommen?

Nein, gar nicht, ich weiss auch nicht, was ich da noch ausprobieren 
kann.
Ich glaube, das Touch-Panel ist einfach nur Mist, leider finde ich da 
keinerlei Spezifikation zu.
Auf jeden Fall ist die Folie auf der Oberseite schon recht "labrig", das 
ist bei dem 3,5" von FTDI komplett anders.

Wenn ich mir die Rohwerte anzeigen lasse, passiert mit dem Stylus rein 
gar nichts.

Leider ist das Panel an dem Folientleiter des Displays angeschlossen, 
das kann man nicht mal runterkratzen und ein neues anbringen.

Der Support von HAOYU meldet sich auch nicht mehr.

Insgesamt war das FT810CB-HY50HD wohl ein Griff ins Klo, zumindest für 
die praktische Verwendung.
Zum Rumspielen hat es immer noch den FT810 als Pluspunkt.
Und für eine Grafik-Demo und/oder mit fetten Icons ist das bestimmt auch 
nett.

Ein 5" mit FT811 in 480x272 hätte was, oder 7" mit 800x480.
Hat nur soweit ich weiss noch niemand.

Selber bauen ist auch nicht so einfach, zumindest nicht bei 
kapazitiv-Touch.
Das "Problem" ist da, dass der FT8x1 nur mit bestimmten 
Touch-Controllern per I2C kommunizieren kann.

von Holger S. (223rem)


Lesenswert?

Hallo Rudolph,

besten Dank für Deine Antwort, ok, als evalboard scheints zu reichen.

Gruß Holger...

von Rudolph R. (rudolph)


Lesenswert?

Okay, ich nehme alles zurück, das Touch-Panel von dem FT810CB-HY50HD 
funktioniert auch mit einem Stylus sowie jetzt mit leichtem Druck durch 
einen Fingernagel.

Beim Durchgehen der Register war ich nur zu blöd, die Bedeutung von 
REG_TOUCH_RZTHRESH richtig zu erkennen.
Der "typical value" von 1200 ist einfach zu wenig für das Panel.

Ich habe das jetzt auf 2000 laufen und damit reicht ein leichter Druck 
mit etwa dem Griff von einem Joghurt-Löffel um Touch-Events zu bekommen.

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.