Forum: Mikrocontroller und Digitale Elektronik TFT und die verschiedenen Interfaces


von Sawyer M. (sawyer_ma)


Lesenswert?

Hi,
ich habe einige Wissenslücken was das ansteuern eines TFT Touch Displays 
betrifft. Wäre sehr Glücklich wenn Ihr mir da ein wenig Aufklärung 
bieten könntet. :)
Ich möchte mit einem Raspi 3 ein TFT in 2“  mit Kapazitiven Touch 
ansteuern. Nun gibt es verschiedene Displays. Einmal

- SPI+RGB interface with driver ic ILI9335
- RGB interface,driver ic ST7789V
- MCU interface with driver ic ILI9342C

Ich habe gelesen das bei RGB bekommt das Display kontinuierlich seine 
Daten im TFT üblichen Format (RGB, Hsync, VSync mit einem konstanten 
Pixeltakt). Zusätzlich ist SPI notwendig um die entsprechenden Spannungs 
und Timingparameter einmalig einzustellen. Das bedeutet ja das der 
Bildaufbau langsam ist aufgrund das für ein Vollbild 320x240x2 Bytes, 
dann 150kByte benötigt wird.

Was ich nicht verstehe ist dieses SPI+RGB?

Eine weitere Frage ist ob ein MCU Interface ein Mikrocontroller ist 
welcher für den Bildaufbau sorgt und ich dann bequem über SPI diesem nur 
Aktualisierungen mitteile? Sind das dann die mit aufgeführten IC`s wie 
ILI9335, ST7789V oder ILI9342C??

Gibt es bessere Interfaces die ich nicht kenne?

Wie läuft das dann mit dem Kapazitiven Touch? Gleich wie bei SPI und MCU 
nur Rückwärts?

Vielen Dank für eure Hilfe. Bin ziemlich neu auf dem Gebiet.

Beste Grüße

von grundschüler (Gast)


Lesenswert?

jdes pixel besteht aus 3leds: Rot Grün und Blau - RGB.
jede led wird einzeln angesteuert und braucht dafür einen digitalen Wert 
von z.B. 8bit => 3 x 8bit =24 bit je pixel. Das kann man auch auf z.B. 
16 oder 8bit Farbtiefe reduzieren.

diese 24bit können jetzt - Pixel für Pixel - seriell per spi oder 
parallel - 8bit oder 16bit  oder sonstwas breit - an das TFT gesendet 
werden.

Näheres steht im Datenblatt

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

grundschüler schrieb:
> jdes pixel besteht aus 3leds:

Nein. TFT-Displays verwenden LEDs höchstens für die 
Hintergrundbeleuchtung.

von dasrotemopped (Gast)


Lesenswert?

zu allererst einmal, Touch und das TFT sind nicht miteinander verbunden 
außer mit Klebstoff, damit die Touch Fläche auf dem Bildschirm nicht 
herumrutscht.
Erst mal das Display. Die wichtigen Fragen sind
- wie kann der uC die Konfiguration des TFT vornehmen ?
- wie kann der uC auf den Grafikspeicher zugreifen, um Bildinhalte zu 
ändern?
- wer muss sich um die regelmäßige Auffrischung des TFT kümmern ?
- wo kommen die Betriebsspannungen/analoge Ansteuerung für das TFT her ?
- ist der TFT Controller mit eigenem Speicher ausgestattet oder nur mit 
einem Zeilen-/Spaltentreiber und benötigt einen Datenstrom vom TFT ?

Die Konfiguration ist meist nur beim Start nötig, muss also nicht 
schnell erfolgen.
Das Ändern muss je nach Anforderung nicht unbedingt schnell erfolgen, 
oft kann eine teilweise Aktualisierung vom Bildinhalt ausreichend sein.
Die Auffrischung muss aber einem strengen Timing folgen, das muss 
schnell erfolgen und sehr exakt, damit keine Bildfehler auftreten.

Aus Programmierersicht wäre es am einfachsten, wenn alle 3 
Konfigurationselemente als internes RAM vom uC zu adressieren wäre. Das 
setzt vorraus, das entweder der TFT Controller im uC integriert ist oder 
aber am Speicherbus des uC angeschlossen.
Aus Kostengründen oder Architekturgründen wird bei uCs gerne darauf 
verzichtet.
Ein 8-bitter hat z.B. einen zu kleinen Adressraum für große Displays, 
ausreichend großes SRAM ist teuer bei der Integration, oder die 
Rechenleistung des uCs reicht eh nicht aus um Grafik schnell umzusetzen.

Alternativ kann man einen externen TFT Controller mit dem uC verbinden. 
Universell entworfen, können verschiedene TFTs angeschlossen werden, 
aber nie alle, da auch hier mit dem SRAM gespart wird. Da universell 
ausgelegt, muss der TFT Controller vor dem ersten Bild passend auf das 
verwendete TFT konfiguriert werden, vorzugsweise durch externe 
Beschaltung und irgendeiner seriellen Schnittstelle wie I2C, SPI, usw...
Wenn es nicht auf Geschwindigkeit ankommt kann auch der Bildinhalt 
seriell übertragen werden. Oft kann man aber den TFT Controller auch so 
einstellen, das er die Konfiguration seriell erhält, die Bilddaten aber 
über ein i80 Parallel Interface.
Den Bildrefresh steuert der TFT Controller dann gemäß seiner 
Konfiguration eigenständig ohne Zutun des uC, ebenso die Erzeugung der 
Betriebsspannungen.
Bei TFT Controllern ohne eigenem Bildspeicher muss dann der uC den 
Datenstrom kontinuierlich liefern, nur der analoge Teil wurde dem uC 
abgenommen. Das wäre dann das RGB Interface mit H-Sync/V-Sync.

Aus wirtschaftlichen Gründen hat sich folgende Aufteilung bewährt:
A)Displays mit einer Auflösung kleiner/gleich 320x240@24bit,
B)Displays größer 320x240@24bit bis 800x480(600)@24bit
C)Displays größer 800x600@24bit.
Der größte Kostenfaktor ist der SRAM Bildspeicher bzw. die schnelle 
Schnittstelle vom uC zum TFT. Die benötige Speichergeschwindigkeit 
wächst schnell mit der Auflösung.
A ist immer über eine serielle Verbindung möglich,
B braucht für flüssigen Bildaufbau mehr schnellen Speicher und CPU 
Leistung
C braucht zusätzlich zu B schnelle Busse, die statt wie in B nicht mehr 
parallel sondern seriell+differenziell umgesetzt werden, um die 
Signalintegrität zu gewährleisten.

Der Raspi ist ein voll ausgebauter Prozessor mit integrierter 
Grafikkarte und 3D Beschleunigung, kann 1920x1080@24bit über HDMI und 
DSI, beides differentielle, serielle Schnittstellen mit eigenem 
Protokoll und Verschlüsselung für DRM Videodecoder in Hardware. Der 
Videotreiber ist schön closed source, da DRM und IP-verdongled.

Aber zum Glück ist es ja ein embedded System und hat eine GPIO Leiste.
Da kannst du beliebige Hardware anschliessen, auch einen TFT Controller 
der  Kategorie A) und B), mit deutlichen Geschwindigkeitsnachteilen.
Das selbe gilt für den Touch Controller, die haben auch meist I2C oder 
SPI als Schnittstelle bei der Klasse A) B) der TFTs.

Ob es nun sinnvoll ist ein SPI TFT an einen Raspi mit integrierter 3D 
Beschleunigung anzuschliessen musst du entscheiden. Aber manchmal will 
man es ja nur machen, weil andere sagen, das geht nicht. Viel Spass beim 
Proggen.

>Gibt es bessere Interfaces die ich nicht kenne?
Die meisten bekannten Display Controller, die man so frei gebraucht/neu 
kaufen kann haben ISA/EISA/PCI/AGP/PCI-E Interfaces und werden von 
AMD/NVidia gefertigt. Intel integriert sie nur direkt in die CPU.
Es gibt aber noch unendlich viele andere wie z.B. Zorro Bus und so 
weiter und so weiter, die alle proprietär sind.

Für embedded bist du bei Ilitek / Solomon usw. schon gut aufgehoben.
Zieh dir mal ein paar Datenblätter und App Notes von denen rein !

Gruß,
dasrotemopped.

von Sawyer M. (sawyer_ma)


Lesenswert?

Jo das erklärt aber leider nicht meine Fragestellung von oben :(

von Sascha W. (sascha-w)


Lesenswert?

Sawyer M. schrieb:
> - SPI+RGB interface with driver ic ILI9335
> - RGB interface,driver ic ST7789V
> - MCU interface with driver ic ILI9342C
>
> Ich habe gelesen das bei RGB bekommt das Display kontinuierlich seine
> Daten im TFT üblichen Format (RGB, Hsync, VSync mit einem konstanten
> Pixeltakt).
Das ist für einen kleinen μC schon mal ungeeignet, da der im allgemeinen 
weder genug Speicher noch die notwendige Geschwindigkeit mitbringt. Das 
geht nur wenn im μC eine dafür vorgesehene Funktionseinheit vorhanden 
ist.

> Zusätzlich ist SPI notwendig um die entsprechenden Spannungs
> und Timingparameter einmalig einzustellen.
Scheint mir nicht schlüssig, evl. eher für den Touch

> Das bedeutet ja das der
> Bildaufbau langsam ist aufgrund das für ein Vollbild 320x240x2 Bytes,
> dann 150kByte benötigt wird.
nicht nur langsam, wenn das überhaupt so langsam geht würdest du immer 
nur einen Teil des Bildes sehen. Wenn du keine 50-60Hz erreichst wird 
das nichts.

> Eine weitere Frage ist ob ein MCU Interface ein Mikrocontroller ist
> welcher für den Bildaufbau sorgt und ich dann bequem über SPI diesem nur
> Aktualisierungen mitteile?
Ein MCU Interface bedeutet das du per μC Bilddaten anliefern kannst, um 
den Bildaufbau und Refresh kümmert sich der Displaycontroller selbst. 
Das Interface musst du nur bedienen wenn du am Bildinhalt was änderen 
willst.

> Sind das dann die mit aufgeführten IC`s wie
> ILI9335, ST7789V oder ILI9342C??
z.B. es gibt verschieden Schnittstellen z.B. 8- / 16-Bit parallel oder 
SPI was du nutzt hängt von den möglichen Leitungen die du am μC anbinden 
musst sowie vom benötigten Datendurchsatz ab. Parallel > schnell, aber 
viele Leitungen; SPI > langsam aber wenig Leitungen
Die Displaycontroller haben i.d.R. verschiedene Schnittstellen 
eingebaut, da man das Display selten "nackt" kauft sonden als Modul mit 
entsprechenden bastelfreundlichen Anschlüssen
sind nicht immer alle Varianten die der Controller bietet auch extern 
zugänglich.

