TFT direct-drive für diverse µController

Schaltungsbeispiele für Renesas RX610, RX210, H8SX/1668R undSTM32F407

sowie RP2040 Pico-Board

 

übliche TFT-Ansteuerung
einfache TFT-Ansteuerung
1. Schaltung für RX610 und STM32F407
2. Schaltung für RX210
3. Schaltung mit H8SX/1668R
4. kleines Demoprogramm für STM32F4
5. Ausführung mit STM32F407 und 5,7" QVGA-TFT
6. PicoTerm-TFT mit RP2040 Pico-Board und 4,3" Display
zurück zur Übersicht

 

Stand: 2014-05-01

Für kleinere Meßgeräte oder Steuerungen, kann eine TFT-Anzeige mit Touchscreen die Bedienung deutlich verbessern. Hier werden Beispiele gezeigt, wie aktuelle und kostengünstige µController dies ohne oder ohne viel zusätzliche Hardware nebenbei erledigen können. Eine mininale Wiedergabe mit 64 Farben wird dabei als ausreichend erachtet. Im einfachsten Fall wird das interne RAM des µC als Bildspeicher genutzt. Ein oder mehrere Timer werden nicht benötigt!

 

übliche TFT-Ansteuerung:

In der Regel verteilt man die Aufgaben Steuerung und Anzeige auf einen µController und einen separaten TFT-Controller, die über einen seriellen oder parallelen Bus miteinander gekoppelt sind. Die serielle Ansteuerung des TFT-Controllers kann ausreichend sein, ist aber gegenüber der Ansteuerung mit einem parallelen Prozessorbus langsamer. Bei beiden Verfahren muß der µController in der Regel warten, bis neue Displaydaten abgenommen werden können. Für jedes Pixel muß die entsprechende Zieladresse ausgegeben werden, was zusätzliche Buszyklen erfordert. Der Prozessor wird ausgebremst.

Eine deutlich schnellere Displayausgabe kann stattfinden, wenn der µController einen TFT-Controller mit auf dem Chip hat, sodaß die Zugriffe auf den Bildspeicher direkt erfolgen können. Ein externes RAM für den Bildspeicher ist zumeist zusätzlich notwendig, wodurch aber auch große Displays mit hoher Farbtiefe betrieben werden können. Geeignete µController sind allerdings teurer, aufwendiger zu beschalten und für kleinere Schaltungen damit etwas überzogen.

Einen anderen Weg TFTs anzusteuern ist Renesas gegangen, indem diverse neuere µCs mit einem externen DMA-Controller ausgestattet sind. Die Daten eines ext. RAMs werden per exDMA direkt auf das parallele Interface eines QVGA- oder WQVGA-Displays geschrieben. Die vorhandenen Timer (einer MTU) erzeugen die Signale für DCLCK, Hsync und Vsync und der DMA-Controller liefert synchron die Daten dazu. Das liefert Bilder mit 16 Bit Farben bei 60 Bildern/s, wie es für übliche TFTs ausreichend ist.
Diese Art der Ansteuerung hat aber einen kleinen Haken: während die Displaydaten ausgegeben werden, ist jeglicher Zugriff auf den Bildspeicher durch die CPU nicht zulässig. Die synchrone Datenausgabe darf nicht gestört werden. Dies wird in der Regel dadurch kompensiert, daß der Vsync-Impuls abgewartet wird, wo keine Datenausgabe zum TFT erfolgt. Ein RTOS kann für Transparenz der Zugriffe sorgen.

nach oben

einfache TFT-Ansteuerung:

Beschränkt man sich zunächst auf eine einfache Farbwiedergabe mit 64 Farben, kann jedes Pixel in einem Byte gespeichert werden. Für ein QVGA-Display braucht man 320x240 = 76800 Byte und ein WQVGA-Display in der Regel 480x272 = 130560 Byte. Der Bildspeicher eines QVGA-TFT kann problemlos in einem µC mit 96k internem RAM untergebracht werden; bei einem WQVGA sind 128k internes RAM erforderlich, was 131072 Bytes entspricht. Für mache Anwendung können die 'nur noch' verbleibenden 512 Byte für Stack und Variablen ausreichen. Geschickter ist es jedoch, die Bildhöhe um zwei auf 270 Zeilen zu verringen, womit dann weitere 960 Byte freies RAM der Anwendung zur Verfügung stehen.

