Slow refresh rate of LCD screen on Arduino Nano Ble

I have been reading lots of threads on the topic but unfortunately none seem to address a usable solution on my side.

My 240x280 LCD screen with a touch panel (Waveshare link) is working under the Adafruit ST7789 library. However, the refresh rate is very slow, it takes about 2.5 seconds to fill the screen, which appears as a wave of pixels running down as they refresh the content. I am currently powering Arduino via USB.

I am using an Arduino Nano Sense 33 Ble Rev2, which is compatible with the 3.3v operating logic of the screen. The screen comes with its own library (see link above under the Resources section), but it is as bad at performing as Adafruit's.

The pins are according to the instructions from the link, i.e.:

LCD Pins Arduino Pins
VCC 3.3V
GND GND
MOSI D11
SCK D13
CS D10
DC D7
RST D8
BL D9
TOUCH_SDA A4
TOUCH_SCL A5
TOUCH_RST D4
TOUCH_IRQ D3

I am using examples from the Adafruit library, and the redraw is still visible. As an improvement to my own code, I have added

SPI.beginTransaction(SPISettings(SPI_SPEED, MSBFIRST, SPI_MODE0));
...
SPI.endTransaction();

with SPI_SPEED = 32 MHz (as the Arduino does not appear to support higher speeds according to the Datasheet). I have also added tft.startWrite() and tft.endWrite() before each new draw, just in case.

When I refresh specific portions of the screen, it does redraw faster (for obvious reasons), but one can again see the line of pixels running down. As a note, I have attempted to use the TFT_eSPI library, but it keeps thinking I have an RP2040 microcontroller, so I have not been able to compile anything yet. Either way, that is something I can address to the library's owner. What concerns me is that the performance appears to be similar across different libraries.

Can anyone help me figure out what else can be done?

/** Set the SPI bus clock frequency.
*
* @param hz Clock frequency in Hz (default = 1MHz).
*/
void frequency(int hz = 1000000);

Hi @ua6em, if you are referring to the tft.setSPISpeed() , I am already using that inside an SPI.beginTransaction() block when I first initialize the display.

The fact that you set a frequency of 32MHz does not necessarily mean that the hardware is running on it. Explore the library in detail. There may be a built-in limitation of accepted values ​​such as operating frequency. This is usually tailored to the hardware the library is for. If you try to use the hardware at a frequency outside of its specifications, you may have something working, something semi-working and not working at all, but this depends on the specific conditions and does not guarantee repeatability of the result. You can look at displays with an embedded microcontroller such as the Nextion.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.