Good to Know Database

Raspbian: SainSmart 1,8" TFT LCD Modul am Raspberry Pi ansteuern


Das SainSmart 1.8" TFT LCD Modul verwendet den ST7735R Chip, bietet eine Auflösung von 128x160 Pixel und kann über SPI (Serial Peripheral Interface) angesteuert werden. In der folgenden Anleitung wird beschrieben wie Sie dieses Display an Ihren Raspberry Pi anschließen und den Kernel mit der ST7735-Unterstützung kompilieren und installieren. Als Grundlage für die folgende Anleitung wurde das Raspbian Image vom 09.02.2013 (2013-02-09-wheezy-raspbian.zip) verwendet. Da dieses inzwischen veraltet ist, können Sie auch das Raspbian Image vom 25.09.2013 (2013-09-25-wheezy-raspbian.zip) verwenden.

Raspberry Pi 1,8" TFT LCD Module 1  Raspberry Pi 1,8" TFT LCD Module 2

Display mit dem Raspberry Pi verbinden

Der folgende Schaltplan soll Ihnen zeigen wie Sie das SainSmart 1,8" TFT LCD Module mit Ihrem Raspberry Pi verbinden.

Raspberry Pi 1,8" TFT LCD Modul - Schaltplan

Kernel-Quellen herunterladen

Damit Sie das Display ansteuern können müssen Sie den Kernel von Raspbian neu kompilieren. Da dieser Vorgang auf dem Raspberry Pi über 6 Stunden dauert soll hier der Kernel auf einem Dual Core System mit Ubuntu 12.04 kompiliert werden. Dieser Vorgang wird als Cross Compile bezeichnet. Sollten Sie dennoch den Kernel auf dem Raspberry Pi kompilieren wollen, lesen Sie bitte die Anleitung Raspbian: Linux Kernel 3.6.11 kompilieren und installieren.

Bevor Sie den Kernel kompilieren können, müssen Sie ein paar Programme installieren welche dazu benötigt werden.

georg@ubuntu1204:~$ sudo apt-get update
georg@ubuntu1204:~$ sudo apt-get install gcc-arm-linux-gnueabi make git-core ncurses-dev

Anschließend laden Sie sich den Quellcode des Kernels herunter. Hier wird der Quellcode von Kamal Mostafa verwendet, weil dieser bereits für den ST7735R Chip angepasst wurde.

georg@ubuntu1204:~$ git clone git://github.com/kamalmostafa/raspberrypi-linux.git

Nachdem Sie das Git-Repository heruntergeladen haben, wechseln Sie in das Verzeichnis raspberrypi-linux und checken die Kernelquellen aus.

georg@ubuntu1204:~$ cd raspberrypi-linux
georg@ubuntu1204:~/raspberrypi-linux$ git checkout rpi-3.6.y+kamal-st7735fb

Kernel-Konfiguration exportieren

Jetzt benötigen Sie die Konfiguration des Kernels welcher auf Ihrem Raspberry Pi eingesetzt wird. Diese können Sie auf Ihrem Raspberry Pi mit dem folgenden Befehl exportieren.

pi@raspberrypi ~ $ sudo zcat /proc/config.gz > config

Kopieren Sie die erstellte Datei config auf Ihr Ubuntu System. Hierfür können Sie wie in diesem Beispiel scp verwenden.

pi@raspberrypi ~ $ scp config georg@ubuntu1204.home.lan:/home/georg

Kernel-Konfiguration anpassen

Auf Ihrem Ubuntu System verschieben Sie jetzt die übertragene Kernel-Konfiguration in das Verzeichnis mit dem Kernel-Quellcode und benennen die Datei gleichzeitig in .config um.

georg@ubuntu1204:~/raspberrypi-linux$ mv ~/config ~/raspberrypi-linux/.config

Da in der exportierten Kernel-Konfiguration die Einstellungen für den ST7735 Chip fehlen, müssen Sie diese mit Hilfe von make hinzufügen.

georg@ubuntu1204:~/raspberrypi-linux$ make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- oldconfig

Beantworten Sie für das SainSmart 1,8" TFT LCD Modul die Fragen wie im folgenden Listing gezeigt.

  ST7735 LCD panel framebuffer support (FB_ST7735) [N/m/y/?] (NEW) y
    ST7735 'red tab' panel type? (FB_ST7735_PANEL_TYPE_RED_TAB) [Y/n/?] (NEW) y
    ST7735 panel has reversed RGB? (FB_ST7735_RGB_ORDER_REVERSED) [N/y/?] (NEW) y
    ST7735 framebuffer mapping to GPIO/SPI (FB_ST7735_MAP) [Y/n/m/?] (NEW) y
      ST7735 RST gpio pin number (FB_ST7735_MAP_RST_GPIO) [-1] (NEW) 25
      ST7735 D/C gpio pin number (FB_ST7735_MAP_DC_GPIO) [-1] (NEW) 24
      ST7735 SPI bus number (FB_ST7735_MAP_SPI_BUS_NUM) [0] (NEW) 0
      ST7735 SPI bus chipselect (FB_ST7735_MAP_SPI_BUS_CS) [0] (NEW) 0
      ST7735 SPI bus clock speed (Hz) (FB_ST7735_MAP_SPI_BUS_SPEED) [4000000] (NEW) 32000000
      ST7735 SPI bus mode (0, 1, 2, or 3) (FB_ST7735_MAP_SPI_BUS_MODE) [0] (NEW) 0