Der Vorteil dieser Ansteuerung ist der direkte und uneingeschränkte Zugriff der CPU auf den Bildspeicher! Es müssen nur <2% der CPU-Leistung für die TFT-Ausgabe 'abgegeben' werden. Ferner wird kein Timer benötigt.

Erweitert mit einer ext. Farbzuordnungstabelle (CLUT) lassen sich mit einem Byte ein Satz von 256 Farben anzeigen. Verwendet man ein zusätzliches ext. RAM können auch 65536 Farben dargestellt werden. Die Schaltung weiter unten für den RX210 zeigt diese Möglichkeit.

nach oben

1. Schaltung für RX610 und STM32F407:

Beide Controller verfügen über min. 128k internes RAM und können damit direkt ein WQVGA-TFT ansteuern. Die Schaltung ist simpel:

Beim Controller muß das ext. Speicherinterface aktiviert werden und die Displaydaten können per DMA ins TFT geschrieben werden. Die DMA-Ausgabe ist freilaufend und braucht keinen Timer. Nachfolgend Beispielbilder, wie sie auf einem WQVGA angezeigt werden. Bei den für die Ausgabe eines Zeichens angegebenen Zeiten ist zu beachten, daß hierbei schon ein Test auf Überschreiben des Bildbereiches enthalten ist. Außerhalb des Bildspeichers kann somit nichts 'zerschossen' werden!

Die Schaltung wurde mit einem RX610-Demoboard (CPU-Takt 96MHz) und einem STM32F4-Discovery Board (CPU-Takt 168MHz) realisiert.

Beschränkt man sich auf ein QVGA-Display kommen auch weitere µCs der RX-Serie mit 96k RAM in Betracht, die direkt angeschlossen werden können: RX62N, RX621, RX630. Die Ausgabegeschwindigkeiten entsprechen dem eines RX610.

nach oben

2. Schaltung für RX210:

Folgende Schaltung wurde für ein RPBRX210 Demoboard entwickelt, um zu sehen, was ein 'kleiner' µC der RX-Serie leisten kann. Es ist ein ext. RAM vorhanden, welches 16Bit Farbtiefe erlaubt und 3 x QVGA- oder 2 x WQVGA-Bilder gleichzeitig speichern kann. Da der RX210 nur mit 50MHz arbeitet, sind die Bildwiederholraten niedriger aber immer noch beachtlich und vielfach auch ausreichend. Beim einem QVGA-TFT werden 50 bzw. 58 Bilder/s erzeugt.

Hier zunächst der üppige Schaltplan:

und die Anzeige selbst:

Abschließend hierzu der noch nicht vollendete Musteraufbau, der huckepack auf das RPBRX210-Demoboard gesteckt ist:

nach oben

3. Schaltung mit H8SX/1668R:

Diese Schaltung verwendet den exDMA-Controller des 1668R. Die Vsync- und Hsync-Signale wurden noch mit im Bildspeicher untergebracht, was bei der ersten Umsetzung der TFT-Direktansteuerung die absolute Synchronität sichergestellt hat. Ein ext. RAM war in jedem Fall notwendig, der der Controller nur über 56k internes RAM verfügt.

Dazu das Foto einer Leiterplatte mit den Grundfunktionen, Piepser, RS232 und Spannungversorgung:

 

nach oben

4. kleines Demoprogramm für STM32F4:

Für das STM32F4-Discovery-Board existiert ein kleines Demoprogramm zur WQVGA-Ansteuerung, mit welchem folgendes Bild erzeugt wird:

Die Quelldatei ist 'main.c' mit dem Zeichensatz 'cp850-8x16.dat'. Das ausführbare Programm ist 'STM32F4-WQVGA_TFT.hex'.

Die gezeigten Routinen können erheblich (>Faktor 2) optimiert werden. Um die Übersichtlichkeit nicht zu beeinträchtigen, ist die Abfrage des touch-screen entfallen. Für eigene Anwendungen muß sichergestellt sein, dass der Prozessor initialisiert ist und mit 168MHz läuft.

