Define more u8g command macros

This commit is contained in:
Scott Lahteine 2019-05-06 16:59:07 -05:00
parent f9a50f451d
commit a36782ac1d
3 changed files with 84 additions and 49 deletions

View file

@ -87,28 +87,48 @@ static const uint8_t u8g_dev_sh1106_128x64_data_start_2_wire[] PROGMEM = {
U8G_ESC_END // end of sequence 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 = { static const uint8_t u8g_dev_sh1106_128x64_init_seq_2_wire[] PROGMEM = {
U8G_ESC_ADR(0), // initiate command mode U8G_ESC_ADR(0), // Initiate command mode
0x0AE, // display off, sleep mode SH1106_ON(0), // Display off, sleep mode
0x0A8, 0x03F, // mux ratio SH1106_MUX_RATIO(0x3F), // Mux ratio
0x0D3, 0x00, // display offset SH1106_DISP_OFFS(0), // Display offset
0x040, // start line SH1106_START_LINE(0), // Start line
0x0A1, // segment remap a0/a1 SH1106_ADC_REVERSE(1), // Segment remap A0/A1
0x0C8, // c0: scan dir normal, c8: reverse SH1106_OUT_MODE(1), // C0: scan dir normal, C8: reverse
0x0DA, 0x012, // com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) SH1106_COM_CONFIG(1), // Com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5)
0x081, 0x0CF, // [2] set contrast control SH1106_CONTRAST(0xCF), // [2] set contrast control
0x020, 0x002, // 2012-05-27: page addressing mode SH1106_PAGE_ADR(0x02), // 2012-05-27: page addressing mode
0x21, 2, 0x81, // set column range from 0 through 131 SH1106_COLUMN_RANGE(0x281), // Set column range from 0 through 131
0x22, 0, 7, // set page range from 0 through 7 SH1106_PAGE_RANGE(0, 7), // Set page range from 0 through 7
0x0D9, 0x0F1, // [2] pre-charge period 0x022/f1 SH1106_CHARGE_PER(0x1, 0xF), // [2] pre-charge period 0x22/F1
0x0DB, 0x040, // vcomh deselect level SH1106_VCOM_DESEL(0x40), // Vcomh deselect level
0x0A4, // output ram to display SH1106_ALL_PIX(0), // Output ram to display
0x0A6, // none inverted normal display mode SH1106_INVERTED(0), // Normal display mode
0x0D5, 0x080, // clock divide ratio (0x00=1) and oscillator frequency (0x8) SH1106_OSC_FREQ(0, 8), // Clock divide ratio (0:1) and oscillator frequency (8)
0x08D, 0x014, // [2] charge pump setting (p62): 0x014 enable, 0x010 disable SH1106_CHARGE_PUMP(1), // [2] charge pump setting (P62): 0x14 enable, 0x10 disable
0x02E, // 2012-05-27: Deactivate scroll SH1106_SCROLL(0), // 2012-05-27: Deactivate scroll
0x0AF, // display on SH1106_ON(1), // Display on
U8G_ESC_END // end of sequence 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) { uint8_t u8g_dev_sh1106_128x64_2x_2_wire_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg) {

View file

@ -65,20 +65,21 @@
#define HEIGHT 64 #define HEIGHT 64
#define PAGE_HEIGHT 8 #define PAGE_HEIGHT 8
#define ST7565_ADC_REVERSE(N) (0xA0 | ((N) & 0x1)) #define ST7565_ADC_REVERSE(N) ((N) ? 0xA1 : 0xA0)
#define ST7565_BIAS_MODE(N) (0xA2 | ((N) & 0x1)) #define ST7565_BIAS_MODE(N) ((N) ? 0xA3 : 0xA2)
#define ST7565_ALL_PIX(N) (0xA4 | ((N) & 0x1)) #define ST7565_ALL_PIX(N) ((N) ? 0xA5 : 0xA4)
#define ST7565_INVERTED(N) (0xA6 | ((N) & 0x1)) #define ST7565_INVERTED(N) ((N) ? 0xA7 : 0xA6)
#define ST7565_ON(N) (0xAE | ((N) & 0x1)) #define ST7565_ON(N) ((N) ? 0xAF : 0xAE)
#define ST7565_OUT_MODE(N) (0xC0 | ((N) & 0x1) << 3) #define ST7565_OUT_MODE(N) ((N) ? 0xC8 : 0xC0)
#define ST7565_POWER_CONTROL(N) (0x28 | (N)) #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_CONTRAST(N) (0x81), (N)
#define ST7565_COLUMN_ADR(N) (0x10 | (((N) >> 4) & 0xF)), ((N) & 0xF) #define ST7565_COLUMN_ADR(N) (0x10 | (((N) >> 4) & 0xF)), ((N) & 0xF)
#define ST7565_PAGE_ADR(N) (0xB0 | (N)) #define ST7565_PAGE_ADR(N) (0xB0 | (N))
#define ST7565_START_LINE(N) (0x40 | (N)) #define ST7565_START_LINE(N) (0x40 | (N))
#define ST7565_SLEEP_MODE() (0xAC) #define ST7565_SLEEP_MODE() (0xAC) // ,(N) needed?
#define ST7565_NOOP() (0xE3) #define ST7565_NOOP() (0xE3)
/* init sequence from https://github.com/adafruit/ST7565-LCD/blob/master/ST7565/ST7565.cpp */ /* 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_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_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_START_LINE(0), // Display start line for Displaytech 64128N
ST7565_POWER_CONTROL(0x4), // power control: turn on voltage converter ST7565_POWER_CONTROL(0x4), // power control: turn on voltage converter

View file

@ -65,38 +65,53 @@
#define HEIGHT 64 #define HEIGHT 64
#define PAGE_HEIGHT 8 #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 = { static const uint8_t u8g_dev_uc1701_mini12864_HAL_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */ U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */ U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */ U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */ U8G_ESC_CS(1), /* enable chip */
0x0E2, /* soft reset */ UC1701_RESET(), /* soft reset */
0x040, /* set display start line to 0 */ UC1701_START_LINE(0), /* set display start line to 0 */
0x0A0, /* ADC set to reverse */ UC1701_ADC_REVERSE(0), /* ADC set to reverse */
0x0C8, /* common output mode */ UC1701_OUT_MODE(1), /* common output mode */
0x0A6, /* display normal, bit val 0: LCD pixel off. */ UC1701_INVERTED(0), /* display normal, bit val 0: LCD pixel off. */
0x0A2, /* LCD bias 1/9 */ UC1701_BIAS_MODE(0), /* LCD bias 1/9 */
0x02F, /* all power control circuits on */ UC1701_POWER_CONTROL(0x7), /* all power control circuits on */
0x0F8, /* set booster ratio to */ UC1701_BOOST_RATIO(0x0), /* set booster ratio to 4x */
0x000, /* 4x */ UC1701_V5_RATIO(3), /* set V0 voltage resistor ratio to large */
0x023, /* set V0 voltage resistor ratio to large */ UC1701_CONTRAST(0x27), /* set contrast */
0x081, /* set contrast */ UC1701_INDICATOR(0), /* indicator */
0x027, /* contrast value */ UC1701_ON(1), /* display on */
0x0AC, /* indicator */
0x000, /* disable */
0x0AF, /* display on */
U8G_ESC_CS(0), /* disable chip */ 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 */ 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_CS(0), /* disable chip */
U8G_ESC_DLY(100), /* delay 100 ms */ U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_DLY(100), /* delay 100 ms */ U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_CS(1), /* enable chip */ U8G_ESC_CS(1), /* enable chip */
0x0A4, /* normal display */ UC1701_ALL_PIX(0), /* normal display */
U8G_ESC_CS(0), /* disable chip */ U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */ 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 = { static const uint8_t u8g_dev_uc1701_mini12864_HAL_data_start[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */ U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */ U8G_ESC_CS(1), /* enable chip */
0x010, /* set upper 4 bit of the col adr to 0 */ UC1701_COLUMN_ADR(0), /* address 0 */
0x000, /* set lower 4 bit of the col adr to 4 */
U8G_ESC_END /* end of sequence */ U8G_ESC_END /* end of sequence */
}; };