> Wie läuft das dann mit dem Kapazitiven Touch? Gleich wie bei SPI und MCU
> nur Rückwärts?
Da wird ein extra Controller auf dem Displaymodul vorhanden sein der in 
den meisten Fällen per SPI kommuniziert.

Sascha

von dasrotemopped (Gast)


Lesenswert?

doch, tut es. du willst nur um das Lesen der Datenblätter von ILI9335, 
ST7789V oder ILI9342C herumkommen.

>Wie läuft das dann mit dem Kapazitiven Touch?
>Gleich wie bei SPI und MCU nur Rückwärts?
Genau so, RTFM.

Gruß,
dasrotemopped.

PS: Ohne Lesen geht nur mit den Raspi TFTs, die von Raspi-Linux direkt 
unterstützt werden.

von Sawyer M. (sawyer_ma)


Lesenswert?

Sascha W. schrieb:
> Sawyer M. schrieb:
>> - SPI+RGB interface with driver ic ILI9335
>> - RGB interface,driver ic ST7789V
>> - MCU interface with driver ic ILI9342C
>>
>> Eine weitere Frage ist ob ein MCU Interface ein Mikrocontroller ist
>> welcher für den Bildaufbau sorgt und ich dann bequem über SPI diesem nur
>> Aktualisierungen mitteile?
> Ein MCU Interface bedeutet das du per μC Bilddaten anliefern kannst, um
> den Bildaufbau und Refresh kümmert sich der Displaycontroller selbst.
> Das Interface musst du nur bedienen wenn du am Bildinhalt was änderen
> willst.

