Only 5 FPS with 1.3" SPI Colour LCD

Hi guys,

I just bought the 1.3" SPI Colour LCD (240x240px) and got it working with the Breakout Garden on my Pi Zero W. Alas, I’m only getting about 5 frames per second when I run the GIF, the frame rate or the scrolling text example from the github repository.
I followed the instructions on this page: https://github.com/pimoroni/st7789-python

How can I speed up the display?

Regards
Fabian

Do you have a more powerful Raspberry Pi to test it on? A 3B or 4B?
I have that display but haven’t checked what FPS it gets. Don’t actually know how to do that if I’m honest. I ran the scrolling text example and don’t remember thinking it was slow. That was a Pi Zero W.

No, I don’t have one right now :/
I ran the framerate example from the repo, it outputs the frame rate in terminal.

By the way, I also got the Pirate Audio which uses the same display I think – it’s also very slow, around 5 FPS. I wonder how you’d achieve 50FPS as the shop page says

Ok, I’ll see if I can run that framerate example on mine when I get a chance. I’ll have to reconfigure my breakout garden first. I may not get to it until tomorrow, but I will post back what I find once I’m done.

I’m getting ~15.4 with the 0.96 SPI Color LCD (160x80) Breakout. Breakout Garden Mini i2c SPI and Pi Zero W running latest PiOS.
I have one of the 1.3 displays, don’t think I currently have the software installed for it though. I don’t see its folder there.

EDIT: Just under 5 ~4.78 FPS with the 1.3 display, same hardware as above.

EDIT 2: I was going to try a Pi 4 but mine is in a heatsink case and my ribbon cable won’t fit in the GPIO opening. And I don’t want to plug the Breakout Garden mini in and risk it shorting out on the case. I don’t have any other Pi’s with easy access to the GPIO header. I saw these two lines in the example, you may be able to up the mhz and get a higher FPS.
SPI_SPEED_MHZ = 10 # Higher speed = higher framerate
spi_speed_hz=SPI_SPEED_MHZ * 1000000

1 Like

@alphanumeric thanks for your effort, that’s very kind of you! :)

Yes, I already tried changing the speed constant but I can only go up to around 90 MHZ, if I enter 100 for example I don’t get any output at all.

I emailed the support and am very curious why the shop page says 50 FPS. I’d love to see smooth GIF animations on that display ;)

To be fair the shop page says, “should be able to run it at up to ~50FPS”. IMHO you do have a valid point though.
For what I’m using mine for its not an issue. I’m running some enviro+ code and it doesn’t need a fast refresh, just regular updates.

Probably means “this display can display up to 50FPS…if you can send your bits fast enough”. I suspect a Python script running on the slowest Pi available may not be up to that particular task.

As to the magnitude of that task: 240 x 240 x 18bit color x 50fps = 51.84 Mbps.

I’ve been going with what ever was entered in the example code I borrowed and modified for my projects. It was fast enough for me so I never gave it much thought.
I stumbled over this when trying to setup SPI1 for three of 0.96 LCD breakouts. Might be some useful info in there.

Speed

The driver supports all speeds which are even integer divisors of the core clock, although as said above not all of these speeds will support data transfer due to limits in the GPIOs and in the devices attached. As a rule of thumb, anything over 50MHz is unlikely to work, but your mileage may vary.

So I’ve run mine on my Pi4 and Pi0W and the framerate is a constant 3.5FPS. As @lexfiend said, I’d take a wild guess the 50FPS is theoretically possible but that Python isn’t really up to the job. They should maybe clarify that on the store page.

For funsies I tested @alphanumeric’s suggestion that SPI speed might be too fast, but I get pretty much the exact same results when running the SPI at 160MHz. I can’t guarantee it is actually running at that speed, but the speed setting being too high doesn’t seem to be an issue. Dropping the SPI speed from 80 MHz to 50 MHz drops the frame rate a little (~2.7 FPS), but a 23% drop in FPS for a 37.5% drop in bus speed suggests to me that there’s definitely something beside the bus speed limiting things here.

EDIT:

As to the magnitude of that task: 240 x 240 x 18bit color x 50fps = 51.84 Mbps .

Poking through the library it runs 16-bit colour, not 18, so it works out at 46.08 Mbps. Definitely possible at the 50MHz speed, let alone at the 80 MHz speed.