Auf einen Blick

Mit einer Familie der Simple-LCD-Grafikcontroller lassen sich individuelle Anforderungen an Speicher, Interface und Funktionalität realisieren. Bestehende Mikrocontrollerlösungen lassen sich einfach um ein TFT erweitern. Integrierte Framebuffer, Multi-Layer, BitBLT und LUTs entlasten die CPU. Dadurch hat die CPU mehr Zeit für die Applikation, ohne dass die Darstellung leidet. Das Powermanagement wird vereinfacht – der Mikrocontroller kann komplett schlafen.

TFT-Displays die einen Treiber mit integriertem SRAM Framebuffer verwenden, sind im Consumerbereich üblich und somit diesen kurzlebigen Produktzyklen unterworfen. Diese Angebote sind günstig, aber mit Vorsicht zu genießen beziehungsweise zu hinterfragen. Was dann noch bleibt sind Displays mit RGB, LVDS-, RSDS-Schnittstelle, die ständig mit einem Pixeldatenstrom versorgt werden müssen, da sie sonst kein Bild mehr anzeigen.

Bereits ein kleines 3,5-Zoll-Display mit QVGA-Auflösung (320 x 240 Pixel) bietet einen 24-Bit Farbraum. Das bedeutet 225 kByte SRAM für einen einzelnen Framebuffer, der kontinuierlich ausgelesen und im richtigen Format und Timing an das TFT geschickt werden will. Typischerweise geschieht dies mit 60 Hz, was zu einer Datenrate von über 13 MByte/s führt. Viele 8-Bit-Mikrocontroller sind alleine mit dem Datentransfer, der dann meist vom externen RAM kommt, mehr als ausgelastet, denn hier müssen die 13 MByte/s vom RAM gelesen und zum Display geschrieben werden. Zusammen sind das dann schon 26 MByte/s.

Richtig schwierig für die Mikrocontroller wird es, wenn höhere Auflösungen gewünscht werden, wie sie zum Beispiel bei fünf oder sieben Zoll typisch sind (WVGA 800 x 480) und weitere Bildebenen genutzt werden sollen.

Integrierte TFT-Controller

Hier sind es bereits 1,1 MByte für einen einzelnen Frame und eine Ebene und somit 66 MByte/s bei 60 Hz. Würde man das zusammen mit den Steuersignalen mit einem Mikrocontroller erzeugen wollen, würde man auch die meisten 32-Bit-Mikrocontroller lahm legen. Wohlgemerkt im richtigen Timing, da das TFT-Display Fehler im Timing sofort mit entsprechenden Artefakten quittiert.

Übersicht gängiger TFT-Größen und deren Kenngrößen. Der Speicherdurchsatz gibt Hinweise, was der Grafikcontroller kontinuierlich erledigen muss, nur um einen einzelnen Layer darzustellen.

Übersicht gängiger TFT-Größen und deren Kenngrößen. Der Speicherdurchsatz gibt Hinweise, was der Grafikcontroller kontinuierlich erledigen muss, nur um einen einzelnen Layer darzustellen.Ineltek

Natürlich gibt es auch Prozessoren, auch für industrielle Anwendungen, mit integriertem LCD/TFT-Controller, wie zum Beispiel SAM9 (ARM926) und SAMA5 (Cortex-A5) von Atmel, LPC (ARM9) von NXP, SPEAr (ARM9, Cortex-A9) von ST und Sitara (Cortex-A8/15) von TI. Die integrierten TFT-Controller übernehmen die Transfers vom externen Framebuffer zum Display, die entsprechende Formatierung und die Erzeugung der Steuersignale.

Allerdings sind diese Prozessoren meist ohne integrierten Programmspeicher, den man extern ergänzen muss (zum Beispiel paralleles NOR FLASH oder NAND FLASH, teils auch serielles FLASH, SD-Karten oder eMMC). Dazu kommt das SDRAM für den Framebuffer, Powermanagement mit vielen Spannungen für diese Komponenten und korrekte Ein-Ausschaltsequenz.

