TFT-Displays - Anleitung
Stand: | 2022 |
---|
- Produkt:
- TFT-Displays TFT24, TFT32, TFT3B, TFT43, TFT50, TFT70
- Produktnummern:
- 1202, 1203, 1204, 1205, 1207
- Produktseite:
- http://www.advamation.de/produkte/embeddedpc/tft/
Inhalt
- 1 Hinweise
- 2 Lieferumfang
- 3 Kontaktinformationen / Support
- 4 Übersicht
- 5 Inbetriebnahme
- 6 Hardware
- 7 Software
1 Hinweise
1.1 Bestimmungsgemäße Verwendung
Die Displays TFT24 (2.4" / 61mm), TFT32 und TFT3B (3.2" / 81mm), TFT43 (4.3" / 109mm), TFT50 (5.0" / 126mm) und TFT70 (7.0" / 176mm) sind Displays zum Anschluss an das AdvaBoard RPi1 und weitere Display-Anschlussplatinen von uns. Es handelt sich dabei um elektronische Produkte, deren Verwendung gewisses Fachwissen voraussetzt, und die deshalb nur von sachkundigen Personen eingesetzt werden dürfen.
Die Displays dürfen (ohne Rücksprache mit uns) nur an das AdvaBoard RPi1 bzw. unsere weiteren Display-Anschlussplatinen angeschlossen werden, da ansonsten Schäden am Display bzw. an anderen Geräten entstehen können.
Lesen Sie vor der Benutzung diese Anleitung sowie die weitere Dokumentation sorgfältig durch, bewahren Sie sie auf und reichen Sie das Produkt nur zusammen mit dieser Anleitung (bzw. einem Hinweis/Link auf diese Anleitung) an dritte Personen weiter.
1.2 Sicherheitshinweise
Bei Schäden, die durch Nichtbeachten dieser Anleitung verursacht werden, erlischt die Gewährleistung/Garantie! Für Folgeschäden übernehmen wir keine Haftung!
Bei Sach- oder Personenschäden, die durch unsachgemäße Handhabung oder Nichtbeachten der Sicherheitshinweise verursacht werden, übernehmen wir keine Haftung. In solchen Fällen erlischt die Gewährleistung/Garantie.
Trotz sorgfältiger Arbeit kann leider nicht ausgeschlossen werden, dass das Produkt, die Software oder die Dokumentation Fehler enthält. Anwender sollten daher in jedem Fall überprüfen, ob das Produkt für ihre Anwendung geeignet ist und in ihrer Anwendung korrekt funktioniert.
Für eventuelle Schäden, die durch fehlerhafte oder fehlende Information, Softwarefehler oder andere Fehler im Produkt verursacht werden, kann unabhängig von ihrer Ursache keine Haftung übernommen werden. Da wir zudem keinen Einfluss auf die Installation und Verwendung des Produkts haben, deckt die Gewährleistung nur das Produkt selbst ab.
Das Produkt darf nicht für Anwendungen eingesetzt werden, bei denen eine Fehlfunktion oder ein Produktversagen zu Personenschäden, Tod, relevanten Sach- oder Umweltschäden oder anderen schwerwiegenden Folgeschäden führen kann.
Soll das Produkt dennoch für einen derartigen Zweck verwendet (oder in ein anderes derartiges Produkt eingebaut) werden, so ist sicherzustellen, dass durch eine Fehlfunktion oder ein Produktversagen unseres Produkts keine derartigen Schäden auftreten können!
- Das TFT-Display ist ein elektronisches Produkt. Es darf deshalb nur von fachkundigen Personen eingesetzt werden, da bei unsachgemäßer Verwendung Schäden am Produkt und evtl. an damit verbundenen Geräten auftreten können. Es ist zudem stets auf entsprechenden ESD-Schutz zu achten.
- Das Produkt darf nicht extremen Temperaturen, starken Temperaturschwankungen, direktem Sonnenlicht, starken Erschütterungen, Feuchtigkeit, Nässe, Dämpfen, Schmutz, brennbaren Gasen oder übermäßiger mechanischer Beanspruchung ausgesetzt werden.
- Das Produkt darf nicht bzw. nur nach Rücksprache verändert oder umgebaut werden.
- Das Produkt ist kein Spielzeug und sollte außerhalb der Reichweite von Kindern aufbewahrt werden! Das Produkt und dessen Zubehör kann zudem verschluckbare Kleinteile beinhalten; bewahren Sie diese Teile unbedingt außerhalb der Reichweite von Kindern auf. Lassen Sie ebenso niemals Verpackungsmaterial unachtsam herumliegen, da insbesondere Plastikfolien für Kinder zu einem gefährlichen Spielzeug werden können. Es besteht Erstickungsgefahr!
- Wenn anzunehmen ist, dass ein gefahrloser Betrieb nicht mehr möglich ist, so ist das Produkt außer Betrieb zu setzen und gegen unbeabsichtigten Betrieb zu sichern. Dies ist insbesondere dann der Fall, wenn das Produkt sichtbare Beschädigungen aufweist.
- Sollten Sie Zweifel oder Fragen zum korrekten Gebrauch des Produkts oder bezüglich der Sicherheit haben, so wenden Sie sich bitte an uns oder an qualifiziertes Fachpersonal.
2 Lieferumfang
- TFT-Display
- optional: TFT-Display-Verlängerungskabel, 40-polig
3 Kontaktinformationen / Support
Sollten Sie Fragen oder Beanstandungen zum Produkt haben, bzw. Ihr Gerät einen Defekt aufweisen, so wenden Sie sich bitte an uns.
Bei Fragen bzw. Problemen, die Ihr Gerät betreffen, würden wir Sie bitten, uns die entsprechende Seriennummer mitzuteilen. Die Seriennummer finden Sie auf dem gelben Aufkleber auf dem Produkt.
Bitte senden Sie Ihr Gerät nicht ohne Aufforderung an uns Anschrift. Viele Probleme können gelöst werden, ohne dass ein Versand erforderlich ist.
- E-Mail:
- support@advamation.de
- Mailinglisten:
- http://www.advamation.de/community/
- Webseite:
- http://www.advamation.de
- Anschrift:
- Advamation GmbH & Co. KG- Advamation -Südendstr. 186517 Wehringen
4 Übersicht
TFT-Display Vorderseite
(zum Vergrößern anklicken) |
TFT-Display Rückseite
(zum Vergrößern anklicken) |
Die TFT-Displays sind für den Anschluss an das AdvaBoard RPi1 konzipiert. Zusammen mit diesem und einem Raspberry Pi ergibt sich somit ein universeller kleiner Embedded-PC mit Touch-Bedienung.
Alle Displays besitzen 4 Befestigungslöcher, mit denen sie z.B. an einer Frontplatte oder (ggf. mittels Adapter) am AdvaBoard befestigt werden können. Beim TFT32/TFT3B-Display entsprechen die Positionen der Befestigungslöcher exakt denen des AdvaBoard RPi1, so dass das TFT32/TFT3B-Display (mit Abstandshaltern) direkt mit dem AdvaBoard verschraubt werden kann.
Alle Displays besitzen einen resistiven Touchscreen (der auch mit Handschuhen bedienbar ist), und eine einstellbare LED-Hintergrundbeleuchtung.
Außerdem enthalten die Displays einen SD-Karten-Steckplatz, der per SPI angesprochen werden kann.
Im Auslieferungszustand ist die Display-Oberfläche durch eine Schutzfolie geschützt, die vor dem Betrieb entfernt werden kann.
Das AdvaBoard RPi1, die TFT-Displays, der Raspberry Pi usw. enthalten höchst empfindliche IC-Chips. Um die Platinen und andere Komponenten vor Beschädigung durch statische Elektrizität (ESD) zu schützen, sollten Sie bei allen Arbeiten am AdvaBoard RPi1, TFT-Display, Raspberry Pi, usw. einige Vorsichtsmaßnahmen beachten:
- Trennen Sie alle Komponenten vom Stromnetz, bevor Sie eine Komponente an- oder abstecken.
- Achten Sie auf entsprechenden ESD-Schutz, bevor Sie mit elektronischen Bauteilen arbeiten. Hierzu sollte ein geerdetes Schutzarmband angelegt werden.
- Fassen Sie die Platinen nur an den Rändern an, und berühren Sie möglichst nicht die IC-Chips und die Anschlüsse.
- Verwenden Sie immer eine stabile, antistatische, nichtleitende Unterlage für die Platinen.
5 Inbetriebnahme
Beachten Sie vor der Inbetriebnahme unbedingt die oben stehenden Hinweise zum Umgang mit elektronischen Bauteilen/Baugruppen!
Inbetriebnahme:
mit vorkonfigurierter SD-Karte
Sollten Sie zusammen mit dem TFT-Display eine SD-Karte mit installierter Software gekauft haben, so ist das TFT-Display dort bereits konfiguriert, der Touchscreen bereits kalibriert und beides in das Linux-System eingebunden. Schließen Sie in diesem Fall das TFT-Display an das AdvaBoard RPi1, (siehe Anschluss am AdvaBoard RPi1), sowie das AdvaBoard RPi1 an den Raspberry Pi an.
Wenn Sie danach von der SD-Karte booten, sollte gegen Ende des Bootvorgangs die Linux-Kommandozeile inkl. einiger Boot-Meldungen auf dem TFT-Display erscheinen.
ohne vorkonfigurierte SD-Karte
Inbetriebnahme des AdvaBoard RPi1
Bevor das TFT-Display in Betrieb genommen wird, sollte das AdvaBoard RPi1 – wie in der AdvaBoard RPi1-Inbetriebnahme-Anleitung beschrieben – in Betrieb genommen werden.
Anschluss des TFT-Displays an das AdvaBoard RPi1
Schließen Sie das TFT-Display wie unter Anschluss am AdvaBoard RPi1 beschrieben an das AdvaBoard RPi1 an. Um Fehler auszuschließen, empfehlen wir, danach die "ersten Tests" aus der AdvaBoard RPi1-Inbetriebnahme-Anleitung nochmals durchzuführen.
Unterbrechung der Verwendung als Linux-Display
Wird das Display bereits als Linux-Display verwendet (z.B. zur Anzeige der Linux-Kommandozeile oder eines Linux-Desktops), und will man einen der folgenden Schritte (z.B. die Touchpanel-Kalibrierung) durchführen, so muss zunächst die Verwendung als Linux-Display unterbrochen werden:
sudo /etc/init.d/am_rpi_framebuffer.sh stop sudo /etc/init.d/am_rpi_touchpanel.sh stop
Einschalten des Displays
sudo am_rpi_tft_tool -t TFT32 -m on
Sollten Sie nicht das 3.2"-Display verwenden, so ersetzten Sie TFT32 hier und in den folgenden Kommandos durch:
- TFT3B für das 3.2" (109mm) TFT-Display, Version "B" oder "C"
- TFT43 für das 4.3" (109mm) TFT-Display
- TFT50 für das 5.0" (126mm) TFT-Display
- TFT70 für das 7.0" (176mm) TFT-Display
Erste Tests (Farbdurchlauf, Testbild)
sudo am_rpi_tft_tool -t TFT32 -m TEST_COLORS sudo am_rpi_tft_tool -t TFT32 -m TEST_ROTATE
Optional: Kalibrierung des Touchscreens
siehe Touchpanel-Kalibrierung
Optional: Einrichten des Displays als Linux-Display
Um das Display als Linux-Display zu verwenden, müssen die entsprechenden Treiber installiert und aktiviert werden:
Framebuffer-Kernel-Modul installieren: siehe Framebuffer-Kernel-Modul
Init-Skripte installieren und konfigurieren: siehe Init-Skript am_rpi_framebuffer.sh sowie "Start per Init-Skript" unter Linux-Touchpanel-Treiber
Optional: /etc/X11/xorg.conf erstellen und modifizieren: siehe X Window System / X11
Optional: Soll nach dem Booten automatisch die graphische Benutzeroberfläche (X11) gestartet werden, so sollte dies per raspi-config konfiguriert werden:
$ sudo raspi-config -> 3 Enable Boot to Desktop/Scratch ---> Desktop Log in as user 'pi' at the graphical desktop
Zusätzlich sollte die Datei /etc/X11/xorg.conf modifiziert werden, so dass X11 standardmäßig in der gewünschten Konfiguration startet. Da X11 standardmäßig die jeweils obersten Einträge einer Art (z.B. 1. Screen-Eintrag, 1. ServerLayout-Eintrag) in der xorg.conf-Datei verwendet, müssen dazu die gewünschten Screen- und ServerLayout-Abschnitte zum Anfang der Datei verschoben werden (so dass sie die ersten ihrer Art sind).
6 Hardware
6.1 Anschluss am AdvaBoard RPi1
Die TFT-Displays können auf zwei Arten mit dem AdvaBoard RPi1 verbunden werden:
per direktem "Aufstecken" auf das AdvaBoard RPi1
Das TFT-Display wird direkt auf das AdvaBoard RPi1 aufgesteckt; es ist kein Kabel notwendig.
Insbesondere beim 3.2"-Display (TFT32) ist dies die bevorzugte Variante, da die Befestigungslöcher des TFT32-Displays mit denen des AdvaBoard RPi1 übereinstimmen, und AdvaBoard und Display mit Abstandsbolzen einfach miteinander verschraubt werden können. (Entsprechende Abstandsbolzen sind im AdvaBoard RPi1-Zubehörset enthalten; der etwas abgefräste Abstandsbolzen sollte hierbei für das Loch neben dem Raspberry Pi-Steckverbinder verwendet werden.)
Für die größeren Displays werden demnächst Befestigungsadapter verfügbar sein, um diese Displays am AdvaBoard RPi1 zu fixieren, wenn sie auf das AdvaBoard RPi1 gesteckt sind.
Wird zudem der Raspberry Pi (mit den weiteren Abstandshaltern aus dem AdvaBoard-Zubehörset) mit dem AdvaBoard RPi1 verschraubt, entsteht eine kompakte Embedded-PC-Einheit aus Display, AdvaBoard und Raspberry Pi.
per Flachbandkabel-Verlängerung
Soll das TFT-Display nicht direkt auf das AdvaBoard RPi1 gesteckt werden, so ist eine 40-polige Flachbandkabel-Verlängerung notwendig (siehe Bild).
Dieses Kabel sollte aus technischen Gründen möglichst kurz gehalten werden. Wir empfehlen eine Länge von max. 12cm, größere Längen sind aber ggf. nach Rücksprache möglich. Entsprechende Kabel (mit wählbarer Länge und wählbarer Steckerausrichtung) können von uns bezogen werden.
In beiden Fällen ist unbedingt auf die richtige Orientierung zu achten
(siehe Bild)!
Insbesondere beim 3.2"-Display muss darauf geachtet werden, dass die
"Nase" des Steckverbinders immer zur Innenseite des Displays zeigt! (Die
Steckverbinder der größeren Displays sind bereits entsprechend codiert.)
Der Anschluss des Displays an das AdvaBoard RPi1 sollte immer nur im ausgeschalteten Zustand erfolgen!
TFT-Display-Anschluss, Vorderseite |
TFT-Display-Anschluss, Rückseite |
6.2 Stromversorgung
Die TFT-Displays werden vom AdvaBoard RPi1 mit Strom versorgt.
Beim 7.0"-Display (TFT70) ist jedoch zu beachten, dass die max. Stromaufnahme dieses Displays zusammen mit dem AdvaBoard RPi1 und dem Raspberry Pi 1A übersteigt; eine Versorgung über ein handelsübliches Micro-USB-Netzteil (5V/1A) ist in diesem Fall nicht ausreichend. Es wird empfohlen, stattdessen ein stärkeres Netzteil (z.B. 5V/2A) am 5V-Netzteil-Steckverbinder des AdvaBoard RPi1 zu verwenden (siehe Punkt 2 unter Stromversorgung in der AdvaBoard RPi1-Anleitung).
6.3 Touchpanel
Die Touchpanels der TFT-Displays arbeiten resistiv, d.h. die Oberfläche besteht aus einer Kunststoff-Schicht, auf die zur Bedienung ein geringer Druck ausgeübt werden muss. Die Bedienung ist dabei sowohl mit dem Finger, als auch mit einem Handschuh oder einem Touchscreen-Stift möglich.
Scharfe Gegenstände, normale Stifte (z.B. Kugelschreiber, Bleistifte) und andere eckige bzw. kantige Gegenstände sollten auf keinen Fall verwendet werden, da diese die Touchpanel-Oberfläche beschädigen können.
Das Touchpanel erkennt gleichzeitig immer nur eine Position, eine Multi-Touch-Bedienung ist somit nicht möglich.
6.4 Technische Daten
TFT24 | TFT32 | TFT43 | TFT50 | TFT70 | |
---|---|---|---|---|---|
Größe / Diagonale | 2.4" / 61mm | 3.2" / 81mm | 4.3" / 109mm | 5.0" / 126mm | 7.0" / 176mm |
aktive Fläche [mm] | 48.96*36.72 | 64.80*48.6 | 95.04*53.86 | 108*64.80 | 153.7*86 |
Auflösung | 320*240 | 320*240 | 480*272 | 800*480 | 800*480 |
Seitenverhältnis | 4:3 | 4:3 | 16:9 | 15:9 | 15:9/16:9 |
Pixelgröße | 0.15mm | 0.2025mm | 0.2mm | 0.135mm | ~0.2mm |
Pixeldichte | 166 dpi | 125 dpi | 128 dpi | 188 dpi | ~132 dpi |
Vollbild-Framerate | max. 31 fps | max. 18 fps | max. 6-7 fps | max. 6-7 fps | |
Touchpanel | resistiv | resistiv | resistiv | resistiv | resistiv |
Helligkeit [cd/m²] | |||||
Kontrast | 150-250:1 | 250-350:1 | 150-250:1 | 400-500:1 | |
Blickwinkel hor. | +35°/-15° | 130° | +45°/-45° | +60°/-60° | |
Blickwinkel vert. | +48°/-48° | 110° | +15°/-35° | +50°/-70° | |
Stromaufnahme | |||||
Leistungsaufnahme | |||||
Platinengröße [mm] | 53*48 | 94.5*65 | 120*74 | 133*84.4 | 181*108 |
Bef.-Löcher | D 2.5mm | D 3.2mm | D 3.2mm | D 3.2mm | D 3.2mm |
Gewicht | 32g | 53g | 95g | 135g | 255g |
(Typische Werte, Abweichungen möglich, Maße in mm, Blickwinkel bei Kontrast >= 10:1;
die fehlenden Daten werden in Kürze ergänzt.)
- Maßzeichnungen:
- DXF-Zeichnung [1] aller Displays
- TFT32 Maße (PDF)
- TFT43 Maße (PDF)
- TFT50 Maße (PDF)
- TFT70 Maße (PDF)
[1] | Kostenfreie CAD-Software für DXF-Dateien: z.B. http://www.librecad.org, http://www.qcad.org/de/ |
6.5 Steckverbinder
- Stiftleiste (TFT24 / TFT32 / TFT3B) bzw. Wannenstecker (TFT43 / TFT50 / TFT70), 40-polig, RM 2.54mm
- Pin 1/3/../39 in Richtung Platinen-Innenseite
TFT-Display-Stiftleiste (TFT24 / TFT32 / TFT3B) |
(Ansicht: Steckseite) |
TFT-Display-Stecker (TFT43 / TFT50 / TFT70) |
(Ansicht: Steckseite) |
Pin | Signal | Beschreibung |
---|---|---|
1 | TFT_DB0 | Display-Datenbus |
2 | GND | Masse |
3 | TFT_DB1 | Display-Datenbus |
4 | +3.3V | Display-Versorgungsspannung (3.3V) |
5 | TFT_DB2 | Display-Datenbus |
6 | RES | reserviert |
7 | TFT_DB3 | Display-Datenbus |
8 | TFT_RS | Display-Steuerleitung |
9 | TFT_DB4 | Display-Datenbus |
10 | TFT_DB11 | Display-Datenbus |
10 | TFT_WR | Display-Steuerleitung |
11 | TFT_DB5 | Display-Datenbus |
12 | TFT_RD | Display-Steuerleitung |
13 | TFT_DB6 | Display-Datenbus |
14 | TFT_DB8 | Display-Datenbus |
15 | TFT_DB7 | Display-Datenbus |
16 | TFT_DB9 | Display-Datenbus |
17 | TP_SCK | Touchpanel Takteingang |
18 | TFT_DB10 | Display-Datenbus |
19 | TP_CS | Touchpanel Chip-Select |
21 | TP_MOSI | Touchpanel MOSI |
22 | TFT_DB12 | Display-Datenbus |
23 | – | – |
24 | TFT_DB13 | Display-Datenbus |
25 | TP_MISO | Touchpanel MISO |
26 | TFT_DB14 | Display-Datenbus |
27 | TP_IRQ | Touchpanel Interrupt |
28 | TFT_DB15 | Display-Datenbus |
29 | SD_MISO | SD-Karte MISO |
30 | TFT_CS | Display-Steuerleitung |
31 | SD_SCK | SD-Karte Takteingang |
32 | – | – |
33 | SD_MOSI | SD-Karte MOSI |
34 | TFT_RESET | Display-Steuerleitung |
35 | SD_CS | SD-Karte Chip-Select |
36 | LED_5V | Hintergrundbeleuchtung (5V) |
37 | – | – |
38 | LED_R | Hintergrundbeleuchtung (5V + Vorwiderstand) |
39 | – | – |
40 | – | – |
7 Software
7.1 Überblick
Die Software für die TFT-Displays ist in der AdvaBoard RPi1-Software enthalten. Vor der Verwendung der TFT-Display-Software sollte die AdvaBoard RPi1-Software installiert und das AdvaBoard RPi1 in Betrieb genommen werden (siehe AdvaBoard RPi1-Inbetriebnahmeanleitung).
Auf die TFT-Displays und das Touchpanel kann auf mehrere Arten zugegriffen werden:
Direkter Zugriff:
Es kann direkt mit C, Python [2], Shell-Skripten oder einem Kommandozeilenprogramm auf das Display zugegriffen werden, um z.B. das Display zu initialisieren, einzelne Pixel zu setzen, Pixelbilder anzuzeigen, oder das Display zu konfigurieren.
Linux-Display:
Das Display kann als "Linux-Display" dienen, und darauf die Linux-Konsole oder eine grafische Benutzeroberfläche angezeigt werden.
Eine Kombination der beiden Möglichkeiten ist ebenfalls möglich.
Es ist zudem möglich, auf das Display von mehreren Programmen aus "gleichzeitig" zuzugreifen; beispielsweise kann sich ein Programm um die Anzeige kümmern, ein anderes um das Touchpanel, und ein weiteres kann die Display-Helligkeit einstellen. Hierzu ist in der Software ein automatischer Locking-Mechanismus integriert.
[2] | Die Python-Bibliotheken werden in Kürze verfügbar sein. |
7.2 Programmbibliotheken
Die AdvaBoard RPi1-Software enthält eine Bibliothek für die TFT-Displays und Touchpanels (am_rpi_tft). Mit dieser kann das Display ein-/ausgeschaltet, initialisiert, konfiguriert und beschrieben (z.B. einzelne Pixel gesetzt oder Flächen ausgefüllt) werden. Zusätzlich kann die Display-Helligkeit eingestellt und das Touchpanel abgefragt und kalibriert werden.
Informationen zur Programmbibliothek und den darin enthaltenen Funktionen finden Sie in der Software-Dokumentation.
7.3 Programm am_rpi_tft_tool
Zusätzlich zur Programmbibliothek gibt es ein Kommandozeilenprogramm (am_rpi_tft_tool), das nahezu die gesamte Funktionalität der Bibliothek enthält, und mit dem das TFT-Display und das Touchpanel auf einfache Art und Weise getestet, eingestellt und verwendet werden können.
Insbesondere für Tests, zum Experimentieren mit den Bibliotheks-Funktionen, zum Anzeigen von Pixelbildern, zur Einstellung der Display-Helligkeit und zur Kalibrierung (und Überprüfung der Kalibrierung) des Touchpanels ist dieses Programm ein sehr hilfreiches Werkzeug.
Da die Funktionsnamen und Parameter des Kommandozeilenprogramms nahezu identisch mit den Bibliotheksfunktionen sind, können bestimmte Funktionen bzw. Abläufe zunächst mit dem Kommandozeilenprogramm getestet, und später einfach in C- oder Python-Programme überführt werden.
Eine kurze Übersicht über die Funktionen erhalten Sie per am_rpi_tft_tool --help:
Usage: am_rpi_tft_tool [OPTION...] - Advamation RPi TFT-display-interface tool Help Options: -h, --help Show help options Application Options: -i, --iface=ADVABOARD_RPi1 display-interface (default: ADVABOARD_RPi1) -c, --clk=CLKDIV interface clock speed (clock-divider, 4/6/8/../65536, default: 4) -t, --type=TFT_.. display-type (TFT32,TFT3B,TFT43,TFT50,TFT70) -r, --rot=angle display-rotation (0, 90, 180, 270) -f, --calib=FILENAME touchpanel calibration-file necessary for TEST_TPCALIB optional for TP_POS, TP_NEXT, TEST_TP, TP_CALIBRATE TP_CALIBRATE writes this file, the others read it -m, --mode=MODE POWER ON|OFF - turn display-power (and pins) on/off POWER_READ - check display-power RESET - reset display ON [BRIGHTNESS] - turn display on (incl. power) OFF [POWEROFF] - turn display off SLEEP ON|OFF [BRIGHTNESS]- sleep mode WINDOW X0 Y0 W H - set drawing-window (+ position to top-left) POSITION [X0 Y0 W H] X Y - set drawing-position in window PIXEL R G B - draw pixel and increment position PIXELS N R G B - draw N pixels and increment position FILL R G B - fill display BLACK - fill display in black WHITE - fill display in white BACKLIGHT ON|OFF [BRIGHTNESS]- set brightness TEST_COLORS - color-test TEST_FPS - measure FPS TEST_ROTATE - rotation-test IMAGE X0 Y0 W H FILENAME - draw image CLKDIV: 4/6/8/10/.../65536, speed=250MHz/CLKDIV ON|OFF: 0/OFF=off, 1/ON=on POWEROFF: 0=not off, 1=off, default: 1 BRIGHTNESS: backlight-brightness, 0..255, -1=don't change (default: 255) X0/Y0: top-left-corner of drawing-window XY: X-/Y-position W: window-width, 0=max. width H: window-height, 0=max. height R: red-value, 0..255 G: green-value, 0..255 B: blue-value, 0..255 N: number of pixels TP_TOUCHED [TIMEOUT_MS] - wait until touch TP_POS - read touch-position TP_NEXT [TIMEOUT_MS] - wait until touch and read position TP_POSRAW - read raw touch-position TEST_TP - touchpanel-loop TP_CALIBRATE - calibrate the touchscreen TEST_TPCALIB - test calibration TIMEOUT_MS: timeout in ms, or 0=non-blocking, -1=no timeout Note that all drawing-functions (PIXEL, PIXELS, FILL, BLACK, WHITE, IMAGE, TP_CALIBRATE) set or modify the drawing-window and position. All numeric parameters can be decimal, hexadecimal (0x...) or binary (0b...) numbers. -l, --nolock don't use locking (use with care!) -v, --verbose=LEVEL verbosity level (default: 64) (DEBUG: 128, INFO: 64, MESSAGE: 32, WARNING: 16, CRITICAL: 8, ERROR: 4|0)
Die Touchpanel-Funktionen beginnen hierbei mit TP_ oder TEST_TP. Eine detailliertere Dokumentation der einzelnen Funktionen und Parameter finden Sie bei den entsprechenden Bibliotheksfunktionen in der Software-Dokumentation.
Beispiele:
kurzer Test eines TFT32-Displays:
am_rpi_advaboard_tool -m INIT am_rpi_tft_tool -t TFT32 -m ON am_rpi_tft_tool -t TFT32 -m TEST_COLORS am_rpi_tft_tool -t TFT32 -m TEST_ROTATE am_rpi_tft_tool -t TFT32 -m OFF
Einstellen der LED-Hintergrundbeleuchtung:
am_rpi_tft_tool -t TFT32 -m BACKLIGHT ON 255
Kalibrieren des Touchscreens:
siehe Touchpanel-Kalibrierung
7.4 Linux-Display
Siehe auch: | Framebuffer-Software-Dokumentation |
---|
Wird das Display als Linux-Display verwendet, so ist die Ausgabe ähnlich der, die über die HDMI Schnittstelle ausgegeben wird. Es gibt jedoch ein paar Unterschiede:
Framerate: Die Framerate ist üblicherweise geringer als bei HDMI-Displays. Beim 5.0" und 7.0"-Display sind max. 6-7 komplette Frames/s möglich, beim 4.3" bis zu knapp 18 Frames/s und beim 3.2" bis zu 31 Frames/s.
Sofern sich nur Teile des angezeigten Bildes ändern, sind deutlich höhere Frameraten möglich, so dass in diesem Fall trotz der niedrigen Vollbild-Framerate eine sehr flüssige Anzeige möglich ist.
Unsere TFT-Displays eignen sich deshalb primär für Benutzeroberflächen oder Daten-Visualisierungen. Für das Abspielen von Videos sind sie dagegen nur bedingt geeignet.
Rechenlast: Da die Displays den Grafikchip des Raspberry Pi nur bedingt verwenden können, verursachen unsere Displays eine höhere CPU-Rechenlast auf dem Raspberry Pi. Ist der Raspberry Pi durch andere Aufgaben bereits stark ausgelastet, so kann sich die Aktualisierung der Anzeige verzögern.
Um das TFT-Display als "normales Linux-Display" (Konsole und X11) zu verwenden, muss der AdvaBoard-Framebuffer-Treiber installiert und gestartet werden. Dieser besteht aus zwei Teilen:
- einem displayunabhängigen Kernel-Modul, das virtuelle Framebuffer zur Verfügung stellt, und
- einem Programm (user-space daemon), das den virtuellen Framebuffer ausliest und dessen Inhalt auf das Display schreibt.
Technisch funktioniert das "Linux-Display" dann folgendermaßen:
- Man legt ein Framebuffer-Device (z.B. /dev/fb1) an, dessen
Auflösung und Farbtiefe zum Display passen.
Alternativ kann das bereits vorhandene Standard-Raspberry Pi-Framebuffer-Device (/dev/fb0) angepasst und verwendet werden. - Die Linux-Konsole bzw. X11 schreibt seine Ausgabe in dieses Framebuffer-Device.
- Ein Programm (am_rpi_framebuffer) liest den Framebuffer-Speicher periodisch aus und schreibt dessen Inhalt auf das TFT-Display.
- Gleichzeitig können andere Programme (z.B. am_rpi_tft_tool) auf das Display zugreifen, um z.B. die Display-Helligkeit einzustellen oder das Touchpanel abzufragen.
Prinzipiell wird das AdvaBoard-TFT-Display vom Linux-System genauso gehandhabt wie eine zweite Grafikkarte; ein Multi-Monitor-Betrieb (z.B. HDMI-Display + AdvaBoard-TFT-Display) ist genauso möglich wie bei einem Linux-PC mit zwei Grafikkarten.
7.4.1 Framebuffer-Kernel-Modul
Das Advamation-Framebuffer-Linux-Kernel-Modul (advamationfb) stellt geräteunabhängige, virtuelle Framebuffer mit einstellbarer Auflösung bereit. Über das sysfs-Dateisystem können damit dynamisch Framebuffer generiert, abgefragt und wieder gelöscht werden (siehe Framebuffer).
Soll am Raspberry Pi nur das AdvaBoard-TFT-Display, und kein weiteres Display (z.B. HDMI-Display) gleichzeitig betrieben werden, so kann ggf. auf dieses Kernelmodul verzichtet, und der bereits für das HDMI-Display vorgesehene Framebuffer modifiziert und verwendet werden. In diesem Fall ist keine Installation des Framebuffer-Kernelmoduls notwendig. Gleiches gilt, falls das AdvaBoard-TFT-Display und das HDMI-Display die gleiche Auflösung und den gleichen Inhalt anzeigen sollen.
Installation:
Sollten Sie eine SD-Karte mit installierter AdvaBoard-Software von uns erworben haben, so ist das Advamation-Framebuffer-Kernel-Modul dort bereits installiert, und die folgenden Schritte können übersprungen werden.
Soll am Raspberry Pi nur das AdvaBoard-TFT-Display, und gleichzeitig kein weiteres Display (z.B. HDMI-Display) verwendet werden, oder sollen AdvaBoard-TFT-Display und HDMI-Display den gleichen Inhalt anzeigen, so können die folgenden Schritte ebenso übersprungen werden.
Kernel:
Das Advamation-Framebuffer-Kernel-Modul benötigt einen Linux-Kernel mit (a) Unterstützung für Framebuffer-Kernel-Module [3] und (b) verfügbaren Kernel-Headerdateien. Ist im Kernel diese Unterstützung nicht enthalten oder sind keine Kernel-Header verfügbar, so muss ein anderer Kernel installiert werden.
Raspbian:
Leider ist der Standard-Raspbian-Kernel sehr eingeschränkt, und unterstützt u.a. keine Framebuffer-Kernel-Module und stellt keine Kernel-Headerdateien zur Verfügung. Deshalb muss ein anderer Kernel verwendet werden, z.B. der "trunk"-Kernel aus dem Raspbian-Repository.
Installation des "trunk"-Kernels:
sudo apt-get update sudo apt-get install linux-image-3.6-trunk-rpi
Danach muss dieser Kernel als "Boot-Kernel" ausgewählt werden, indem der Datei /boot/config.txt folgende Zeile hinzugefügt wird (bzw. eine evtl. bereits vorhandene kernel=-Zeile entsprechend modifiziert wird):
kernel=vmlinuz-3.6-trunk-rpi
Existiert noch keine kernel=-Zeile in der Datei /boot/config.txt, so kann folgendes Kommando verwendet werden, um die Zeile hinzuzufügen:
sudo sh -c 'echo "kernel=vmlinuz-3.6-trunk-rpi" >> /boot/config.txt'
andere Linux-Distributionen:
Um festzustellen, ob der Linux-Kernel Framebuffer-Module unterstützt, sollte geprüft werden, ob dieser folgende Module enthält (z.B. per ls /lib/modules/`uname -r`/kernel/drivers/video/):
fb_sys_fops.ko syscopyarea.ko sysfillrect.ko sysimgblt.ko
Existieren diese Module nicht, so sollte geprüft werden, ob diese Module evtl. fest in den Kernel einkompiliert wurden. Dazu sollte überprüft werden, ob die Kernel-Konfigurationsdatei (je nach Linux-Distribution: /proc/config.gz oder /boot/config-`uname -r`) folgende Einträge enthält:
CONFIG_FB=y CONFIG_FB_SYS_FILLRECT=y CONFIG_FB_SYS_COPYAREA=y CONFIG_FB_SYS_IMAGEBLIT=y CONFIG_FB_SYS_FOPS=y CONFIG_FB_DEFERRED_IO=y
Ist dies nicht der Fall, so ist ein anderer Kernel notwendig, und es sollte sollte im Repository der Linux-Distribution nachgesehen werden, ob diese einen entsprechenden Kernel enthält, z.B. bei Debian-basierten Distributionen per:
apt-cache search linux-image # oder: aptitude search linux-image
Nach der Installation eines entsprechenden Kernels muss dieser als "Boot-Kernel" ausgewählt werden, indem der Datei /boot/config.txt folgende Zeile hinzugefügt wird (bzw. eine evtl. bereits vorhandene kernel=-Zeile entsprechend modifiziert wird):
kernel=YOUR_KERNEL_IMAGE_FILENAME
YOUR_KERNEL_IMAGE_FILENAME ist hierbei durch den Namen der Kernel-Image-Datei zu ersetzen. Diese Datei liegt üblicherweise in /boot/ und beginnt normalerweise mit vmlinuz-.
Neustart:
Sollten Sie einen anderen Kernel installiert haben, so ist ein Neustart des Raspberry Pi notwendig:
sudo reboot
Nach dem Neustart sollte überprüft werden, ob der neue Kernel tatsächlich verwendet wird:
uname -r
Kompilieren des Framebuffer-Kernel-Moduls:
Raspbian:
Die AdvaBoard RPi1-Software enthält im Verzeichnis prebuilt.2013-09-25-wheezy-raspbian bereits das kompilierte Kernel-Modul für den Kernel "3.6-trunk"; es ist somit nicht notwendig, dieses zu kompilieren.
andere Linux-Distributionen:
Feststellen des Kernel-Namens und der Kernel-Version:
uname -r
Installieren der zugehörigen Kernel-Headerdateien, z.B. für Raspbian 3.6-trunk:
sudo apt-get install linux-headers-3.6-trunk-all
Kompilieren des Kernel-Moduls:
cd advaboard_rpi1-VERSION/kernel/advamationfb/ make clean make
Test des Framebuffer-Kernel-Moduls:
Um das Framebuffer-Kernel-Modul zu testen, sollte dieses dem Kernel hinzugefügt und ein virtueller Framebuffer angelegt werden. Es wird empfohlen, vorher alle anderen Programme zu schließen, da das System im Fehlerfall abstürzen kann.
Wechsel ins Framebuffer-Kernel-Modul-Verzeichnis:
Raspbian:
cd advaboard_rpi1-VERSION/prebuilt.2013-09-25-wheezy-raspbian/
andere Linux-Distributionen:
cd advaboard_rpi1-VERSION/kernel/advamationfb/
Kernel-Modul hinzufügen:
sudo modprobe -a fb_sys_fops sysfillrect syscopyarea sysimgblt sudo insmod ./advamationfb.ko
Falls insmod mit der Fehlermeldung "Invalid module format." oder "Exec format error" fehlschlägt, wurde das Kernelmodul für einen anderen Kernel übersetzt. Dies kann überprüft werden, indem die Ausgaben von uname -a und modinfo ./advamationfb.ko verglichen werden. In diesem Fall muss entweder das Framebuffer-Kernel-Modul nochmals für den laufenden Kernel übersetzt werden, oder es muss der Kernel verwendet werden, für den das Modul übersetzt wurde.
Erstellen eines virtuellen Framebuffers (als root):
$ sudo bash $ echo "320,240,16" > /sys/bus/platform/drivers/advamationfb/new_device $ cat /sys/bus/platform/drivers/advamationfb/list_devices 0: fb1, 320x240x16 $ echo 0 >> /sys/bus/platform/drivers/advamationfb/delete_device $ exit
(Evtl. wird statt fb1 ein anderes Framebuffer-Device (z.B. fb2) angezeigt.)
Optional: Test des virtuellen Framebuffers, indem die Ausgabe der Linux-Konsole darauf umgelenkt und ein Screenshot erstellt wird.
Vorher sollte sichergestellt werden, dass die Bildschirmausgabe aktiv ist, und die Anzeige nicht wegen Inaktivität abgeschaltet wurde (z.B. indem eine Taste auf einer an den Raspberry Pi angeschlossenen Tastatur gedrückt wird).
sudo apt-get install fbcat sudo sh -c 'echo "800,480,16" > /sys/bus/platform/drivers/advamationfb/new_device' con2fbmap 1 1 fbcat /dev/fb1 > ~/advamationfb_test.ppm con2fbmap 1 0 sudo sh -c 'echo 0 >> /sys/bus/platform/drivers/advamationfb/delete_device'
Die Datei advamationfb_test.ppm sollte nun einen Screenshot der Linux-Konsole enthalten.
Installation des Framebuffer-Kernel-Moduls:
Raspbian: Das Kernel-Modul wurde bereits mit der anderen AdvaBoard RPi1-Software installiert; eine separate Installation ist daher nicht notwendig.
andere Linux-Distributionen:
sudo make install sudo depmod
[3] | Kernel-Konfiguration: CONFIG_FB=y CONFIG_FB_SYS_FILLRECT=m CONFIG_FB_SYS_COPYAREA=m CONFIG_FB_SYS_IMAGEBLIT=m CONFIG_FB_SYS_FOPS=m CONFIG_FB_DEFERRED_IO=y |
7.4.2 Framebuffer
Bevor das AdvaBoard-TFT-Display als Linux-Display verwendet werden kann, muss ein Framebuffer mit der passenden Auflösung und Farbtiefe zur Verfügung stehen.
Hierzu gibt es zwei Möglichkeiten:
advamationfb-Framebuffer:
Es wird ein zum Display passender virtueller Framebuffer angelegt. Hierzu ist das Advamation-Framebuffer-Kernel-Modul (siehe vorheriger Abschnitt) notwendig.
Anlegen eines virtuellen Framebuffers (als root):
echo "XRES,YRES,16" > /sys/bus/platform/drivers/advamationfb/new_device
z.B.:
# TFT32, quer und hochkant $ echo "320,240,16" > /sys/bus/platform/drivers/advamationfb/new_device $ echo "240,320,16" > /sys/bus/platform/drivers/advamationfb/new_device # TFT43, quer $ echo "480,272,16" > /sys/bus/platform/drivers/advamationfb/new_device # TFT50, TFT70, quer $ echo "800,480,16" > /sys/bus/platform/drivers/advamationfb/new_device
Auflistung aller virtuellen Framebuffer (als root):
$ cat /sys/bus/platform/drivers/advamationfb/list_devices
Es wird eine Liste aller virtuellen advamationfb-Framebuffer im Format NUMMER: FRAMEBUFFERDEVICE, XRESxYRESxBPP angezeigt.
z.B.:
$ cat /sys/bus/platform/drivers/advamationfb/list_devices 0: fb1, 320x240x16 1: fb2, 240x320x16 2: fb3, 800x480x16 $ ls -l /dev/fb* crw-rw---T 1 root video 29, 0 Jan 1 1970 /dev/fb0 crw-rw---T 1 root video 29, 1 Nov 3 23:05 /dev/fb1 crw-rw---T 1 root video 29, 3 Nov 4 17:47 /dev/fb2 crw-rw---T 1 root video 29, 4 Nov 4 17:47 /dev/fb3
Entfernen eines virtuellen Framebuffers:
echo NUMMER > /sys/bus/platform/drivers/advamationfb/delete_device
z.B.:
$ cat /sys/bus/platform/drivers/advamationfb/list_devices 0: fb1, 320x240x16 1: fb2, 240x320x16 2: fb3, 800x480x16 $ echo 1 > /sys/bus/platform/drivers/advamationfb/delete_device $ cat /sys/bus/platform/drivers/advamationfb/list_devices 0: fb1, 320x240x16 2: fb3, 800x480x16
Ein Framebuffer kann nur entfernt werden, wenn er derzeit nicht verwendet wird.
Standard-Raspberry Pi-Framebuffer:
Alternativ zum advamationfb-Framebuffer kann der bereits (für das HDMI-Display) vorhandene Standard-Raspberry Pi-Framebuffer /dev/fb0 verwendet werden. In diesem Fall zeigen das HDMI-Display (falls vorhanden) und das TFT-Display immer den gleichen Inhalt an. Ist die Auflösung des HDMI-Displays bzw. -Framebuffers größer als die des TFT-Displays, so zeigt das TFT-Display nur einen Ausschnitt an.
Eine evtl. vorhandene und von Linux unterstützte Videobeschleunigung des Raspberry Pi-Grafikchips kann in diesem Fall auch für das TFT-Display verwendet werden.
Informationen des Standard-Framebuffers anzeigen:
fbset -fb /dev/fb0 -i
z.B.:
$ fbset -fb /dev/fb0 -i mode "1024x768" geometry 1024 768 1024 768 16 timings 0 0 0 0 0 0 0 rgba 5/11,6/5,5/0,0/16 endmode Frame buffer device information: Name : BCM2708 FB Address : 0x5f005000 Size : 1572864 Type : PACKED PIXELS Visual : TRUECOLOR XPanStep : 0 YPanStep : 0 YWrapStep : 0 LineLength : 2048 Accelerator : No
Modifikation der Auflösung des Standard-Framebuffers, z.B. für das TFT50-Display (die Auflösung der HDMI-Ausgabe verändert sich dabei ebenso):
fbset -fb /dev/fb0 -xres 800 -yres 480 -vxres 800 -vyres 480 -depth 16
7.4.3 Programm am_rpi_framebuffer
Das Programm am_rpi_framebuffer ist ein Linux-Daemon, der einen Framebuffer periodisch ausliest und dessen Inhalt auf das AdvaBoard-TFT-Display schreibt. Es ist in der AdvaBoard RPi1-Software enthalten und wird zusammen mit dieser (wie in der README-Datei beschrieben) übersetzt und installiert.
Eine kurze Hilfe erhalten Sie mittels am_rpi_framebuffer --help:
Usage: am_rpi_framebuffer [OPTION...] - Advamation framebuffer-daemon Help Options: -?, --help Show help options Application Options: -d, --dev=N framebuffer-number (e.g. 0 for /dev/fb0) -i, --iface=ADVABOARD_RPi1 display-interface (default: ADVABOARD_RPi1) -t, --type=TFT_.. display-type (TFT32,TFT3B,TFT43,TFT_50,TFT_70) -c, --clk=CLKDIV interface clock speed (clock-divider, 4/6/8/../65536, default: 4) -f, --fps=FPS max. frames-per-second Lower framerates reduce the CPU load. -r, --rot=angle display-rotation (0, 90, 180, 270) -x, --x0=X display-window X-coordinate (default: 0) -y, --y0=Y display-window Y-coordinate (default: 0) -w, --width=W display-window width (default: max.) -h, --height=H display-window height (default: max.) -b, --brightness=0..255 backlight-brightness (0..255, default 255) --skipon skip 'display-on' --daemon daemonize -v, --verbose=LEVEL verbosity level (default: 64) (DEBUG: 128, INFO: 64, MESSAGE: 32, WARNING: 16, CRITICAL: 8, ERROR: 4|0)
wichtigste Optionen:
- --dev:
- Nummer des zu verwendenden Framebuffers. Dieser Framebuffer muss bereits existieren.
- --type:
- TFT-Display-Typ: TFT32, TFT3B, TFT43, TFT50 oder TFT70
- --rot:
- Drehung des Displayinhalts um 0, 90, 180 oder 270 Grad.
- --brightness:
- Helligkeit der Display-Hintergrundbeleuchtung. Diese kann später jederzeit per am_rpi_tft_tool verändert werden.
- --daemon:
- Startet das Programm im Hintergrund.
- --fps:
- FPS definiert die maximale Anzahl an Bildern pro Sekunde, und damit die Wartezeit zwischen Display-Updates. Höhere FPS-Werte führen zu einer höheren CPU-Belastung.
- --skipon:
- Überspringt die Display-Initialisierung. Notwendig, falls das Display bereits angeschaltet und (z.B. per am_rpi_tft_tool) konfiguriert wurde, und diese Konfiguration beibehalten werden soll.
Beispiele:
# Verwendung des HDMI-Framebuffers sudo am_rpi_framebuffer -d 0 -t TFT_50 # Verwendung eines Advamation-Framebuffers sudo am_rpi_framebuffer -d 1 -t TFT_50
Sollte die Auflösung des gewählten Framebuffers nicht mit der Auflösung des Displays übereinstimmen, so wird nur derjenige Teil angezeigt, der auf das Display passt. Allerdings wird auf dem Display erst dann etwas angezeigt, wenn der entsprechende Framebuffer von einer Linux-Konsole oder von X11 verwendet wird (siehe Linux-Konsole bzw. X Window System / X11 weiter unten).
Das am_rpi_framebuffer-Programm darf jederzeit abgebrochen und später erneut gestartet werden. Soll z.B. der Displayinhalt um 180° gedreht werden, so kann das Programm abgebrochen und mit dem zusätzlichen Parameter -r 180 erneut gestartet werden. Ebenso sollte das Programm abgebrochen werden, bevor der Touchscreen kalibriert wird.
7.4.4 Init-Skript am_rpi_framebuffer.sh
Siehe auch: | Init-Skript README |
---|
Um beim Booten automatisch einen Framebuffer anzulegen und am_rpi_framebuffer zu starten, kann das Init-Skript am_rpi_framebuffer.sh verwendet werden.
Installation:
cd advaboard_rpi1-VERSION/ sudo cp tools/sysvinit/am_rpi_framebuffer.sh /etc/init.d/ sudo cp tools/sysvinit/am_rpi_framebuffer /etc/default/
Konfiguration: Das Init-Skript wird über die Datei /etc/default/am_rpi_framebuffer konfiguriert. In dieser sind der TFT-Display-Typ, die Display-Rotation, die Display-Helligkeit und evtl. die Touchpanel-Kalibrierdatei angegeben. Zudem kann angegeben werden, ob ein eigener Advamation-Framebuffer angelegt oder der HDMI-Framebuffer verwendet werden soll [4]:
- USE_FB0="0" (Standardeinstellung): Es wird ein eigener Advamation-Framebuffer angelegt.
- USE_FB0="1": Es wird der HDMI-Framebuffer (/dev/fb0) verwendet, und dessen Auflösung an das TFT-Display angepasst.
- USE_FB0="2": Es wird der HDMI-Framebuffer (/dev/fb0) verwendet, ohne dessen Auflösung zu ändern.
Beispiel:
# configuration for AdvaBoard RPi1 framebuffer/touchscreen # # Should be in /etc/default/am_rpi_framebuffer. # # :Author: Advamation <support@advamation.com> TYPE="TFT_50" ROT="0" BRIGHTNESS="255" USE_FB0="0" CALIB="/etc/am_rpi_touchpanel.calib" TP_MODE="0"
Init-Skripte aktivieren: Bei Raspbian bzw. Debian-basierten Systemen kann hierzu update-rc.d (siehe auch: man update-rc.d) verwendet werden:
sudo update-rc.d am_rpi_framebuffer.sh defaults sudo update-rc.d am_rpi_framebuffer.sh enable
Beim nächsten Neustart des Systems wird nun das TFT-Display aktiviert und die Linux-Konsole 1 darauf umgeleitet. Zusätzlich kann das Display über das Init-Skript gestartet und gestoppt werden:
Start (+Umleitung der Linux-Konsole auf das TFT-Display):
sudo /etc/init.d/am_rpi_framebuffer.sh start
Stopp (+Umleitung der Linux-Konsole zurück auf das HDMI-Display):
sudo /etc/init.d/am_rpi_framebuffer.sh stop
Stopp + Start (bzw. Neuladen der Konfigurationsdatei):
sudo /etc/init.d/am_rpi_framebuffer.sh restart
Status-Abfrage:
sudo /etc/init.d/am_rpi_framebuffer.sh status
Anmerkung: Wird der am_rpi_framebuffer-Daemon manuell gestartet (z.B. per sudo am_rpi_framebuffer -t TFT_50 --daemon), so können die stop- und status-Kommandos des Init-Skripts dennoch verwendet werden. Das start bzw. restart-Kommando starten am_rpi_framebuffer jedoch wieder mit der Konfiguration aus /etc/default/am_rpi_framebuffer.
[4] | USE_FB0 ist ab Softwareversion 20140101 verfügbar. Um dies auch in älteren Softwareversionen zu verwenden, muss eine neue Version des Init-Skripts am_rpi_framebuffer.sh nach /etc/init.d kopiert werden. |
7.4.5 Linux-Konsole
Unter Linux existieren normalerweise mehrere Konsolen, zwischen denen mit (Ctrl-)Alt-Fx (z.B. Alt-F1 für die 1. Konsole, Alt-F2 für die 2. usw.) oder Alt-Links/Alt-Rechts gewechselt werden kann. Die Konsole 7 wird bei Raspbian und bei Debian-Systemen üblicherweise für X11 verwendet. (siehe auch: /etc/inittab)
Für jede Konsole kann mittels con2fbmap ausgewählt werden, welches Display (bzw. genauer: welcher Framebuffer) dafür verwendet werden soll (siehe: man con2fbmap). Damit sind verschiedene Konfigurationen möglich.
Im Folgenden wird angenommen, dass /dev/fb0 der Framebuffer des HDMI-Displays ist, und /dev/fb1 der Framebuffer des AdvaBoard-TFT-Displays. Werden mehrere virtuelle Advamation-Framebuffer angelegt, so müssen bei den folgenden Kommandos ggf. statt /dev/fb1 bzw. 1 höhere Nummern verwendet werden.
7.4.5.1 nur 1 Display
Konsole 1 auf dem HDMI-Display (bzw. dem HDMI-Framebuffer):
con2fbmap 1 0
Konsole 1 auf dem AdvaBoard-Display:
con2fbmap 1 1
7.4.5.2 2 Displays, identische Anzeige
identische Anzeige auf beiden Displays:
Um auf beiden Displays eine identische Anzeige zu erzielen, muss für beide Displays der gleiche Framebuffer verwendet werden. Dazu sollte in der Konfigurationsdatei /etc/defaults/am_rpi_framebuffer der Wert USE_FB0="2" gesetzt und der Framebuffer-Daemon neu gestartet werden:
sudo /etc/init.d/am_rpi_framebuffer.sh restart
Alternativ kann der Framebuffer-Daemon manuell mit den entsprechenden Einstellungen neu gestartet werden, z.B. für das 5.0"-Display:
con2fbmap 1 0 sudo /etc/init.d/am_rpi_framebuffer.sh stop sudo am_rpi_framebuffer -d 0 -t TFT_50 --daemon
Ist die Auflösung des HDMI-Framebuffers größer als die des AdvaBoard-Displays, so zeigt das AdvaBoard nur denjenigen Ausschnitt an, der auf das Display passt.
identische Anzeige auf beiden Displays + Anpassung der HDMI-Auflösung an das AdvaBoard-Display:
Um auf dem HDMI-Display und dem AdvaBoard-Display wirklich eine identische Anzeige zu erreichen, muss die Auflösung der HDMI-Ausgabe dem AdvaBoard-Display angepasst werden. Dazu sollte in der Konfigurationsdatei /etc/defaults/am_rpi_framebuffer der Wert USE_FB0="1" gesetzt und der Framebuffer-Daemon neu gestartet werden:
sudo /etc/init.d/am_rpi_framebuffer.sh restart
Alternativ kann die HDMI-Auflösung manuell per fbset geändert (siehe "Standard-Raspberry Pi-Framebuffer" im Abschnitt Framebuffer). und der Framebuffer-Daemon mit den entsprechenden Parametern neu gestartet werden, z.B. für das 5.0"-Display:
fbset -fb /dev/fb0 -xres 800 -yres 480 -vxres 800 -vyres 480 -depth 16 con2fbmap 1 0 sudo /etc/init.d/am_rpi_framebuffer.sh stop sudo am_rpi_framebuffer -d 0 -t TFT_50 --daemon
7.4.5.3 2 Displays, unterschiedliche Anzeige
Konsolen auf beiden Displays:
Da für jede Linux-Konsole eingestellt werden kann, welchen Framebuffer sie verwenden soll, ist es möglich, z.B. Konsole 1 auf dem HDMI-Display, und Konsole 2 auf dem AdvaBoard-Display anzuzeigen:
con2fbmap 1 0 con2fbmap 2 1
Leider wird bei dieser Konfiguration immer nur die Anzeige der momentan "aktiven" Konsole aktualisiert. Mit Alt-Fx, Alt-Links bzw. Alt-Rechts kann jedoch zwischen den beiden Konsolen (und damit zwischen den beiden Displays) umgeschaltet werden, wobei jeweils die Anzeige der aktivierten Konsole aktualisiert wird.
gleichzeitige Verwendung beider Displays (inkl. Aktualisierung beider Displays):
Leider ist es mit der im Linux-Kernel integrierten Konsole nicht möglich, auf beiden Displays gleichzeitig jeweils eine Konsole anzuzeigen, und beiden Anzeigen ständig zu aktualisieren. Es gibt jedoch zwei Möglichkeiten, dies dennoch zu erreichen:
kmscon: Statt der im Linux-Kernel integrierten Konsole kann "kmscon" – eine virtuelle Konsole im User-Space – verwendet werden. kmscon unterstützt u.a. den gleichzeitigen Betrieb mehrerer Displays.
Weitere Informationen zu kmscon finden Sie unter:
X11: Es kann auf beiden Displays eine graphische Benutzeroberfläche gestartet werden (siehe nächster Abschnitt), und darauf ein einfacher Fenstermanager mit je einem Vollbild-Terminal laufen.
7.4.6 X Window System / X11
Ein Raspberry Pi mit angeschlossenem AdvaBoard RPi1 und TFT-Display (mit aktivem Framebuffer-Treiber) verhält sich aus Linux-Sicht wie ein System mit 2 Grafikkarten mit jeweils 1 Display:
- "1. Grafikkarte": Dies ist die im Raspberry Pi integrierte Videohardware mit optional angeschlossenem HDMI-Display.
- "2. Grafikkarte": Dies ist das AdvaBoard (bzw. der zugehörige Framebuffer) mit dem angeschlossenen TFT-Display.
Sämtliche Multi-Monitor-Betriebsarten sind hierbei wie bei einem "normalen" System mit 2 Grafikkarten möglich.
Im Folgenden wird wieder angenommen, dass /dev/fb0 der Framebuffer des HDMI-Displays und /dev/fb1 der Framebuffer des AdvaBoard-Displays ist, und dass der am_rpi_framebuffer-Daemon läuft.
Zudem wird die folgende Standard-AdvaBoard-X11-Konfigurationsdatei verwendet. Diese muss ggf. als /etc/X11/xorg.conf angelegt bzw. dorthin kopiert werden:
# generic xorg.conf for AdvaBoard RPi1 # # :Version: 2013-01-09 # :Author: Advamation / Roland Koebler <info@advamation.de> # AdvaBoard-TFT-Display Section "Device" Identifier "Advamation Framebuffer" Driver "fbdev" Option "fbdev" "/dev/fb1" EndSection Section "Screen" Identifier "AdvaBoard" Device "Advamation Framebuffer" EndSection # HDMI Section "Device" Identifier "HDMI Framebuffer" Driver "fbdev" Option "fbdev" "/dev/fb0" EndSection Section "Screen" Identifier "HDMI" Device "HDMI Framebuffer" EndSection # dummy/single-head layout Section "ServerLayout" Identifier "default" EndSection # multi-head layout Section "ServerLayout" Identifier "HDMIAdvaBoard" Screen 0 "HDMI" 0 0 Screen 1 "AdvaBoard" RightOf "HDMI" EndSection # multi-head layout, Xinerama Section "ServerLayout" Identifier "Xinerama" Screen 0 "HDMI" 0 0 Screen 1 "AdvaBoard" RightOf "HDMI" Option "Xinerama" "true" EndSection
7.4.6.1 nur 1 Display
nur HDMI-Display, bzw. AdvaBoard-Display mit HDMI-Framebuffer:
ohne xorg.conf:
startx
mit AdvaBoard-Standard-xorg.conf:
startx -- -screen HDMI
nur AdvaBoard-Display (mit Advamation-Framebuffer):
ohne /etc/X11/xorg.conf:
FRAMEBUFFER=/dev/fb1 startx
mit AdvaBoard-Standard-xorg.conf:
startx # oder: startx -- -screen AdvaBoard
7.4.6.2 2 Displays, identische Anzeige
HDMI-Display + AdvaBoard-Display, identische Anzeige:
Um auf dem HDMI-Display und dem AdvaBoard-Display die gleiche Anzeige zu erhalten, muss für beide Displays der gleiche Framebuffer verwendet werden.
Ist die Auflösung des HDMI-Framebuffers größer als die des AdvaBoard-Displays, so zeigt das AdvaBoard nur denjenigen Ausschnitt an, der auf das Display passt. Alternativ kann die Auflösung der HDMI-Ausgabe dem AdvaBoard-Display angepasst werden, um eine wirklich identische Anzeige zu erreichen.
Hierzu muss die Konfigurationsdatei /etc/defaults/am_rpi_framebuffer angepasst und der Framebuffer-Daemon neu gestartet werden:
Verwendung des gleichen Framebuffers für beide Displays, ohne Anpassung der Auflösung:
USE_FB0="2"
Verwendung des gleichen Framebuffers für beide Displays, mit Anpassung der Auflösung:
USE_FB0="1"
Alternativ kann die Auflösung manuell geändert, und danach der Framebuffer-Daemon mit den entsprechenden Parametern neu gestartet werden:
Anpassung der Auflösung des HDMI-Framebuffers (optional), z.B. für das 5.0"-TFT-Display:
fbset -fb /dev/fb0 -xres 800 -yres 480 -vxres 800 -vyres 480 -depth 16
Verwendung des gleichen Framebuffers für beide Displays, z.B. für das 5.0"-Display:
con2fbmap 1 0 sudo /etc/init.d/am_rpi_framebuffer.sh stop sudo am_rpi_framebuffer -d 0 -t TFT_50 --daemon
Danach kann X11 gestartet werden:
ohne xorg.conf:
startx
mit AdvaBoard-Standard-xorg.conf:
startx -- -screen HDMI
7.4.6.3 2 Displays, unterschiedliche Anzeige
HDMI-Display + AdvaBoard-Display, getrennte Desktops:
Auf dem HDMI-Display und dem AdvaBoard-Display können getrennte X11-Desktops angezeigt werden. Für jedes Display ist hierbei ein eigener Fenstermanager notwendig.
Der Standard-Desktop von Raspbian (LXDE) unterstützt es jedoch nicht, gleichzeitig auf zwei Displays zu laufen; für das 2. Display muss deshalb ein anderer Fenstermanager (z.B. fvwm) verwendet werden.
Start mit AdvaBoard-Standard-xorg.conf:
startx -- -layout HDMIAdvaBoard
Nach dem Start von LXDE: Start eines Fenstermanagers auf dem 2. Desktop, z.B. fvwm (der zuvor allerdings installiert werden muss):
DISPLAY=:0.1 fvwm
Ein Verschieben der Fenster zwischen den Displays ist hierbei im Normalfall nicht möglich. Programme öffnen sich standardmäßig auf dem Desktop, auf dem sie gestartet werden. Es ist jedoch möglich, sie auf dem jeweils anderen Desktop zu starten, indem die Umgebungsvariable DISPLAY entsprechend gesetzt wird, wobei die beiden Desktops die Namen :0.0 und :0.1 tragen. Beispiele:
Start eines LXTerminals auf dem 1. Display:
$ DISPLAY=:0.0 lxterminal
Start eines LXTerminals auf dem 2. Display:
$ DISPLAY=:0.1 lxterminal
HDMI-Display + AdvaBoard-Display, gemeinsamer Desktop (Xinerama):
Mittels Xinerama kann 1 X11-Desktop verwendet werden, der sich über beide Displays erstreckt [5]. Es wird hierbei nur 1 Fenstermanager verwendet, und die Fenster können zwischen den Displays verschoben werden.
Zu beachten ist jedoch, dass der resultierende Desktop weiterhin rechteckig ist; besitzen HDMI-Display und AdvaBoard-Display unterschiedliche Auflösungen, so kann dies zu unsichtbaren Bereichen des Desktops (außerhalb des "kleineren" Displays) führen. Deshalb sollte darauf geachtet werden, dass sich in diesem Bereich keine wichtigen Desktop-Elemente (z.B. das Startmenü) befinden.
Start mit AdvaBoard-Standard-xorg.conf:
startx -- -layout Xinerama
[5] | Dies ist derzeit nur mit Xinerama möglich. Die neuere Erweiterung "RandR" ist dazu bisher nicht geeignet, da RandR 1.3 keine Unterstützung für mehrere Grafikkarten enthält. Mit RandR 1.4 soll sich dies angeblich ändern, da dort ein sogenannter "GPU object support" eingeführt werden soll. |
7.4.7 SDL
Die Bibliothek "Simple DirectMedia Layer" (SDL) wird von einigen Programmen (z.B. SqueezePlay/Jive) für ihre Grafikausgabe verwendet. Damit ist es möglich, diese Programme auch ohne X11 laufen zu lassen.
Soll ein SDL-basierendes Programm ohne X11 auf dem AdvaBoard-TFT-Display verwendet werden, so muss evtl. eingestellt werden, welchen Framebuffer das SDL-Programm verwenden soll. Hierzu kann die Umgebungsvariable SDL_FBDEV gesetzt werden, z.B.:
$ SDL_FBDEV=/dev/fb1 PROGRAMM
7.5 Touchpanel
7.5.1 Linux-Touchpanel-Treiber
Soll das Touchpanel unter X11 verwendet werden, so muss der entsprechende Treiber (am_rpi_touchpanel) installiert und gestartet werden.
- Hinweis:
- Das Touchpanel funktioniert derzeit unter X11 und nur im 1-Monitor-Betrieb sowie, wenn für beide Monitore der gleiche Framebuffer verwendet wird. Im X11-Multi-Monitor-Betrieb sollte das Touchpanel derzeit nicht verwendet werden.
Eine kurze Hilfe zu den Parametern des Treibers erhalten Sie mit am_rpi_touchpanel --help:
Usage: am_rpi_touchpanel [OPTION...] - Advamation touchpanel-driver Help Options: -h, --help Show help options Application Options: -i, --iface=ADVABOARD_RPi1 display-interface (default: ADVABOARD_RPi1) -t, --type=TFT_.. display-type (TFT32,TFT3B,TFT43,TFT50,TFT70) -r, --rot=angle display-/tp-rotation (0, 90, 180, 270) -f, --calib=FILENAME touchpanel calibration-file -m, --mode=MODE touchpanel-mode 0: touchpanel (default) 1: mouse-emulation --daemon daemonize -v, --verbose=LEVEL verbosity level (default: 64) (DEBUG: 128, INFO: 64, MESSAGE: 32, WARNING: 16, CRITICAL: 8, ERROR: 4|0)
wichtigste Optionen:
- --type:
- TFT-Display-Typ: TFT32, TFT3B, TFT43, TFT50 oder TFT70
- --rot:
- Drehung des Touchpanels um 0, 90, 180 oder 270 Grad. Hier sollte der gleich Wert wie bei am_rpi_framebuffer angegeben werden.
- --calib:
- Touchpanel-Kalibrierdatei
- --daemon:
- Startet das Programm im Hintergrund.
- --mode:
(ab Softwareversion 20140101 verfügbar)
Touchpanel-Modus: Im Normalfall sollte die Standardeinstellung (Touchscreen-Modus) beibehalten werden.Unterstützt ein Programm jedoch keine Touchscreens, oder funktioniert die Touchscreen-Unterstütung nicht korrekt (z.B. SDL 1.2, siehe unten), so kann als "Workaround" eine normale Maus emuliert werden. Die relative Mausbewegung ergibt sich hierbei aus der Differenz der aktuellen Touchposition zur vorherigen Touchposition. Zu beachten ist, dass dies nur dann sinnvoll funktioniert, wenn keine weitere Maus verwendet wird, und wenn keine Programme verwendet werden, die eigenmächtig die Mauszeiger-Position verändern.
Wird der Touchpanel-Treiber per Init-Skript gestartet, so kann der Modus per TP_MODE="0" bzw. TP_MODE="1" in /etc/default/am_rpi_framebuffer eingestellt werden.
Installation:
Der Touchpanel-Treiber wird zusammen mit der AdvaBoard RPi1-Software installiert (siehe README-Datei der AdvaBoard RPi1-Software).
Kalibrierung:
siehe Touchpanel-Kalibrierung
Start:
Der Touchpanel-Treiber kann entweder manuell, oder per Init-Skript gestartet werden:
manueller Start, z.B. für ein TFT50-Display:
sudo modprobe uinput sudo am_rpi_touchpanel -t TFT_50 -calib tft50.calib --daemon
Start per Init-Skript:
Installation des Init-Skripts und der Kalibrierdatei, z.B. für eine Kalibrierdatei tft50.calib:
sudo cp tools/sysvinit/am_rpi_touchpanel.sh /etc/init.d/ sudo cp tft50.calib /etc/am_rpi_touchpanel.calib sudo update-rc.d am_rpi_touchpanel.sh defaults sudo update-rc.d am_rpi_touchpanel.sh enable
Beim nächsten Neustart des Systems wird nun das Touchpanel aktiviert. Zusätzlich kann das Touchpanel über das Init-Skript gesteuert werden:
sudo /etc/init.d/am_rpi_touchpanel.sh start sudo /etc/init.d/am_rpi_touchpanel.sh stop sudo /etc/init.d/am_rpi_touchpanel.sh restart sudo /etc/init.d/am_rpi_touchpanel.sh status
Zu Test- und Debugzwecken können zudem die vom Linux-Touchscreen-Treiber generierten Ereignisse mittels evtest angezeigt werden:
apt-get install evtest sudo evtest /dev/input/event2
Je nach dem, welche weiteren Eingabegeräte an den Raspberry Pi angeschlossen sind, muss evtl. statt event2 eine andere Datei verwendet werden.
Sollten Sie zusammen mit dem TFT-Display eine SD-Karte mit installierter AdvaBoard-Software von uns erworben haben, so ist der Touchscreen dort bereits kalibriert und das Init-Skript installiert.
7.5.2 Touchpanel-Kalibrierung
Bevor der Touchscreen kalibriert wird, sollten der Framebuffer-Treiber und der Touchpanel-Treiber abgebrochen werden:
sudo /etc/init.d/am_rpi_framebuffer.sh stop sudo /etc/init.d/am_rpi_touchpanel.sh stop
Sollte das Display derzeit aus sein, so muss es eingeschaltet werden, z.B. für das 5.0"-Display:
sudo am_rpi_tft_tool -t TFT_50 -f tft50.calib -m ON
Touchpanel kalibrieren, z.B. für das 5.0"-Display:
sudo am_rpi_tft_tool -t TFT_50 -f tft50.calib -m TP_CALIBRATE
Hierbei müssen 3 Punkte auf dem TFT-Display möglichst exakt berührt werden. Wir empfehlen, hierzu einen Touchscreen-Stift zu verwenden.
Kalibrierung testen, z.B. für das 5.0"-Display:
sudo am_rpi_tft_tool -t TFT_50 -f tft50.calib -m TEST_TPCALIB
Nun kann der Touchscreen berührt werden, und am Berührpunkt sollte ein Kreuz angezeigt werden. Stimmt die Position des Kreuzes nicht hinreichend gut mit der Berührposition überein, so sollte die Kalibrierung wiederholt werden. Der Test kann per Ctrl-C abgebrochen werden.
Kopieren der Kalibrierdatei an den passenden Ort, z.B.:
sudo cp tft50.calib /etc/am_rpi_touchpanel.calib
ggf. Framebuffer-Treiber und Touchpanel-Treiber wieder starten:
sudo /etc/init.d/am_rpi_framebuffer.sh start sudo /etc/init.d/am_rpi_touchpanel.sh start
7.5.3 tslib
Der Touchscreen kann zudem mit der tslib verwendet werden. Dazu muss zunächst der Linux-Touchscreen-Treiber gestartet (siehe vorheriger Abschnitt), und danach der Touchscreen per tslib kalibriert werden.
Installieren der tslib-Testprogramme (ts_calibrate, ts_test):
apt-get install libts-bin
tslib-Touchscreen-Kalibrierung:
sudo TSLIB_FBDEVICE=/dev/fb1 TSLIB_TSDEVICE=/dev/input/event2 ts_calibrate # bzw.: sudo bash export TSLIB_FBDEVICE=/dev/fb1 export TSLIB_TSDEVICE=/dev/input/event2 ts_calibrate
Ggf. müssen – je nach dem, welche weiteren Geräte an dem Raspberry Pi angeschlossen sind – statt fb1 und event2 andere Dateien (z.B. event3) verwendet werden.
Die Kalibrierdaten werden hierbei standardmäßig in die Datei /etc/pointercal geschrieben.
tslib-Test:
sudo TSLIB_FBDEVICE=/dev/fb1 TSLIB_TSDEVICE=/dev/input/event2 ts_set
7.5.4 SDL
Von SDL (Simple DirectMedia Layer) existieren mehrere Versionen mit unterschiedlicher Touchscreen-Unterstütztung:
Version 1.2:
Dies scheint die am weitesten verbreitete Version zu sein: Sie wird von vielen Programmen (z.B. von SqueezePlay) verwendet und ist u.a. im Raspbian-Repository enthalten.
Leider ist die Touchscreen-Unterstützung sehr beschränkt: SDL 1.2 scheint selbst weder mit evdev-Eingabegeräten (/dev/input/event*), die Absolutkoordinaten liefern, noch mit tslib-Touchscreens zurecht zu kommen. Es gab jedoch verschiedene (teilweise erfolgreiche) Versuche, SDL 1.2 entsprechend zu patchen [6].
Version 1.3/2.0:
In Version 1.3 wurde die Touchscreen-Unterstützung verbessert, jedoch sind die Versionen 1.3 und 2.0 inkompatibel zur Version 1.2, so dass Programme, die SDL 1.2 verwenden, nicht einfach mit SDL 1.3 oder 2.0 übersetzt werden können. Zudem sind SDL 1.3 und 2.0 nicht in Raspbian enthalten, und wurden deshalb nicht getestet.
Soll nun ein Programm, das SDL 1.2 verwendet (z.B. SqueezePlay), per Touchscreen bedient werden, so gibt es zwei Möglichkeiten:
- Start des Programms unter X11: Da X11 eine gut funtkionierende Touchscreen-Unterstützung besitzt, können SDL-Programme per Touchscreen bedient werden, wenn sie unter X11 gestartet werden.
- Emulation einer Maus: Der Touchscreen-Treiber am_rpi_touchpanel kann optional eine Maus emulieren (siehe --mode unter Linux-Touchpanel-Treiber). Damit ist es möglich, auch Programme per Touchscreen zu bedienen, die selbst keine Touchscreen-Unterstütztung beinhalten. Allerdings funktioniert dies wie oben bereits erwähnt nur dann zuverlässig, wenn keine weitere Maus verwendet wird und das SDL-Progamm selbst die Mauszeiger-Position nicht verändert. Zudem funktioniert dies derzeit nur, wenn das SDL-Programm den gesamten Bildschirm ausfüllt.
[6] | z.B.: http://www.vogons.org/viewtopic.php?t=27360, http://forums.libsdl.org/viewtopic.php?p=25979 |