5 5
kutysam

Guide: How to use Touchscreen + LCD on H3 devices

Recommended Posts

First of all, credits goes to https://4pda.ru/forum/lofiversion/index.php?t750921-2560.html

Device that I used for this guide: https://www.aliexpress.com/item/3-5-Inch-TFT-LCD-Moudle-For-Raspberry-Pi-2-Model-B-RPI-B-raspberry-pi/32707058182.html

Pinout: http://www.waveshare.com/3.5inch-rpi-lcd-a.htm (Yes, the device is a waveshare knockoff)

How to place the device? For Orange pi lite/one it is reversed. For the rest, it should be normal.

Refer to https://forum.armbian.com/index.php?/topic/724-quick-review-of-orange-pi-one/ for more info.

 

There are two sections to this guide.

Legacy / Mainline

Legacy Kernel [You can only EITHER use touch or LCD due to issues with spi chip select]

LCD

1) Load fbtft and fbtft_device on boot

sudo nano /etc/modules-load.d/fbtft.conf 
fbtft
fbtft_device

2) Load fbtft_device options

nano /etc/modprobe.d/fbtft.conf 
options fbtft_device rotate=90 name=piscreen speed=16000000 gpios=reset:2,dc:71 txbuflen=32768 fps=25

3) Make sure X11 loads to the correct framebuffer (fb8 for legacy)

nano /etc/X11/xorg.conf.d/50-fbturbo.conf
find fb0 and change to fb8

4) Reboot your device (sudo reboot) and you screen should be lit up

============================================

TOUCH

1) Download ads7846 touch driver (compatible with xpt2046)

mkdir ds7846 
cd ds7846 
wget https://raw.githubusercontent.com/raspberrypi/linux/rpi-3.6.y/drivers/input/touchscreen/ads7846.c

2) Create a makefile (Take note that it is TABS instead of spaces before the $(MAKE))

nano Makefile
Insert the below in without the -----
--------------------------------
obj-m := ads7846.o 
KDIR := /lib/modules/$(shell uname -r)/build 
PWD := $(shell pwd) 
all:
	$(MAKE) -C $(KDIR) M=$(PWD) modules 
clean:
	$(MAKE) -C $(KDIR) M=$(PWD) clean 
install:
	$(MAKE) -C $(KDIR) M=$(PWD) modules_install
--------------------------------

3) Exit nano and run the following

sudo make
sudo make install
sudo depmod

4) Download and compile and install ads7846_device

cd .. 
git clone https://github.com/notro/fbtft_tools/
cd fbtft_tools/ads7846_device 
make 
sudo make install 
sudo depmod 

5) Load ads7846 and ads7846_device on boot

sudo nano /etc/modules-load.d/ads7846.conf 
ads7846 
ads7846_device

6) Load ads7846_device options

nano /etc/modprobe.d/ads7846_device.conf 
options ads7846_device model=7846 cs=0 gpio_pendown=1 keep_vref_on=1 swap_xy=1 pressure_max=255 x_plate_ohms=60 x_min=200 x_max=3900 y_min=200 y_max=3900

7) Reboot your device and run evtest

sudo reboot
sudo evtest

Find your touch device and happy touching. Every touch should generate an event.

Share this post


Link to post
Share on other sites

Mainline Kernel [You can use BOTH LCD and TOUCH]

1) Enable overlays for spi and cs1

sudo nano /boot/armbianEnv.txt
add the following to the bottom

overlays=spi-spidev spi-add-cs1 
param_spidev_spi_bus=0 
param_spidev_spi_cs=1

2) Reboot your device

 

LCD

1) Load fbtft and fbtft_device on boot

sudo nano /etc/modules-load.d/fbtft.conf 
fbtft
fbtft_device

2) Load fbtft_device options

nano /etc/modprobe.d/fbtft.conf 
options fbtft_device rotate=90 name=piscreen speed=16000000 gpios=reset:2,dc:71 txbuflen=32768 fps=25

3) Since there is no GUI in mainline, lets enable the console to be displayed to LCD instead

sudo nano /etc/rc.local 
con2fbmap 1 1