Drei Beispielkonfigurationen für kleine 8-Bit (oder 32-Bit) -MCU, Cortex-A SoC mit Minimalperipherie und Cortex-A SoC, Minimalperipherie und Epson LCD-Controller zur Entlastung und für Stromsparmodus mit aktivem TFT.

Drei Beispielkonfigurationen für kleine 8-Bit (oder 32-Bit) -MCU, Cortex-A SoC mit Minimalperipherie und Cortex-A SoC, Minimalperipherie und Epson LCD-Controller zur Entlastung und für Stromsparmodus mit aktivem TFT.Ineltek

Da diese Lösungen auf SoC-Basis mit externen Speichern entweder nur im BGA-oder QFP-Gehäusen mit vielen Pins verfügbar sind sowie parallele Busse brauchen, wird eine Leiterplatte mit mindestens vier Lagen notwendig, wohingegen man bei einem typischen Mikrocontrollerdesign noch mit zwei Lagen auskam.

Bei batteriebetriebenen Anwendungen ist der Stromverbrauch ein zentrales Thema. Ein SoC kann in verschiedene Schlafmodi gehen. Bei den sehr sparsamen kann der Display-Refresh jedoch nicht mehr aufrecht erhalten werden, da hier auch das externe SDRAM abgeschaltet wird in dem der Framebuffer liegt.

Soll das Display jedoch seinen Inhalt weiter anzeigen, muss das SoC das RAM für den Display-Refresh weiter aktiv halten. Die CPU kann nur in den Idle-Mode gehen. Das benötigt bei modernen DDR2-SDRAMs schnell mehrere hundert mW an permanenter Leistungsaufnahme.

Am leichtesten lässt sich mit dem System aus einem kleinen Mikrocontroller (zum Beispiel AVR oder ATSAM) sparsam mit Leistung umgehen.  Aber auch beim SoC hilft der externe Grafikcontroller Energie zu sparen.

Am leichtesten lässt sich mit dem System aus einem kleinen Mikrocontroller (zum Beispiel AVR oder ATSAM) sparsam mit Leistung umgehen. Aber auch beim SoC hilft der externe Grafikcontroller Energie zu sparen.Ineltek

Geringer Stromverbrauch

Im Gegensatz dazu kann mit einem Epson-S1D13L01-Grafikcontroller an einem 4,3-Zoll-WQVGA-Display der Inhalt weiterhin angezeigt werden und der Stromverbrauch hierfür auf nur zirka 20 mW reduziert werden. Das SoC kann, sooft es die Applikation zulässt, vollständig in den Schlafmodus schalten. Dies funktioniert auch mit einem Mikrocontroller und noch weiter reduzierter Leistungsaufnahme.

Da wäre noch die Software, um ein solches System passend zu betreiben: Auf einem ARM9 oder ARM-Cortex-A lässt sich mit Unterstützung der Chiphersteller auch ein Linux zum Beispiel mit Qt-Oberfläche betreiben. Damit hat man fast alle von einem Desktop gewohnten Annehmlichkeiten.

Wer allerdings noch keine Erfahrungen hat, ein Embedded-Linux mit Qt auf einer eigenen Hardware aufzusetzen, der sei gewarnt: hier kann der Aufwand schnell mehrere Wochen in Anspruch nehmen. Weiterhin gibt es fertige Module mit SoCs, Speicher, Powermanagement und sogar fertig portiertem Linux. Allerdings hat diese Lösung auch ihren Preis.

Welcher Ansatz ist der eleganteste?

Schön wäre es, einen dedizierten Baustein verwenden zu können, der verschiedene TFT-Displays mit dem vertrauten Mikrocontroller ansteuern kann. Durch die Zweichip-Architektur behält man die Flexibilität bei der Controllerauswahl und bekommt eine skalierbare Plattform zur Ansteuerung von TFT-Displays.

Mit vielen Jahren Erfahrung bei der Ansteuerung von Displays hat Epson genau diese Plattform. Basierend auf den LCD-Controllern S1D13781, S1D13742 und S1D13748 hat das Unternehmen nun die neuen low-cost Simple-LCD-Controller S1D13L01, S1D13L02 und S1D13L03 herausgebracht.

