I spend many times to try solving this problem with ssd1315 1.3 inch (black board v1.0 1315 from aliexpress...). Display is little bit flickering like moire effect. It is nicely viewed on big numbers or when is display filled by white rectangle. When I compare SSD1315 display with SH1106 which is solid as rock... The is no difference when I use Adafruit or U8Glib. Both libraries use same registry setting.
I use this constructor U8G2_SSD1306_128X64_NONAME_F_HW_I2C display(U8G2_R0, /* clock=/ SCL, / data=/ SDA, / reset=*/ U8X8_PIN_NONE); processor is atmega328p-au.
Detail looking in the datasheet i found this difference in chapter AC CHARACTERISTICS
Oscillation Frequency of Display Timing Generator VDD = 2.8V
min typ max
SSD1315 - 620 688 756 kHz
SSD1306 - 333 370 407 kHz
And in chapter Oscillator Circuit and Display Time Generator
K value for SSD1315 is 103 and for SSD1306 is 54.
I try manipulate register D5 in "u8x8_d_ssd1306_128x64_noname.c" from value 0x080 to 0x0x40 - U8X8_CA(0x0d5, 0x040), /* clock divide ratio
This got me better result.
Continue with register D9 where i modify from 0x0f1 to 0x0d1 - U8X8_CA(0x0d9, 0x0d1), /* [2] pre-charge period
I got to a result that is about 90% of the non-flashing display.
Continuing research take me on other thinks.
I use own designed board powered direct from 1S LiIon 16340 battery. Display is also powered from this battery. When I measured output from XC6206P (VDD) get only 2.85V. I try change Charge Pump Regulator (register 8D) from default 0x014 to 0x095. Datasheet says this change charge pump mode from 7.5V to 9.0V. Now I measured 3.1V on VDD and about 8.6V on C1 (before about 7.2V) and Bingo! Display is steady a moire effect has gone. One side effect. The display beeps very softly in a high tone.
I try use the Nano pro board with 3.3V output and connect display to this power output and display is already steady.
I don't fully understand what this mean because datasheet description is:
VDD = 1.65V – 3.5V, ≤ VBAT (for IC logic)
VBAT = 3.0V – 4.5V (for charge bump regulator circuit)
VCC = 7.5V – 16.5V (for Panel driving)
Does anyone have a similar experience with power supplies greater than 3.3V?
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
}
I found this thread today when I had trouble using the 1.3" SSD1315 display with the Adafruit library from an Uno clone.
Mine was also freezing after a few seconds. I found the reason is that I was running it from the 5V output. Connecting it to the 3.3V output it runs pretty reliably.
However I think my clone Uno still struggles to deliver enough clean juice as it still flickers quite a bit more than the smaller 0.96" SSD1306 screen. Powered from an external 3.3V bench supply it looked cleaner, but yes still flickered a tiny bit, pretty acceptable though.
I presume the remaining slight flicker is due to the difference in timing frequency mentioned by andbig above.