Das bedeutet das ich den Raspi direkt über GPIO´s an das MCU Interface 
anschließe. Also der Displaycontroller direkt an einen µC angeschlossen 
wird per GPIO?

Also wenn ich mal als Beispiel dieses Display auswähle: 
http://www.mouser.de/ProductDetail/Displaytech/DT022CTFT/?qs=5aG0NVq1C4w1OFErASsmag%3d%3d

Dann hat dieses Touch und den Treiber IC ILI9341V verbaut. Die 
Schnittstelle ist RGB/MCU.

Auf Seite 5 ist dann die Pin Belegung aufgeführt. Wie gehe ich da nun am 
besten vor wenn ich das an einem Raspi anschließen möchte?

Pin 1       ist logisch
Pin 2-5     mir nicht klar
Pin 6       logisch
Pin 7-10    für den Bildaufbau mit Clock und Enable
Pin 11-28   Ein paralleler Datenbus? Direkt auf den Raspi?
Pin 29-34   außer das es SPI ähnlich und somit vermutlich für das Touch
Pin 35      "FMARK" keine Ahnung
Pin 36-45   ist mir logisch


------------------------------------------------------------------------ 
---
P.s: Ich bin villt neu in der Displaywelt, aber würde mich freuen wenn 
ich durch diesen Forumsbeitrag vieles dazu lernen könnte und villt am 
Ende theoretisch weiß auf was man achtet und wie man ein TFT mit z.B. 
RGB/MCU ansteuert.