Der S1D13L01 bietet mit 384 kByte integriertem SRAM, 24-Bit TFT-Interface, SPI und parallelem Host-Interface alles, um auch ein 5-Zoll- oder 7-Zoll-TFT-Display von einem 8-Bit-Mikrocontroller ansteuern zu können, ohne dabei Abstriche in der Applikationsperformance machen zu müssen. Der LCD-Controller kümmert sich um das TFT-Display (Refresh, Timing), der Mikrocontroller um die Applikation.

Blockschaltbild des S1D13781 mit zwei Layern, LUTs und der BitBLT Engine. Dem preiswerten S1D13L01 fehlen die BitBLT-Einheit und der (C)STN-Support für passive Displays.

Blockschaltbild des S1D13781 mit zwei Layern, LUTs und der BitBLT Engine. Dem preiswerten S1D13L01 fehlen die BitBLT-Einheit und der (C)STN-Support für passive Displays.Ineltek

Zwei Drittel Speicher einsparen bei komplettem Farbraum

Das mag erst einmal konträr klingen zu der Aussage in der Einleitung, da ja ein 800 x 480 Pixel großes Bild mit 24 Bit (3 Byte) pro Pixel knapp 1,1 MByte belegt. Allerdings unterstützt der S1D13L01 Farbpaletten (LUT – Look-up Table) zur Farbraumkonvertierung. Dabei wird zu einer reduzierten Farbpalette (zum Beispiel 8 Bit oder 256 Farben) für jede Farbe des Pixels im Framebuffer ein 24-Bit-Farbwert des Displays abgelegt. Dadurch behält man den kompletten Farbraum des Displays, spart jedoch zwei Drittel an Speicher. Benötigt man keine fotorealistische Darstellung von Bildern, sondern nur ein paar Farben für das Menü und Schriften, reichen 256 Farben meist aus. Zumal sie zur Laufzeit durch Aktualisierung der LUTs einfach angepasst werden können. Legt der Kunde Wert auf die exakte Farbe seines Logos, trifft man diese durch den vollen Farbraum trotzdem.

In den Framebuffer der Epson-LCD-Controller passt nicht nur der Inhalt eines Bildes. Reduziert man Auflösung oder Farbtiefe lassen sich die PiP-Funktionen nutzen, um zum Beispiel ein Videooverlay oder ein OSD durch Hardware auf das Display zu bringen.

In den Framebuffer der Epson-LCD-Controller passt nicht nur der Inhalt eines Bildes. Reduziert man Auflösung oder Farbtiefe lassen sich die PiP-Funktionen nutzen, um zum Beispiel ein Videooverlay oder ein OSD durch Hardware auf das Display zu bringen.Ineltek

Der reduzierte Platzbedarf gilt nicht nur im Framebuffer, sondern auch für alle vom Controller übertragenen Daten wie Bitmaps, Schriften und so weiter, die aus einem nichtflüchtigen Speicher in den Framebuffer kopiert werden müssen. Ein kleinerer Mikrocontroller ist für die reduzierte Datenmenge dankbar und quittiert dies mit flüssigerem Bildaufbau beziehungsweise mehr verfügbarer Rechenzeit für die Applikation.

Schreibt man in einen Framebuffer während dieser auf ein angeschlossenes Display ausgegeben wird und beendet die Aktualisierung nicht vor dem nächsten Durchlauf (16 ms beziehungsweise 1/60 s), kann dies sichtbar werden. Im Jargon nennt man diesen Effekt Tearing. Auf zwei Arten lässt sich diesem Effekt begegnen: durch synchronisiertes Schreiben auf den Framebuffer oder mit Double Buffering. Zu Letzterem wird ein zweiter Framebuffer mit gleichem Inhalt im Speicher angelegt und mit der Änderung beschrieben.

Mehr verfügbare Rechenzeit

Sobald die Änderung komplett abgeschlossen ist, wird die Adresse des zweiten Puffers im Speicher an den LCD-Controller zur Ausgabe übergeben. Nachteil ist der doppelte Speicherbedarf.