For some others, you may wish to try con2fbmap 1 0 [If your device has no AVout]

 

4) Reboot your device (sudo reboot) and you screen should be lit up

===========================================================================

TOUCH

1) Download ads7846 touch driver (compatible with xpt2046)

mkdir ds7846 
cd ds7846 
wget https://sourceforge.net/p/openipmi/linux-ipmi/ci/master/tree/drivers/input/touchscreen/ads7846.c?format=raw
mv ads7846.c?format=raw ads7846.c 

2) Create a makefile (Take note that it is TABS instead of spaces before the $(MAKE))

nano Makefile
Insert the below in without the -----
--------------------------------
obj-m := ads7846.o 
KDIR := /lib/modules/$(shell uname -r)/build 
PWD := $(shell pwd) 
all:
	$(MAKE) -C $(KDIR) M=$(PWD) modules 
clean:
	$(MAKE) -C $(KDIR) M=$(PWD) clean 
install:
	$(MAKE) -C $(KDIR) M=$(PWD) modules_install
--------------------------------

3) Exit nano and run the following

sudo make
sudo make install
sudo depmod

4) Download and compile and install ads7846_device

cd .. 
git clone https://github.com/notro/fbtft_tools/
cd fbtft_tools/ads7846_device 
make 
sudo make install 
sudo depmod 

5) Load ads7846 and ads7846_device on boot

sudo nano /etc/modules-load.d/ads7846.conf 
ads7846 
ads7846_device

6) Load ads7846_device options

nano /etc/modprobe.d/ads7846_device.conf 
options ads7846_device model=7846 cs=1 gpio_pendown=1 keep_vref_on=1 swap_xy=1 pressure_max=255 x_plate_ohms=60 x_min=200 x_max=3900 y_min=200 y_max=3900

 

Share this post


Link to post
Share on other sites

FAQ / Personal Experiences

Q1) If you wish to do manual testing, without rebooting, we have to rmmod and then modprobe manually [Make sure you have already done all the steps till depmod

sudo rmmod fbtft_device
sudo rmmod fbtft
sudo rmmod ads7846_device
sudo rmmod ads7846


sudo modprobe ads7846 
sudo modprobe ads7846_device model=7846 cs=1 gpio_pendown=1 keep_vref_on=1 swap_xy=1 pressure_max=255 x_plate_ohms=60 x_min=200 x_max=3900 y_min=200 y_max=3900

sudo modprobe fbtft
sudo modprobe fbtft_device rotate=90 name=piscreen speed=16000000 gpios=reset:2,dc:71 txbuflen=32768 fps=25

 

Q2) My mainline kernel suddenly doesn't show me that my device is touchable through evtest. I experienced this and i did the following

Remove all on boot loading for ads7846 and fbtft

sudo rm /etc/modules-load.d/ads7846.conf
sudo rm /etc/modprobe.d/ads7846_device.conf
sudo rm /etc/modprobe.d/fbtft.conf
sudo rm /etc/modules-load.d/fbtft.conf

After which, lets manually 'automatically' load them through rc.local

nano /etc/rc.local
modprobe ads7846 
modprobe ads7846_device model=7846 cs=1 gpio_pendown=1 keep_vref_on=1 swap_xy=1 pressure_max=255 x_plate_ohms=60 x_min=200 x_max=3900 y_min=200 y_max=3900
modprobe fbtft
modprobe fbtft_device rotate=90 name=piscreen speed=16000000 gpios=reset:2,dc:71 txbuflen=32768 fps=25
con2fbmap 1 0

Take note that con2fbmap is either 1 0 or 1 1 for mainline (1 0 --> orange pi lite or devices without AVOUT, 1 1 --> for devices with AVOUT like orange pi zero)

For advanced users, check /dev/ and see what is your fbX

 

Q3) I have installed a GUI for my mainline kernel but touch stops at times.

I experience this too and I have no idea on how to fix it.

 

Q4) I need to calibrate it

Yes, me too. However, my device isn't working very well. You need tslib and stuff to do the calibration.

Share this post


Link to post
Share on other sites