Vielen Dank für eure Hilfe. Bin euch sehr dankbar dafür :)

von Arduinoquäler (Gast)


Lesenswert?

Sawyer M. schrieb:
> Die Schnittstelle ist RGB/MCU.

Nein.

Die Schnittstelle ist universell.

Auswählbar aus mehreren Optionen durch setzen der Bits an
Pin 2-5.

Ansonsten kann ich mich nur anschliessen an:

dasrotemopped schrieb:
> RTFM.


Sawyer M. schrieb:
> Ich bin villt neu in der Displaywelt, ....

... aber du bist auch zu faul um dich in die Materie einzuarbeiten.

von Arduinoquäler (Gast)


Lesenswert?

Hier noch ein Link für diejenigen die auch zu
faul zum Suchen sind.

https://cdn-shop.adafruit.com/datasheets/ILI9341.pdf

von dasrotemopped (Gast)


Angehängte Dateien:

Lesenswert?

Erst mal machst du es dir selbst schwerer als nötig, weil du mit jedem 
neuen Display auch den entsprechenden TFT Controller wechselst. Kein TFT 
Controller ist der richtige oder falsche, wenn du dich nicht ausreichend 
damit beschäftigst. Der ILI9341 bei deiner letzten Wahl ist auch OK, 
aber Pin  2-5 wäre dir klar, wenn du das Datenblatt gelesen hättest.
Lad es dir doch mal runter:
http://newhavendisplay.com/app_notes/ILI9341.pdf
Auf Seite 24 werden die Pins 2-5 erläutert. Da sollte dir dann klar 
werden, das du konfigurieren musst, welches Interface vom Controller 
aktiv ist !
Wenn IM0-3 richtig eingestellt sind brauchst du nur SPI und 2 
Steuerleitungen für das Display, den Rest kannst du ignorieren. Aber 
bestell dir lieber ein TFT mit Pinleiste statt Flexkabel, das ist 
bastelfreundlicher.
Auf dem Bild sind 2 TFT mit ili9341 Controller, das auf der roten PCB 
ist schon vorkonfiguriert für SPI, das andere noch ganz frei 
konfigurierbar.  Der ILI9341 kann einfach alle Schnittstellen, darum ist 
das Datenblatt auch   245 Seiten lang.

