admatec Raspberry Display
ohne Treiber in Betrieb nehmen

 

 

Hamburg, 10. Dezember 2020 

C-Berry28 per Overlay direkt ansprechen

Die Weihnachtszeit beginnt, die Abende werden länger. Wir von admatec denken, es ist mal wieder an der Zeit sich mit dem C-Berry auseinanderzusetzten und haben euch ein Geschenk aus unserer Display EE-Abteilung mitgebracht.

Zusätzlich zu unserem alltäglichen Geschäft, dem Entwickeln von optimalen Display- sowie Touchlösungen für unsere Kunden, haben wir vor 5 Jahren einen kleinen Ausflug in den B2C Bereich gemacht und das CBerry Display ein 2,8Zoll/2,4 cm TFT für den Raspberry auf den Markt gebracht. Heute wollen wir euch zeigen, wie ihr ein TFT mit SPI-Anschluss – genau wie unser 2,8 Zoll – ohne Treiber an den Raspberry anschließen und sogar das Backlight dimmen könnt.

 


Vorbereitung

Zuerst updaten wir das Betriebssystem und installieren dann die neuen Pakete:

 

sudo apt-get update
sudo apt-get upgrade

Mit “uname -r“ können wir uns die aktuelle kernel Version anzeigen lassen. Wir haben mit der Version 5.4 und 5.14 getestet.

Damit wir auf dem Display etwas sehen können, benötigen wir weiterhin Programme, die in der Lage sind, ihre Ausgabe auf /dev/fb* umzuleiten. Dazu werden wir für Bilder FBI und für Videos mplayer benutzen und installieren die beiden Programme:

sudo apt-get install -y fbi
sudo apt-get install -y mplayer

Device Tree

Linux unterstützt seit einiger Zeit sogenannte device trees, eine einfache Möglichkeit neue Hardware im System anzumelden und zu betreiben, ohne den kernel neu kompilieren zu müssen. Damit ist auch schon klar, was wir als nächstes benötigen, eine C-berry28-device-tree-Datei!

Dazu öffnen wir den Texteditor und tippen. Oder hier runterladen:

wget https://www.admatec.de/sites/default/files/downloads/cberry28.tar.gz .
Dann entpacken und in das Verzeichnis cberry28 wechseln.

/*
 * Device Tree overlay for cberry28 by admatec 2020
 *
 */

/dts-v1/;
/plugin/;

/ {
	compatible = "brcm,bcm2835";

	fragment@0 {
		target = <&spi0>;
		__overlay__ {
			status = "okay";
		};
	};

	fragment@1 {
		target = <&spidev0>;
		__overlay__ {
			status = "disabled";
		};
	};

	fragment@2 {
		target = <&spidev1>;
		__overlay__ {
			status = "disabled";
		};
	};

	fragment@3 {
		target = <&gpio>;
		__overlay__ {
			cberry28_pins: cberry28_pins {
				brcm,pins = <18 22 25>;
				brcm,function = <1 1 1>; /* out out out */
				brcm,pull = <0 0 0>; /* - - - */
			};
		};
	};

	fragment@4 {
		target = <&spi0>;
		__overlay__ {
			/* needed to avoid dtc warning */
			#address-cells = <1>;
			#size-cells = <0>;

			cberry28: cberry28@0{
				compatible = "sitronix,st7789v";
				reg = <0>;
				pinctrl-names = "default";
				pinctrl-0 = <&cberry28_pins>;
				rgb;
                
            	height = <320>;	
				width = <240>;
				rotate = <90>;
				spi-max-frequency = <32000000>;
				fps = <25>;
				buswidth = <8>;
				reset-gpios = <&gpio 25 1>;
				dc-gpios = <&gpio 22 0>;
				led-gpios = <&gpio 18 0>;
				debug = <0>;

				init = <0x1000011
					0x2000088
					0x1000036 0xA0
					0x100003A 0x05
					0x10000B2 0x0C 0x0C 0x00 0x33 0x33
					0x10000B7 0x35
					0x10000C2 0x01 0xFF
					0x10000C3 0x17
					0x10000C4 0x20
					0x10000BB 0x17
					0x10000C5 0x20
					0x10000D0 0xA4 0xA1
					0x10000E0 0xD0 0x00 0x14 0x15 0x13 0x2C 0x42 0x43 0x4E 0x09 0x16 0x14 0x18 0x21
					0x10000E1 0xD0 0x00 0x14 0x15 0x13 0x0B 0x43 0x55 0x53 0x0C 0x17 0x14 0x23 0x20
					0x100002B 0x00 0x00 0x01 0x3F
					0x100002A 0x00 0x00 0x00 0x9F
					0x1000029
					>;
			};

		};
	};

	__overrides__ {
		speed =     <&cberry28>,"spi-max-frequency:0";
		rotate =    <&cberry28>,"rotate:0";
		fps =       <&cberry28>,"fps:0";
		debug =     <&cberry28>,"debug:0";
		backlight = <&cberry28>,"led-gpios:4",
	                  <&cberry28_pins>,"brcm,pins:0";
	};
};