Da bis auf ca. 1kB der zusammenhängende Speicher von 128kB belegt ist, sollte für den Stack und weitere Variablen das 64kB große CCM verwendet werden. Wenn nur ein QVGA-TFT verwendet wird, bleibt erheblich mehr RAM frei. Die Ausgabe zum Display erfolgt freilaufend ohne Timer über das FSMC-Interface, was mit der einfachen Beschaltung für weitere Verwendung blockiert ist. Mit ein bißchen Logik und einem 74VHC573 Latch, können per FSMC-Bus auch weitere Speicherbausteine (o.ä.) ext. angeschlossen werden.

Mit der angehängten .hex-Datei kann man ohne großen Aufwand und ohne TFT die Beine vom µC wackeln lassen. Vsync (PD11) und Hsync (PD12) zeigen das Timing.

nach oben

5. Ausführung mit STM32F407 und 5,7" QVGA-TFT:

Als Beispiel für eine fertige Anzeige, ein paar Bilder einer Version mit dem STM32F407.
Das erste Bild zeigt die rückwärtige Montage der Leiterplatte auf einer 5,7"-TFT-Anzeige. Auf der rechten Seite befindet sich der 10-pol. Steckverbinder, der die RS232-Signale RxD und TxD bereitstellt und über den auch die Versorgungsspannung angelegt werden kann. Pin 10 dieses Steckers wird als BOOT0-enable für die Programmierung per USART3 verwendet.
Hinzu kommen der Schaltregler 12-24V -> 3,3V, ein (schallgedämpfter) Piezo-Piepser mit OPV als Treiber und ein 10-pol. Stecker für potentielle Erweiterungen.

Links oben befinden sich der µC nebst Quarz, SWD-Anschluß und EEPROM für Kalibrierdaten. Links unten dann ein paar Gatter, die das Attribut 'Blinken' erlauben, und ferner eine Schaltung, die für stabiles Ein-/Ausschalten der Anzeige sorgt.

Dann noch zwei Bilder einer Anwendung, mit der Zahlenwerte und Texte eingegeben werden und sich auf Grund des 5,7"-Displays noch mit den Fingern bedienen lassen.

 


nach oben

 

6. PicoTerm-TFT mit RP2040 Pico-Board und 4,3" Display:

2023-12-20:
Zusammengestellt aus diversen Schaltungen und Programmen ist "PicoTerm-TFT" entstanden, was als einfaches Terminal zur Textausgabe dienen aber auch farbige Grafik mit 64 Farben darstellen kann. Die Vorgaben dazu waren: einfach, günstig, Standard 4,3“-Anzeige und (unbedingt !) schnell.

Wesentlicher Kern der Hardware ist ein Pico-Board mit RP2040, welches die seriellen Befehle umsetzt, Zeichen in den intern vorhandenen Bildspeicher schreibt - div. (vollständige) Zeichensätze sind vorhanden - und diesen auf die TFT-Anzeige ausgibt. Eine vorhandene Platine dient in reduzierter Form der notwendigen Verdrahtung des 40 pol. Folienkabelsteckers, der Spannungserzeugung für die Hintergrundbeleuchtung sowie RS232-Treiber und eines Piepsers.
Die 10 pol. Anschlussbuchse kann 1:1 an eine D-Sub-Buchse angeschlossen werden. Die Polung ist kompatibel zu COMx-Schnittstellen eines PC oder USB-RS232 Adapterkabeln.

Anbei das Schaltbild, wobei die Bauteile für die Frequenzzähler-Option wegfallen können. Schaltbild 2 zeigt den RS232-Anschluß, EEPROM falls benötigt und die Konstantstromquelle für die Hintergrundbeleuchtung. Die Platine hat Befestigungslöcher für Abstandshalter zum TFT und Befestigungslaschen zur Befestigung an der Frontplatte – je nach Bedarf.