Google hilft auch für eine Schritt für Schritt Anleitung:
https://www.nico-maas.de/?p=925
https://www.youtube.com/watch?v=wxJpWRPKe-g

>vieles dazu lernen könnte und villt am Ende theoretisch weiß ..
Theoretisch wissen kann jeder alles, erst wenns läuft kann man was !

Einen Display Controller ganz zu verstehen benötigt ein paar Wochen, da 
muss man schon was Arbeit reinstecken. Nur was fertiges 
zusammenzuklicken wird dich nicht weit bringen. Wenn du kein 
ausgemachter Linux Spezi bist ist der Raspi vielleicht auch nicht der 
beste Startpunkt.

Gruß,
dasrotemopped.

von Harry L. (mysth)


Lesenswert?

Du darfst nicht vergessen, daß du auch die passenden Kernel-Treiber für 
das Display brauchst.

Die kleineren Displays werden üblicherweise via SPI angebunden.
Der Touch-Controller hängt ebenfalls am SPI-Bus, hat aber natürlich ein 
eigenes Select-Signal.

Dafür gibts auch für die von dir genannten Chips bereits fertige 
Treiber, die bereits im Raspbian Kernel enthalten sind: fbtft

Im Wiki von fbtft findet man eine schöne Übersicht über die gängigen 
Displays in Verbindung mit einem Raspberry Pi inkl. Hinweisen zum 
Anschluss:

https://github.com/notro/fbtft

: Bearbeitet durch User
von Sawyer M. (sawyer_ma)


Lesenswert?

dasrotemopped schrieb:
> Erst mal machst du es dir selbst schwerer als nötig, weil du mit jedem
> neuen Display auch den entsprechenden TFT Controller wechselst. Kein TFT
> Controller ist der richtige oder falsche, wenn du dich nicht ausreichend
> damit beschäftigst. Der ILI9341 bei deiner letzten Wahl ist auch OK,
> aber Pin  2-5 wäre dir klar, wenn du das Datenblatt gelesen hättest.
> Lad es dir doch mal runter:
> http://newhavendisplay.com/app_notes/ILI9341.pdf
> Auf Seite 24 werden die Pins 2-5 erläutert. Da sollte dir dann klar
> werden, das du konfigurieren musst, welches Interface vom Controller
> aktiv ist !

Aha, das war wohl der Hinweis der mir fehlte. Habe ich das nun richtig 
verstanden!? Wenn ich für IM3 IM2 IM1 IM0 folgendes setze 1 1 1 0 in dem 
ich einfach die auf Vcc oder GND setze. Somit habe ich ja schlussendlich 
4-wire 8-bit data serial interface gesetzt.

Die Verdrahtung läuft ja dann wie in diesem Link 
https://learn.adafruit.com/user-space-spi-tft-python-library-ili9341-2-8/wiring
ab. Nur falls ich das Display verwende mit dem FPC kable, muss ich erst 
auf einen FPC Stecker und von da aus das die verdrahtung an den SPI 
vornehmen.

Alles richtig?


Aber eins verstehe ich immer noch nicht. In der Produkt beschreibung 
steht ja das es Touch hat. Aber ich finde nirgends einen Touchcontroller 
den ich dann noch per SPI anbinde?

Bin ich schon wieder blind? Den muss ich vermutlich auf ähnliche art und 
weise setzen wie beim Displaycontroller, oder?

http://www.mouser.de/ProductDetail/Displaytech/DT022CTFT/?qs=sGAEpiMZZMu%2fRY1bNe3bO6wz7D657ZcE%2f%252b%2fKrmS%2fuqf4%252bj%2fpIKcI7g%3d%3d