Normalerweise ist das Schreiben in den Framebuffer ein destruktives Schreiben, man überschreibt also die vorigen Daten. In der Anwendung bedeutet das ein neues Grafikelement (Text, Fenster und so weiter), das auf dem Display erscheint und die ursprünglichen Daten überschreibt. Wenn dieses Grafikelement wieder verschwinden soll, ist es erforderlich, den Hintergrund mit den vorigen Daten wiederherzustellen. Das kostet für jede Änderung des Bildinhalts viele Zugriffe auf den Framebuffer. Zudem muss sich die Anwendung die ursprünglichen Daten merken, um sie wiederherstellen zu können.

Eleganter geht dies, wenn mehrere Ebenen zur Verfügung stehen, die der LCD-Controller per Hardware überlagert. Der Epson S1D13L01 bietet zwei solcher Ebenen. Die zweite Ebene (PiP – Picture-in-Picture) kann kleiner sein als die Hauptebenen. Dadurch wird nicht pauschal der doppelte Speicher benötigt. Die PiP-Ebene lässt sich frei in der Hauptebene positionieren. Dieser Vorgang benötigt nur einen Befehl für die Koordinaten beziehungsweise für das Ein- und Ausblenden (inklusive Fading per Alpha-Blending) anstatt tausende von Bytes eines Bitmaps zu sichern, zu überschreiben und wieder zurückzuschreiben.

Neben den hier aufgeführten Grafikcontrollern mit integriertem Framebuffer bietet Epson zusätzliche Typen mit externem SDRAM (S1D13517) und USB 2.0 HS-Hostinterface (S1D13U11) an.

Neben den hier aufgeführten Grafikcontrollern mit integriertem Framebuffer bietet Epson zusätzliche Typen mit externem SDRAM (S1D13517) und USB 2.0 HS-Hostinterface (S1D13U11) an.Ineltek

Für nicht rechteckige Grafikelemente kann man eine Farbe bestimmen, die den Hintergrund durchscheinen lässt. Die PiP-Ebene kann auch per Alpha-Blending stufenweise ein- oder ausgeblendet werden. Für höher auflösende Displays oder Anforderungen an die Farbtiefe gibt es in der Epson-Grafikcontrollerfamilie auch noch weitere Bausteine. Diese bieten zusätzliche Grafiklayer, einen Skalierer, Farbraumkonvertierer (YUV <-> RGB), BitBLT Engine und mehr an.

Wenige kByte an Programmspeicher reichen für den Treiber

Jetzt stellt sich die berechtigte Frage nach Softwaresupport, Treiber und so weiter. So viel Intelligenz will bedient werden und ein Treiber ist dann bestimmt kompliziert aufgebaut. Das ist nicht ganz richtig. Epson nennt diese Familie nicht umsonst Simple LCD Controller: wenige kByte an Programmspeicher reichen für den Treiber. Eine beispielhafte Implementierung in C für einen Minimaltreiber, der allerdings bereits die komplette Konfiguration für Haupt- und PiP-Ebene samt LUTs und einen Teil der BitBLT des S1D13781 abdeckt, belegt auf einem Atmel ATMEGA88PA nicht einmal 3 kByte im Flash.

Ineltek hat mit einem Partner eine low-cost Evalkit-Serie für seine Hantronix- und Tianma-TFT-Displays entwickelt.

Ineltek hat mit einem Partner eine low-cost Evalkit-Serie für seine Hantronix- und Tianma-TFT-Displays entwickelt.Ineltek

Epson bietet Referenztreiber in C-Sourcecode für PIC, STM32 und Kinetis an. Zusätzlich wird ein Konfigurationswerkzeug zur Verfügung gestellt, um die Paneltimings der Displays aus dem Datenblatt in die korrekten Werte für die Register der Grafikcontroller umzusetzen. Praktischerweise gibt dieses Programm eine fertige C-Headerdatei aus, die direkt in das eigene Projekt übernommen werden kann.

Kommt man damit nicht weiter hilft der Support der Distributoren wie Ineltek und auch Epson Europe Electronics bei Fragen gerne weiter.