Skip to content

Commit

Permalink
Re-applied support for SH1106_128_64 - 1.3" OLED display version.
Browse files Browse the repository at this point in the history
  • Loading branch information
slav-at-attachix committed Aug 1, 2017
1 parent 008759f commit d2024fa
Showing 1 changed file with 96 additions and 0 deletions.
96 changes: 96 additions & 0 deletions Sming/Libraries/.patches/Adafruit_SSD1306.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
diff --git a/Adafruit_SSD1306.cpp b/Adafruit_SSD1306.cpp
index 570a335..40f4784 100644
--- a/Adafruit_SSD1306.cpp
+++ b/Adafruit_SSD1306.cpp
@@ -252,7 +252,7 @@ void Adafruit_SSD1306::begin(uint8_t vccstate, uint8_t i2caddr, bool reset) {
ssd1306_command(SSD1306_SETCONTRAST); // 0x81
ssd1306_command(0x8F);

-#elif defined SSD1306_128_64
+#elif defined SSD1306_128_64 || defined SH1106_128_64
ssd1306_command(SSD1306_SETCOMPINS); // 0xDA
ssd1306_command(0x12);
ssd1306_command(SSD1306_SETCONTRAST); // 0x81
@@ -417,6 +417,28 @@ void Adafruit_SSD1306::dim(boolean dim) {
}

void Adafruit_SSD1306::display(void) {
+#if defined SH1106_128_64
+ for (int index = 0; index < 8; index++) {
+ ssd1306_command(SH1106_SETSTARTPAGE + index);
+ /* for some reason display is shifted by 2 columns
+ * on 1.3" displays from ebay
+ */
+ ssd1306_command(SSD1306_SETLOWCOLUMN + 2); // low column start address
+ ssd1306_command(SSD1306_SETHIGHCOLUMN); // high column start address
+
+ for (int pixel = 0; pixel < SSD1306_LCDWIDTH; pixel++) {
+ Wire.beginTransmission(_i2caddr);
+ WIRE_WRITE(0x40);
+ // input buffer doesn't accept all bytes at once
+ for (uint8_t x=0; x<16; x++) {
+ WIRE_WRITE(buffer[index * SSD1306_LCDWIDTH + pixel]);
+ ++pixel;
+ }
+ --pixel;
+ Wire.endTransmission();
+ }
+ }
+#else
ssd1306_command(SSD1306_COLUMNADDR);
ssd1306_command(0); // Column start address (0 = reset)
ssd1306_command(SSD1306_LCDWIDTH-1); // Column end address (127 = reset)
@@ -482,6 +504,7 @@ void Adafruit_SSD1306::display(void) {
TWBR = twbrbackup;
#endif
}
+#endif /* defined SH1106_128_64 */
}

// clear everything
diff --git a/Adafruit_SSD1306.h b/Adafruit_SSD1306.h
index 1162f87..4226f3e 100644
--- a/Adafruit_SSD1306.h
+++ b/Adafruit_SSD1306.h
@@ -69,20 +69,28 @@ All text above, and the splash screen must be included in any redistribution

SSD1306_96_16

+ SH1106_128_64 - 1.3" OLED display version
+
-----------------------------------------------------------------------*/
-// #define SSD1306_128_64
- #define SSD1306_128_32
+// #define SH1106_128_64
+ #define SSD1306_128_64
+// #define SSD1306_128_32
// #define SSD1306_96_16
/*=========================================================================*/

+#if defined SSD1306_128_64 && defined SH1106_128_64
+ #error "Select either SH1106 or SSD1306 display type in SSD1306.h"
+#endif
+
+
#if defined SSD1306_128_64 && defined SSD1306_128_32
#error "Only one SSD1306 display can be specified at once in SSD1306.h"
#endif
-#if !defined SSD1306_128_64 && !defined SSD1306_128_32 && !defined SSD1306_96_16
+#if !defined SSD1306_128_64 && !defined SSD1306_128_32 && !defined SSD1306_96_16 && !defined SH1106_128_64
#error "At least one SSD1306 display must be specified in SSD1306.h"
#endif

-#if defined SSD1306_128_64
+#if defined SSD1306_128_64 || defined SH1106_128_64
#define SSD1306_LCDWIDTH 128
#define SSD1306_LCDHEIGHT 64
#endif
@@ -132,6 +140,8 @@ All text above, and the splash screen must be included in any redistribution
#define SSD1306_EXTERNALVCC 0x1
#define SSD1306_SWITCHCAPVCC 0x2

+#define SH1106_SETSTARTPAGE 0xB0
+
// Scrolling #defines
#define SSD1306_ACTIVATE_SCROLL 0x2F
#define SSD1306_DEACTIVATE_SCROLL 0x2E

0 comments on commit d2024fa

Please sign in to comment.