Diese Datei speichern wir unter dem Namen „cberry28_overlay.dts“ in unserem Verzeichnis ab.

Jetzt müssen wir den device tree source noch mit Hilfe des device tree compilers (dtc) in ein echtes overlay umwandeln und in den entsprechenden Systemordner legen. Dazu rufen wir in unserem Verzeichnis den dtc auf:

sudo dtc -@ -I dts -O dtb -o /boot/overlays/cberry28.dtbo cberry28_overlay.dts

OK, fast fertig. Jetzt müssen wir dem System nur noch mitteilen, dass es beim nächsten Booten auch das neue overlay laden soll.

Dazu laden wir /boot/config.txt in den Editor,

sudo nano /boot/config.txt

gehen ganz ans Ende der Datei und fügen folgende Zeile dazu:

dtoverlay=cberry28

Beim Raspberry Pi 4 muss zusätzlich die Zeile dtoverlay=vc4-fkms-v3d mit einem „#“ auskommentiert werden.

Zum Speichern CTRL-O, dann bestätigen und dann CTRL-X zum Verlassen des Editors.

Jetzt nur noch 1x re-booten.

Reboot

 Oder per Menu -> logout->reboot, spielt keine Rolle.

 

Test

Wir sollten kurz überprüfen, ob alles so gelaufen ist, wie wir uns das vorgestellt haben. Dazu lassen wir uns die Anzahl der framebuffer mitteilen:

ls /dev/fb*

Und erhalten hoffentlich „dev/fb0    /dev/fb1“ als Antwort.

Jetzt können wir das 1te Bild auf dem „neuen“ Display ausgeben:

sudo fbi -noverbose -T 1 -a -d /dev/fb1 clogo.bmp

Bild ist da? Dann testen wir jetzt das Anzeigen eines Videos auf dem cberry:

sudo mplayer -nolirc -vo fbdev2:/dev/fb1 admatec.m4v

FBI  und mplayer bieten noch ein paar andere nützliche Funktionen, dazu gibt es aber im Netz viele gute Hinweise.

 

Dimming

Der LED-Pin unseres Displays ist an einen PWM-Port (Pulsweitenmodulation) des Raspberry‘s angeschlossen, d.h wir können die Helligkeit der Hintergrundbeleuchtung beliebig verändern. Dazu nur den folgenden Befehl eingeben:

gpio -g mode 18 pwm

Das Display wird zunächst dunkel, da der Port jetzt zwar als PWM -Ausgang konfiguriert ist, aber noch keiner gesagt hat, auf welchen Wert der Ausgang gesetzt werden soll.

Um die Helligkeit auf die maximale Stufe zu setzen benutzt man:

gpio -g 18 1024

Die Helligkeit kann im Bereich von 0 – 1024 beliebig eingestellt werden.

 

Viel Spaß beim Ausprobieren und frohe Festtage wünscht euch eure

Ein kleiner Hinweis in eigener Sache:
Bitte versteht, dass wir im Rahmen dieses CBerry-Weihnachtsspecials keinen individuellen Support leisten können.