Small note - on mainline both fbtft displays and touch screens can be activated with DT overlays, without compiling extra modules or passing module parameters to modprobe.

For touch screens bindings are well documented, but since fbtft module is staging there is no official documentation in the kernel, so RPi overlays can be used as a reference: https://github.com/notro/fbtft/wiki/FBTFT-RPI-overlays

Share this post


Link to post
Share on other sites
Spoiler

 

On 31.7.2017 at 2:04 PM, kutysam said:

Mainline Kernel [You can use BOTH LCD and TOUCH]

1) Enable overlays for spi and cs1



sudo nano /boot/armbianEnv.txt
add the following to the bottom

overlays=spi-spidev spi-add-cs1 
param_spidev_spi_bus=0 
param_spidev_spi_cs=1

2) Reboot your device

 

LCD

1) Load fbtft and fbtft_device on boot



sudo nano /etc/modules-load.d/fbtft.conf 
fbtft
fbtft_device

2) Load fbtft_device options



nano /etc/modprobe.d/fbtft.conf 
options fbtft_device rotate=90 name=piscreen speed=16000000 gpios=reset:2,dc:71 txbuflen=32768 fps=25

3) Since there is no GUI in mainline, lets enable the console to be displayed to LCD instead



sudo nano /etc/rc.local 
con2fbmap 1 1

For some others, you may wish to try con2fbmap 1 0 [If your device has no AVout]

 

4) Reboot your device (sudo reboot) and you screen should be lit up

===========================================================================

TOUCH

1) Download ads7846 touch driver (compatible with xpt2046)



mkdir ds7846 
cd ds7846 
wget https://sourceforge.net/p/openipmi/linux-ipmi/ci/master/tree/drivers/input/touchscreen/ads7846.c?format=raw
mv ads7846.c?format=raw ads7846.c 

2) Create a makefile (Take note that it is TABS instead of spaces before the $(MAKE))



nano Makefile
Insert the below in without the -----
--------------------------------
obj-m := ads7846.o 
KDIR := /lib/modules/$(shell uname -r)/build 
PWD := $(shell pwd) 
all:
	$(MAKE) -C $(KDIR) M=$(PWD) modules 
clean:
	$(MAKE) -C $(KDIR) M=$(PWD) clean 
install:
	$(MAKE) -C $(KDIR) M=$(PWD) modules_install
--------------------------------

3) Exit nano and run the following



sudo make
sudo make install
sudo depmod

4) Download and compile and install ads7846_device



cd .. 
git clone https://github.com/notro/fbtft_tools/
cd fbtft_tools/ads7846_device 
make 
sudo make install 
sudo depmod 

5) Load ads7846 and ads7846_device on boot



sudo nano /etc/modules-load.d/ads7846.conf 
ads7846 
ads7846_device

6) Load ads7846_device options



nano /etc/modprobe.d/ads7846_device.conf 
options ads7846_device model=7846 cs=1 gpio_pendown=1 keep_vref_on=1 swap_xy=1 pressure_max=255 x_plate_ohms=60 x_min=200 x_max=3900 y_min=200 y_max=3900

 

Thanks for your guide

Could you please tell how could I install fbtft on Armbian. The first step is installing fbtft but I do not know how could I do that.

Edited by Tido
unnecessary large Quote, added spoiler

Share this post


Link to post
Share on other sites

I was able to get everything working on mainline kernel w/ mate installed, but somehow the touchscreen's left-to-right is acting weird.  The cursor moves opposite to how I'm moving the pen, but only in the x-direction. It follows the pen up and down still. If I change the rotate option in to 270 instead of 90, the y-direction gets mirrored instead of the x. Is there an option to only mirror one axis?

Share this post


Link to post
Share on other sites

hi. i have orange pi lite and  http://www.waveshare.com/3.5inch-rpi-lcd-a.htm lcd .

i do all things you say . but i see a light white page. please help meeee. please

 

I have a problem when i show screen in lcd touch screen do not work. in other hand if i dont screen on lcd orange pi lite reconginiz touch screen. please help me . i think this problem become from spi.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
5 5