Nachdem Sie die Konfiguration mittels make erweitert wurde müssen Sie noch ein paar manuelle Änderungen vornehmen. Öffnen Sie dazu die .config mit einem Editor.

georg@ubuntu1204:~/raspberrypi-linux$ vi .config

Suchen Sie zuerst nach der folgenden Zeile.

CONFIG_SPI_BCM2708=m

Setzen Sie den Wert von m auf y.

CONFIG_SPI_BCM2708=y

Als nächstes suchen Sie die folgenden Zeilen.

CONFIG_FRAMEBUFFER_CONSOLE=y
# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
# CONFIG_FONTS is not set
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
CONFIG_LOGO=y

Ändern Sie diese wie folgt und speichern anschließend die Datei ab.

CONFIG_FRAMEBUFFER_CONSOLE=y
# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FONTS=y
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
CONFIG_LOGO=y

Kernel kompilieren

Mit dem nächsten Befehl wird jetzt der Kernel kompiliert. Da ich hier ein Dual Core System verwende habe ich den Parameter -j 3 angegeben um den Vorgang zu beschleunigen. Sollten Sie ein Single Core System verwenden, müssen Sie diesen Parameter entfernen. Bei einem Quad Core System können Sie stattdessen -j 5 angeben.

georg@ubuntu1204:~/raspberrypi-linux$ make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- -k -j 3

Kernelmodule kompilieren

Nachdem Sie den Kernel kompiliert haben müssen Sie noch die Kernelmodule erstellen. Für diese legen Sie zuerst ein eigenes Verzeichnis an.

georg@ubuntu1204:~/raspberrypi-linux$ mkdir ./modules

Kompilieren Sie anschließend die Kernelmodule.

georg@ubuntu1204:~/raspberrypi-linux$ make modules_install ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- INSTALL_MOD_PATH=./modules/

Nach dem Kompilieren sollten Sie die temporären Dateien welche beim Kompilieren erstellt wurden löschen.

georg@ubuntu1204:~/raspberrypi-linux$ rm -rf ./modules/lib/modules/3.6.11+/build ./modules/lib/modules/3.6.11+/source

Kernel und Kernelmodule installieren

Kehren wir wieder zum Raspberry Pi zurück und löschen hier die Verzeichnisse /lib/modules und /lib/firmware.

pi@raspberrypi ~ $ sudo rm -rf /lib/modules /lib/firmware

Anschließend kopieren Sie die soeben kompilierten Kernelmodule auf Ihren Raspberry Pi. In diesem Beispiel holen wir die benötigten Dateien und Verzeichnisse mit scp direkt vom Ubuntu System auf den Raspberry Pi.

pi@raspberrypi ~ $ sudo scp -r georg@ubuntu1204.home.lan:/home/georg/raspberrypi-linux/modules/lib /

Als nächstes müssen wir noch den neuen Kernel in das Verzeichnis /boot kopieren. Auch hier rufen wir die benötigte Datei mit scp vom Ubuntu System ab.

pi@raspberrypi ~ $ sudo scp -r georg@ubuntu1204.home.lan:/home/georg/raspberrypi-linux/arch/arm/boot/Image /boot/kernel.img

Kernel laden

Da wir jetzt den Kernel und die Kernelmodule ausgetauscht haben sollten Sie das System neu starten damit dieses mit dem neuen Kernel gestartet wird und auch alle Kernelmodule verfügbar sind.

pi@raspberrypi ~ $ sudo shutdown -r now

Sobald Raspbian wieder gestartet ist können Sie mit dem folgenden Befehl überprüfen ob die Framebuffer Gerätedateien automatisch angelegt wurden.

pi@raspberrypi ~ $ ls -la /dev/fb*
crw-rw---T 1 root video 29, 0 Jan  1  1970 /dev/fb0
crw-rw---T 1 root video 29, 1 Jan  1  1970 /dev/fb1

Anwendungen für das Display

Das SainSmart 1,8" TFT LCD Modul lässt sich vielseitig für die Ausgabe von Informationen verwenden. In den weiterführenden Anleitungen wird zum Beispiel beschrieben wie Sie das Linux-Terminal auf das Display umlenken können. Des weiteren können Sie mit dem Linux Framebuffer Image Viewer eine Grafik auf dem Display ausgeben oder sich die aktuelle Uhrzeit und das Datum mit Hilfe eines Python-Skriptes anzeigen lassen.

Weiterführende Anleitungen

Raspbian: Linux-Terminal auf das SainSmart 1,8" TFT LCD Modul umlenken
Raspbian: Grafik auf dem SainSmart 1,8" TFT LCD Modul ausgeben
Raspbian: Datum und Uhrzeit auf dem SainSmart 1,8" TFT LCD Modul ausgeben


Dieser Eintrag wurde am 26.05.2013 erstellt und zuletzt am 25.12.2013 bearbeitet.

Direkter Link zu dieser Seite: http://www.gtkdb.de/index_36_2226.html

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2014 by Georg Kainzbauer