diff --git a/Marlin/src/lcd/dogm/u8g_dev_ssd1306_sh1106_128x64_I2C.cpp b/Marlin/src/lcd/dogm/u8g_dev_ssd1306_sh1106_128x64_I2C.cpp index 59ec0f2b2..d05d35e51 100644 --- a/Marlin/src/lcd/dogm/u8g_dev_ssd1306_sh1106_128x64_I2C.cpp +++ b/Marlin/src/lcd/dogm/u8g_dev_ssd1306_sh1106_128x64_I2C.cpp @@ -87,28 +87,48 @@ static const uint8_t u8g_dev_sh1106_128x64_data_start_2_wire[] PROGMEM = { U8G_ESC_END // end of sequence }; +#define SH1106_PAGE_ADR(N) (0x20), (N) +#define SH1106_COLUMN_RANGE(N) (0x21), (((N) >> 8) & 0xFF), ((N) & 0xFF) +#define SH1106_PAGE_RANGE(N,O) (0x22), (N), (O) +#define SH1106_SCROLL(N) ((N) ? 0x2F : 0x2E) +#define SH1106_START_LINE(N) (0x40 | (N)) +#define SH1106_CONTRAST(N) (0x81), (N) +#define SH1106_CHARGE_PUMP(N) (0x8D), ((N) ? 0x14 : 0x10) +#define SH1106_ADC_REVERSE(N) ((N) ? 0xA1 : 0xA0) +#define SH1106_ALL_PIX(N) ((N) ? 0xA5 : 0xA4) +#define SH1106_INVERTED(N) ((N) ? 0xA7 : 0xA6) +#define SH1106_MUX_RATIO(N) (0xA8), (N) +#define SH1106_ON(N) ((N) ? 0xAF : 0xAE) +#define SH1106_OUT_MODE(N) ((N) ? 0xC8 : 0xC0) +#define SH1106_DISP_OFFS(N) (0xD3), (N) +#define SH1106_OSC_FREQ(R,F) (0xD5), ((F) << 4 | (R)) +#define SH1106_CHARGE_PER(P,D) (0xD9), ((D) << 4 | (P)) +#define SH1106_COM_CONFIG(N) (0xDA), ((N) ? 0x12 : 0x02) +#define SH1106_VCOM_DESEL(N) (0xDB), (N) +#define SH1106_NOOP() (0xE3) + static const uint8_t u8g_dev_sh1106_128x64_init_seq_2_wire[] PROGMEM = { - U8G_ESC_ADR(0), // initiate command mode - 0x0AE, // display off, sleep mode - 0x0A8, 0x03F, // mux ratio - 0x0D3, 0x00, // display offset - 0x040, // start line - 0x0A1, // segment remap a0/a1 - 0x0C8, // c0: scan dir normal, c8: reverse - 0x0DA, 0x012, // com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) - 0x081, 0x0CF, // [2] set contrast control - 0x020, 0x002, // 2012-05-27: page addressing mode - 0x21, 2, 0x81, // set column range from 0 through 131 - 0x22, 0, 7, // set page range from 0 through 7 - 0x0D9, 0x0F1, // [2] pre-charge period 0x022/f1 - 0x0DB, 0x040, // vcomh deselect level - 0x0A4, // output ram to display - 0x0A6, // none inverted normal display mode - 0x0D5, 0x080, // clock divide ratio (0x00=1) and oscillator frequency (0x8) - 0x08D, 0x014, // [2] charge pump setting (p62): 0x014 enable, 0x010 disable - 0x02E, // 2012-05-27: Deactivate scroll - 0x0AF, // display on - U8G_ESC_END // end of sequence + U8G_ESC_ADR(0), // Initiate command mode + SH1106_ON(0), // Display off, sleep mode + SH1106_MUX_RATIO(0x3F), // Mux ratio + SH1106_DISP_OFFS(0), // Display offset + SH1106_START_LINE(0), // Start line + SH1106_ADC_REVERSE(1), // Segment remap A0/A1 + SH1106_OUT_MODE(1), // C0: scan dir normal, C8: reverse + SH1106_COM_CONFIG(1), // Com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) + SH1106_CONTRAST(0xCF), // [2] set contrast control + SH1106_PAGE_ADR(0x02), // 2012-05-27: page addressing mode + SH1106_COLUMN_RANGE(0x281), // Set column range from 0 through 131 + SH1106_PAGE_RANGE(0, 7), // Set page range from 0 through 7 + SH1106_CHARGE_PER(0x1, 0xF), // [2] pre-charge period 0x22/F1 + SH1106_VCOM_DESEL(0x40), // Vcomh deselect level + SH1106_ALL_PIX(0), // Output ram to display + SH1106_INVERTED(0), // Normal display mode + SH1106_OSC_FREQ(0, 8), // Clock divide ratio (0:1) and oscillator frequency (8) + SH1106_CHARGE_PUMP(1), // [2] charge pump setting (P62): 0x14 enable, 0x10 disable + SH1106_SCROLL(0), // 2012-05-27: Deactivate scroll + SH1106_ON(1), // Display on + U8G_ESC_END // End of sequence }; uint8_t u8g_dev_sh1106_128x64_2x_2_wire_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg) { diff --git a/Marlin/src/lcd/dogm/u8g_dev_st7565_64128n_HAL.cpp b/Marlin/src/lcd/dogm/u8g_dev_st7565_64128n_HAL.cpp index 089a268f1..32568fb09 100644 --- a/Marlin/src/lcd/dogm/u8g_dev_st7565_64128n_HAL.cpp +++ b/Marlin/src/lcd/dogm/u8g_dev_st7565_64128n_HAL.cpp @@ -65,20 +65,21 @@ #define HEIGHT 64 #define PAGE_HEIGHT 8 -#define ST7565_ADC_REVERSE(N) (0xA0 | ((N) & 0x1)) -#define ST7565_BIAS_MODE(N) (0xA2 | ((N) & 0x1)) -#define ST7565_ALL_PIX(N) (0xA4 | ((N) & 0x1)) -#define ST7565_INVERTED(N) (0xA6 | ((N) & 0x1)) -#define ST7565_ON(N) (0xAE | ((N) & 0x1)) -#define ST7565_OUT_MODE(N) (0xC0 | ((N) & 0x1) << 3) +#define ST7565_ADC_REVERSE(N) ((N) ? 0xA1 : 0xA0) +#define ST7565_BIAS_MODE(N) ((N) ? 0xA3 : 0xA2) +#define ST7565_ALL_PIX(N) ((N) ? 0xA5 : 0xA4) +#define ST7565_INVERTED(N) ((N) ? 0xA7 : 0xA6) +#define ST7565_ON(N) ((N) ? 0xAF : 0xAE) +#define ST7565_OUT_MODE(N) ((N) ? 0xC8 : 0xC0) #define ST7565_POWER_CONTROL(N) (0x28 | (N)) -#define ST7565_V0_RATIO(N) (0x10 | ((N) & 0x7)) // Specific to Displaytech 64128N? (ST7565 is 0x20 | N) +#define ST7565_V0_RATIO(N) (0x10 | ((N) & 0x7)) +#define ST7565_V5_RATIO(N) (0x20 | ((N) & 0x7)) #define ST7565_CONTRAST(N) (0x81), (N) #define ST7565_COLUMN_ADR(N) (0x10 | (((N) >> 4) & 0xF)), ((N) & 0xF) #define ST7565_PAGE_ADR(N) (0xB0 | (N)) #define ST7565_START_LINE(N) (0x40 | (N)) -#define ST7565_SLEEP_MODE() (0xAC) +#define ST7565_SLEEP_MODE() (0xAC) // ,(N) needed? #define ST7565_NOOP() (0xE3) /* init sequence from https://github.com/adafruit/ST7565-LCD/blob/master/ST7565/ST7565.cpp */ @@ -91,7 +92,7 @@ static const uint8_t u8g_dev_st7565_64128n_HAL_init_seq[] PROGMEM = { ST7565_BIAS_MODE(0), // 0xA2: LCD bias 1/9 (according to Displaytech 64128N datasheet) ST7565_ADC_REVERSE(0), // Normal ADC Select (according to Displaytech 64128N datasheet) - ST7565_OUT_MODE(1), // common output mode: set scan direction normal operation/SHL Select, 0xC0 --> SHL = 0, normal, 0xC8 --> SHL = 1 + ST7565_OUT_MODE(1), // common output mode: set scan direction ST7565_START_LINE(0), // Display start line for Displaytech 64128N ST7565_POWER_CONTROL(0x4), // power control: turn on voltage converter diff --git a/Marlin/src/lcd/dogm/u8g_dev_uc1701_mini12864_HAL.cpp b/Marlin/src/lcd/dogm/u8g_dev_uc1701_mini12864_HAL.cpp index 4dd8759e7..8f957042e 100644 --- a/Marlin/src/lcd/dogm/u8g_dev_uc1701_mini12864_HAL.cpp +++ b/Marlin/src/lcd/dogm/u8g_dev_uc1701_mini12864_HAL.cpp @@ -65,38 +65,53 @@ #define HEIGHT 64 #define PAGE_HEIGHT 8 +#define UC1701_ADC_REVERSE(N) ((N) ? 0xA1 : 0xA0) +#define UC1701_BIAS_MODE(N) ((N) ? 0xA3 : 0xA2) +#define UC1701_ALL_PIX(N) ((N) ? 0xA5 : 0xA4) +#define UC1701_INVERTED(N) ((N) ? 0xA7 : 0xA6) +#define UC1701_ON(N) ((N) ? 0xAF : 0xAE) +#define UC1701_OUT_MODE(N) ((N) ? 0xC8 : 0xC0) +#define UC1701_POWER_CONTROL(N) (0x28 | (N)) +#define UC1701_V5_RATIO(N) (0x20 | ((N) & 0x7)) +#define UC1701_CONTRAST(N) (0x81), (N) + +#define UC1701_COLUMN_ADR(N) (0x10 | (((N) >> 4) & 0xF)), ((N) & 0xF) +#define UC1701_PAGE_ADR(N) (0xB0 | (N)) +#define UC1701_START_LINE(N) (0x40 | (N)) +#define UC1701_INDICATOR(N) (0xAC), (N) +#define UC1701_RESET() (0xE2) +#define UC1701_NOOP() (0xE3) +#define UC1701_BOOST_RATIO(N) (0xF8), (N) + static const uint8_t u8g_dev_uc1701_mini12864_HAL_init_seq[] PROGMEM = { U8G_ESC_CS(0), /* disable chip */ U8G_ESC_ADR(0), /* instruction mode */ U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */ U8G_ESC_CS(1), /* enable chip */ - 0x0E2, /* soft reset */ - 0x040, /* set display start line to 0 */ - 0x0A0, /* ADC set to reverse */ - 0x0C8, /* common output mode */ - 0x0A6, /* display normal, bit val 0: LCD pixel off. */ - 0x0A2, /* LCD bias 1/9 */ - 0x02F, /* all power control circuits on */ - 0x0F8, /* set booster ratio to */ - 0x000, /* 4x */ - 0x023, /* set V0 voltage resistor ratio to large */ - 0x081, /* set contrast */ - 0x027, /* contrast value */ - 0x0AC, /* indicator */ - 0x000, /* disable */ - 0x0AF, /* display on */ + UC1701_RESET(), /* soft reset */ + UC1701_START_LINE(0), /* set display start line to 0 */ + UC1701_ADC_REVERSE(0), /* ADC set to reverse */ + UC1701_OUT_MODE(1), /* common output mode */ + UC1701_INVERTED(0), /* display normal, bit val 0: LCD pixel off. */ + UC1701_BIAS_MODE(0), /* LCD bias 1/9 */ + UC1701_POWER_CONTROL(0x7), /* all power control circuits on */ + UC1701_BOOST_RATIO(0x0), /* set booster ratio to 4x */ + UC1701_V5_RATIO(3), /* set V0 voltage resistor ratio to large */ + UC1701_CONTRAST(0x27), /* set contrast */ + UC1701_INDICATOR(0), /* indicator */ + UC1701_ON(1), /* display on */ U8G_ESC_CS(0), /* disable chip */ U8G_ESC_DLY(100), /* delay 100 ms */ U8G_ESC_CS(1), /* enable chip */ - 0x0A5, /* display all points, ST7565 */ + UC1701_ALL_PIX(1), /* display all points, ST7565 */ U8G_ESC_CS(0), /* disable chip */ U8G_ESC_DLY(100), /* delay 100 ms */ U8G_ESC_DLY(100), /* delay 100 ms */ U8G_ESC_CS(1), /* enable chip */ - 0x0A4, /* normal display */ + UC1701_ALL_PIX(0), /* normal display */ U8G_ESC_CS(0), /* disable chip */ U8G_ESC_END /* end of sequence */ }; @@ -104,8 +119,7 @@ static const uint8_t u8g_dev_uc1701_mini12864_HAL_init_seq[] PROGMEM = { static const uint8_t u8g_dev_uc1701_mini12864_HAL_data_start[] PROGMEM = { U8G_ESC_ADR(0), /* instruction mode */ U8G_ESC_CS(1), /* enable chip */ - 0x010, /* set upper 4 bit of the col adr to 0 */ - 0x000, /* set lower 4 bit of the col adr to 4 */ + UC1701_COLUMN_ADR(0), /* address 0 */ U8G_ESC_END /* end of sequence */ };