The top half of a 64x64 panel renders slower than the bottom half

I am using a Rpi 4 + Adafruit HAT + six pieces of 64 x 64 Waveshare led panel in one chain.

When I run a version of the Python examples like “image-scroller.py” or “runtext.py”, which translate the content along the x-axis, the top half of the screen updates slightly slower than the bottom half, so the top half is always a few pixels behind. When the translation is slow, it is not so disturbing, but when I speed it up, it looks like the content is cut in half, with the top half distorted to the right.

I am currently running this example script:

The only changes I made were to increase the speed on line 23 and to add an y translation to the image on lines 27 and 28 to make it more centred:

xpos += 5

double_buffer.SetImage(self.image, -xpos, 15)
double_buffer.SetImage(self.image, -xpos + img_width, 15)

I run the script with this command:

sudo python3 image-scroller.py -m=“adafruit-hat” --led-rows=“64” --led-cols=“64” --led-chain=“6” --led-parallel=“1” --led-slowdown-gpio=“5” --led-scan-mode=1

I tweaked every major setting I could find in the documentation, but it still did not fix the problem.

Does anyone have any ideas about this synchronisation issue?

Thank you

I’m not familiar with the python interface and how slow it may be, or not, but I’ve never had such visible update delays like this.
There is indeed code to fill one buffer fully and only make it available to the library once it’s completely full, avoiding any tearing issues, but I’d have to recommend you go back and look at the API carefully. If you use proper double buffering and only flip buffers once they are full, this should never happen

I have this same problem occurring with the python runtext.py example. When my text scrolls with a 1 pixel change on each update, the bottom half of my 64x32 matrices ends up being one pixel further to the left than the top half; as in, the bottom half ends up being a frame ahead. I haven’t been able to figure out how to fix it either.

have you gotten the C++ demo to run and tried the different -Dx arguments? Is the display ok, then?