> Einen Display Controller ganz zu verstehen benötigt ein paar Wochen, da
> muss man schon was Arbeit reinstecken. Nur was fertiges
> zusammenzuklicken wird dich nicht weit bringen. Wenn du kein
> ausgemachter Linux Spezi bist ist der Raspi vielleicht auch nicht der
> beste Startpunkt.

Anschließend kommt noch das Programmieren.

: Bearbeitet durch User
von Ungläubiger (Gast)


Lesenswert?

Sawyer M. schrieb:
> Bin ich schon wieder blind? Den muss ich vermutlich auf ähnliche art und
> weise setzen wie beim Displaycontroller, oder?

Das habe ich dir schon hier erklärt!

Beitrag "Re: Display Ansteuerung"

Willst du nicht lesen, oder verstehst du das nicht?

von Ungläubiger (Gast)


Lesenswert?

Ungläubiger schrieb:
> Das habe ich dir schon hier erklärt!

Daher auch die mehrfache Empfehlung von verschiedener Seite
dass du doch besser ein fertiges LCD Modul verwenden solltest.
Da ist der Touch Controller schon drauf.
Oh Mannnnnnnn.....

von Sawyer M. (sawyer_ma)


Lesenswert?

Ungläubiger schrieb:
> Ungläubiger schrieb:
>> Das habe ich dir schon hier erklärt!
>
> Daher auch die mehrfache Empfehlung von verschiedener Seite
> dass du doch besser ein fertiges LCD Modul verwenden solltest.
> Da ist der Touch Controller schon drauf.
> Oh Mannnnnnnn.....

Ja ich weiß das alles einfacher wäre wenn ich ein fertiges Modul nehmen 
würde das extra auf den Raspi zugeschnitten ist. Jedoch brauche ich eben 
2.2" mit Kapazitiven Touch. Das gibt weltweit noch nicht als perfektes 
Raspi Modul.

Was macht man wenn es so etwas nicht gibt? Genau, versuchen alles zu 
verstehen und selbst sich das Modul zusammen zu bauen.

Sonst hätte ich ganz einfach deine Tipps angenommen für die ich dir auch 
sehr dankbar bin. :)

: Bearbeitet durch User
von W.S. (Gast)


Lesenswert?

Sawyer M. schrieb:
> Ich habe gelesen das bei RGB bekommt das Display kontinuierlich seine
> Daten im TFT üblichen Format (RGB, Hsync, VSync mit einem konstanten
> Pixeltakt). Zusätzlich ist SPI notwendig um die entsprechenden Spannungs
> und Timingparameter einmalig einzustellen. Das bedeutet ja das der
> Bildaufbau langsam ist aufgrund das für ein Vollbild 320x240x2 Bytes,
> dann 150kByte benötigt wird.

Das siehst du aber ziemlich falsch.

Also: beim RGB (RGB, DEN, HSync, VSync) also parallelen Interface kriegt 
das Display tatsächlich kontinuierlich seine Daten. Der Pixeltakt liegt 
bei kleineren Displays im 8..10 MHz Bereich und bei etwas größeren 
(800x480) im 30 MHz Bereich. Bei noch größeren eben noch höher.

Die 24 Bit Farbe sollte man bei µC-Basteleien besser vergessen, da sind 
16 Bit eher geeignet, weil ausreichend Farbe und weniger RAM-Bedarf.

Ein etwaiger SPI-Anschluß ist für den Gebrauch des Displays nicht 
erforderlich, denn der Takt und überhaupt das Aufsetzen des 
Bild-Refresh's macht man im µC. Am SPI kann man eher ein serielles 
EEPROM annehmen, wo die Daten des Displays drin stehen, also 
Displaygröße in Pixeln, HPorch und VPorch, Breite von HSync und VSync 
usw.

Die direkte Ansteuerung des Displays aus dem im µC vorhandenen RAM ist 
die schnellste von allen, allerdings zu dem Preis, daß der Systembus 
heftig belastet ist, so etwa 60 MB/s muß man dort erstmal durchgweinkt 
bekommen - und das parallel zum Bedarf der CPU.

W.S.

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.