First off. Please post a link to the actual SSD1315 board that you have bought. e.g. AliExpress sale page.
Quote which library example is exhibiting a problem by name e.g. C:\Users\David Prentice\Documents\Arduino\libraries\Adafruit_SSD1306\examples\ssd1306_128x64_i2c\ssd1306_128x64_i2c.ino
And paste any modifications that you have made to solve the problem.
e.g. C++ statements
e.g. different VCC values
I bought a 1.3 inch SSD1315 link in #13
It gives a steady picture with Adafruit_SSD1306 and with U8g2
Note that the diagonal scroll functions have some extra arguments.
And the diagonal scroll works 100% for any size of rectangle in any direction. e.g.
// SSD1309, SSD1315 can set an exact rectangle. Diag, Vert, Horiz
// SSD1306 always uses whole width 0-127. No Vert. Always Diag
void startscroll_rect(int x, int y, int w, int h, int up, int horiz)
{
uint8_t cmd = 0x29;
if (horiz < 0) cmd = 0x2A, horiz = 1; //diagonal left
display.ssd1306_command(0xA3);
display.ssd1306_command(y); // vert scroll area
display.ssd1306_command(h); // top+lines <= 64
display.ssd1306_command(cmd); //vert_right_scroll
display.ssd1306_command(horiz); //A enable. 1306 does not care
display.ssd1306_command(y / 8); //B start page
display.ssd1306_command(0x00); //C
display.ssd1306_command((y + h - 1) / 8); //D end page
display.ssd1306_command(up); //E
#if SSD == 0x1309 || SSD == 0x1315 //SSD1309 has extra arg
display.ssd1306_command(x); //F
display.ssd1306_command(x + w - 1); //G
#endif
display.ssd1306_command(0x2F); //start
}
David.