Anmerkung zum 4,3" TFT: aktuelle Displays haben einen 40-pol. Folienkabelanschluß, über den alle Signale einschließlich Hintergrundbeleuchtung und Touch-Folie geführt werden. Abweichend gibt es auch Displays, bei denen die Hintergrundbeleuchtung über separate Anschlüsse geführt wird. Nur für diese ist der 4-pol. Steckverbinder notwendig. Zu kontrollieren ist die Polung der Touch-Folie, ob rechts-links und oben-unten wie angegeben ausgeführt sind. Bei anderer Polung läßt sich das im Programmteil "touch.c" anpassen, wie es dort mit #define EDT_TFT gezeigt ist.

Das verwendete Display muß den DE-Modus unterstützen, der heutzutage üblich ist. Für größere Darstellung können auch 7" Anzeigen (800x480) mit halbierter Auflösung von 400x240 angesteuert werden. Dazu muß das Programm "TFT_dma_DE.c" derart angepaßt werden, daß jedes Pixel zwei Taktimpulse bekommt (doppelte Breite) und jede Zeile doppelt ausgegeben wird (doppelte Höhe).

Leiterplatte: unbestückt - bestückt auf EDT-Display. Pico-Board per Stiftleiste; (Bauteile links-oben nur für Frequenzzähler)

Der Quellcode (.zip-Datei) ist für Segger Embedded Studio umgeschrieben. Die .u2f-Datei kann direkt verwendet werden. Um das Programm nicht zu überladen, wurden zunächst Grundfunktionen implementiert. Die verwendeten Funktionen können noch ergänzt oder verändert werden.
Die Leiterplatte ist zwar für eine andere Anwendung gemacht, kann aber teilbestückt direkt verwendet werden. Anbei die passende .zip-Datei.

Um einen Eindruck zu vermitteln, wie man das PicoTerm-TFT praktisch verwenden kann, gibt es im Anhang das Programm "PicoTerm-demo.ino", welches für einen ATmega328 geschrieben wurde. Es ist ein reines C-Programm, verwendet keine Arduino-IDE spezifischen Befehle und kann für 'gewöhnliche' Programmierung einfach in .c umbenannt werden. Die Code-Grösse ist < 7 kB.

In der Funktion 'main()' wird ein Testprogramm für ein Demo-Menü und die zugehörige touch-Bedienung gezeigt. Zuvor werden Timer1 und UART initialisiert und die Baudrate von 57,6 kBd auf 250 kBd hochgesetzt. Da die Option MIT_BLINKEN aktiv ist, die zwei alternierende Seiten anzeigt, können damit rot-grüne bzw. grün-rote Herzen in der oberen Teile ohne Prozessoreingriff dargestellt werden: siehe Bild 1 und Bild 2. Die Koordinaten des letzten Druckpunktes auf den Bildschirm werden in der unteren Zeile angezeigt.
Bild 3 zeigt die möglichen Farben, die fortlaufend verändert werden und Bild 4 eine Textausgabe mit auto-scroll am Bildende: mit 3 ms/Zeile werden 333 Zeilen/s angezeigt. Bilder 5-7 zeigen die implementierten Zeichensätze mit 8x16. Die Befehle „tft_xyz“ vom ATmega328 sind gleichlautend auch auf dem PicoTerm-TFT vorhanden, sodaß man das Anwenderprogramm bei Bedarf auch ohne grosse Änderungen auf dem Pico-Board mit maximaler Geschwindigkeit laufen lassen kann. Die begrenzende RS232 Übertragung entfällt und die touch-Koordinaten liegen unkodiert vor.

Anmerkung: im Programmteil "usart0_pico.c" sind die Pins für den RS232-Treiber invertiert. TxD vom ATmega328 kann daher direkt an RS232-RxD vom RP2040 angeschlossen werden. Zwischen RS232-TxD vom RP2040 zum RxD vom ATmega328 sollte ein Widerstand (2k2) geschaltet werden, um den Strom in den Eingang zu begrenzen. Damit erspart man sich einen zusätzlichen RS232-Treiber auf Seite des ATmega. Werden normgerechte RS232-Signale verwendet, sollte die Invertierung abgeschaltet werden.


Bild1+2: farbiger Blinkmodus für die Herzen


Bild3+4: Farbvariation und farbige Textausgabe


Bild5+6: Zeichensatz CP850 mit Umcodierung einiger Unicode-Zeichen


Bild7:

nach oben

zurück zur Übersicht