From 69f74c8e6e676a91ea57aeaf606d8e98765a48bb Mon Sep 17 00:00:00 2001 From: olikraus Date: Sat, 12 Nov 2016 16:17:56 +0100 Subject: [PATCH] uc1611 --- cppsrc/U8g2lib.h | 36 +++++++ cppsrc/U8x8lib.h | 12 +++ csrc/u8g2.h | 6 ++ csrc/u8g2_d_memory.c | 18 ++++ csrc/u8g2_d_setup.c | 28 ++++++ csrc/u8x8.h | 4 +- csrc/u8x8_cad.c | 85 ++++++++++++++++ csrc/u8x8_d_uc1611.c | 96 +++++-------------- .../internal/DebounceU8x8/DebounceU8x8.ino | 2 +- .../InputValueU8x8/InputValueU8x8.ino | 2 +- .../SelectionListU8x8/SelectionList.ino | 2 +- .../StringLineU8x8/StringLineU8x8.ino | 2 +- .../HelloWorld/HelloWorld.ino | 2 +- .../u8g2_page_buffer/U8g2Logo/U8g2Logo.ino | 2 +- sys/arduino/u8x8/FlipMode/FlipMode.ino | 2 +- .../u8x8/GraphicsTest/GraphicsTest.ino | 4 +- sys/arduino/u8x8/HelloWorld/HelloWorld.ino | 8 +- sys/arduino/u8x8/MessageBox/MessageBox.ino | 2 +- tools/codebuild/codebuild.c | 10 ++ tools/inoupdate/u8x8.ino | 2 +- 20 files changed, 235 insertions(+), 90 deletions(-) diff --git a/cppsrc/U8g2lib.h b/cppsrc/U8g2lib.h index cb2a5032..e325d80a 100644 --- a/cppsrc/U8g2lib.h +++ b/cppsrc/U8g2lib.h @@ -1250,6 +1250,42 @@ class U8G2_UC1610_EA_DOGXL160_F_3W_SW_SPI : public U8G2 { u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; +class U8G2_UC1611_EA_DOGM240_1_SW_I2C : public U8G2 { + public: U8G2_UC1611_EA_DOGM240_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { + u8g2_Setup_uc1611_i2c_ea_dogm240_1(&u8g2, rotation, u8x8_byte_sw_i2c, u8x8_gpio_and_delay_arduino); + u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); + } +}; +class U8G2_UC1611_EA_DOGM240_1_HW_I2C : public U8G2 { + public: U8G2_UC1611_EA_DOGM240_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { + u8g2_Setup_uc1611_i2c_ea_dogm240_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); + u8x8_SetPin_HW_I2C(getU8x8(), reset); + } +}; +class U8G2_UC1611_EA_DOGM240_2_SW_I2C : public U8G2 { + public: U8G2_UC1611_EA_DOGM240_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { + u8g2_Setup_uc1611_i2c_ea_dogm240_2(&u8g2, rotation, u8x8_byte_sw_i2c, u8x8_gpio_and_delay_arduino); + u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); + } +}; +class U8G2_UC1611_EA_DOGM240_2_HW_I2C : public U8G2 { + public: U8G2_UC1611_EA_DOGM240_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { + u8g2_Setup_uc1611_i2c_ea_dogm240_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); + u8x8_SetPin_HW_I2C(getU8x8(), reset); + } +}; +class U8G2_UC1611_EA_DOGM240_F_SW_I2C : public U8G2 { + public: U8G2_UC1611_EA_DOGM240_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { + u8g2_Setup_uc1611_i2c_ea_dogm240_f(&u8g2, rotation, u8x8_byte_sw_i2c, u8x8_gpio_and_delay_arduino); + u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); + } +}; +class U8G2_UC1611_EA_DOGM240_F_HW_I2C : public U8G2 { + public: U8G2_UC1611_EA_DOGM240_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { + u8g2_Setup_uc1611_i2c_ea_dogm240_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); + u8x8_SetPin_HW_I2C(getU8x8(), reset); + } +}; class U8G2_ST7565_EA_DOGM128_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); diff --git a/cppsrc/U8x8lib.h b/cppsrc/U8x8lib.h index bd64c600..56232790 100644 --- a/cppsrc/U8x8lib.h +++ b/cppsrc/U8x8lib.h @@ -545,6 +545,18 @@ class U8X8_UC1610_EA_DOGXL160_3W_SW_SPI : public U8X8 { u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; +class U8X8_UC1611_EA_DOGM240_SW_I2C : public U8X8 { + public: U8X8_UC1611_EA_DOGM240_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { + u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogm240, u8x8_cad_uc16xx_i2c, u8x8_byte_sw_i2c, u8x8_gpio_and_delay_arduino); + u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); + } +}; +class U8X8_UC1611_EA_DOGM240_HW_I2C : public U8X8 { + public: U8X8_UC1611_EA_DOGM240_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { + u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogm240, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); + u8x8_SetPin_HW_I2C(getU8x8(), reset); + } +}; class U8X8_ST7565_EA_DOGM128_4W_SW_SPI : public U8X8 { public: U8X8_ST7565_EA_DOGM128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ea_dogm128, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); diff --git a/csrc/u8g2.h b/csrc/u8g2.h index 137167a4..059fbb58 100644 --- a/csrc/u8g2.h +++ b/csrc/u8g2.h @@ -422,6 +422,9 @@ uint8_t *u8g2_m_uc1701_16_f(uint8_t *page_cnt); uint8_t *u8g2_m_uc1610_20_1(uint8_t *page_cnt); uint8_t *u8g2_m_uc1610_20_2(uint8_t *page_cnt); uint8_t *u8g2_m_uc1610_20_f(uint8_t *page_cnt); +uint8_t *u8g2_m_uc1611_30_1(uint8_t *page_cnt); +uint8_t *u8g2_m_uc1611_30_2(uint8_t *page_cnt); +uint8_t *u8g2_m_uc1611_30_f(uint8_t *page_cnt); uint8_t *u8g2_m_st7565_16_1(uint8_t *page_cnt); uint8_t *u8g2_m_st7565_16_2(uint8_t *page_cnt); uint8_t *u8g2_m_st7565_16_f(uint8_t *page_cnt); @@ -508,6 +511,9 @@ void u8g2_Setup_uc1701_mini12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8 void u8g2_Setup_uc1610_ea_dogxl160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1610_ea_dogxl160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1610_ea_dogxl160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); +void u8g2_Setup_uc1611_i2c_ea_dogm240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); +void u8g2_Setup_uc1611_i2c_ea_dogm240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); +void u8g2_Setup_uc1611_i2c_ea_dogm240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_ea_dogm128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_ea_dogm128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_ea_dogm128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); diff --git a/csrc/u8g2_d_memory.c b/csrc/u8g2_d_memory.c index 08fdfc64..a060a3c5 100644 --- a/csrc/u8g2_d_memory.c +++ b/csrc/u8g2_d_memory.c @@ -183,6 +183,24 @@ uint8_t *u8g2_m_uc1610_20_f(uint8_t *page_cnt) *page_cnt = 13; return buf; } +uint8_t *u8g2_m_uc1611_30_1(uint8_t *page_cnt) +{ + static uint8_t buf[240]; + *page_cnt = 1; + return buf; +} +uint8_t *u8g2_m_uc1611_30_2(uint8_t *page_cnt) +{ + static uint8_t buf[480]; + *page_cnt = 2; + return buf; +} +uint8_t *u8g2_m_uc1611_30_f(uint8_t *page_cnt) +{ + static uint8_t buf[1920]; + *page_cnt = 8; + return buf; +} uint8_t *u8g2_m_st7565_16_1(uint8_t *page_cnt) { static uint8_t buf[128]; diff --git a/csrc/u8g2_d_setup.c b/csrc/u8g2_d_setup.c index 4e50f2e7..8fae796f 100644 --- a/csrc/u8g2_d_setup.c +++ b/csrc/u8g2_d_setup.c @@ -535,6 +535,34 @@ void u8g2_Setup_uc1610_ea_dogxl160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8 buf = u8g2_m_uc1610_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } +/* uc1611 */ +/* uc1611 1 */ +void u8g2_Setup_uc1611_i2c_ea_dogm240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) +{ + uint8_t tile_buf_height; + uint8_t *buf; + u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ea_dogm240, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); + buf = u8g2_m_uc1611_30_1(&tile_buf_height); + u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); +} +/* uc1611 2 */ +void u8g2_Setup_uc1611_i2c_ea_dogm240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) +{ + uint8_t tile_buf_height; + uint8_t *buf; + u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ea_dogm240, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); + buf = u8g2_m_uc1611_30_2(&tile_buf_height); + u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); +} +/* uc1611 f */ +void u8g2_Setup_uc1611_i2c_ea_dogm240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) +{ + uint8_t tile_buf_height; + uint8_t *buf; + u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ea_dogm240, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); + buf = u8g2_m_uc1611_30_f(&tile_buf_height); + u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); +} /* st7565 */ /* st7565 1 */ void u8g2_Setup_st7565_ea_dogm128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) diff --git a/csrc/u8x8.h b/csrc/u8x8.h index 843d9f5c..f8607cec 100644 --- a/csrc/u8x8.h +++ b/csrc/u8x8.h @@ -544,6 +544,7 @@ uint8_t u8x8_cad_100(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_cad_st7920_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_cad_ssd13xx_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_cad_ld7032_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); +uint8_t u8x8_cad_uc16xx_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /*==========================================*/ @@ -696,13 +697,14 @@ uint8_t u8x8_d_ld7032_60x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *ar uint8_t u8x8_d_t6963_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_t6963_240x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_t6963_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); -uint8_t u8x8_d_ssd1322_nhd_256x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_t6963_256x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); +uint8_t u8x8_d_ssd1322_nhd_256x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_a2printer_384x240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sed1330_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ra8835_nhd_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1325_nhd_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1610_ea_dogxl160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); +uint8_t u8x8_d_uc1611_ea_dogm240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /*==========================================*/ diff --git a/csrc/u8x8_cad.c b/csrc/u8x8_cad.c index 2c504b2a..80e94d92 100644 --- a/csrc/u8x8_cad.c +++ b/csrc/u8x8_cad.c @@ -368,6 +368,7 @@ uint8_t u8x8_cad_st7920_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *ar /* cad procedure for the SSD13xx family in I2C mode */ /* u8x8_byte_SetDC is not used */ /* U8X8_MSG_BYTE_START_TRANSFER starts i2c transfer, U8X8_MSG_BYTE_END_TRANSFER stops transfer */ +/* After transfer start, a full byte indicates command or data mode */ static void u8x8_i2c_data_transfer(u8x8_t *u8x8, uint8_t arg_int, void *arg_ptr) U8X8_NOINLINE; static void u8x8_i2c_data_transfer(u8x8_t *u8x8, uint8_t arg_int, void *arg_ptr) @@ -385,6 +386,7 @@ uint8_t u8x8_cad_ssd13xx_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *a { case U8X8_MSG_CAD_SEND_CMD: case U8X8_MSG_CAD_SEND_ARG: + /* 7 Nov 2016: Can this be improved? */ //u8x8_byte_SetDC(u8x8, 0); u8x8_byte_StartTransfer(u8x8); //u8x8_byte_SendByte(u8x8, u8x8_GetI2CAddress(u8x8)); @@ -483,3 +485,86 @@ uint8_t u8x8_cad_ld7032_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *ar return 1; } +/* cad procedure for the UC16xx family in I2C mode */ +/* u8x8_byte_SetDC is not used */ +/* DC bit is encoded into the adr byte */ +uint8_t u8x8_cad_uc16xx_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) +{ + static uint8_t in_transfer = 0; + static uint8_t is_data = 0; + uint8_t *p; + switch(msg) + { + case U8X8_MSG_CAD_SEND_CMD: + case U8X8_MSG_CAD_SEND_ARG: + if ( in_transfer != 0 ) + { + if ( is_data != 0 ) + { + /* transfer mode is active, but data transfer */ + u8x8_byte_EndTransfer(u8x8); + /* clear the lowest two bits of the adr */ + u8x8_SetI2CAddress( u8x8, u8x8_GetI2CAddress(u8x8)&0x0fc ); + u8x8_byte_StartTransfer(u8x8); + } + } + else + { + /* clear the lowest two bits of the adr */ + u8x8_SetI2CAddress( u8x8, u8x8_GetI2CAddress(u8x8)&0x0fc ); + u8x8_byte_StartTransfer(u8x8); + } + u8x8_byte_SendByte(u8x8, arg_int); + in_transfer = 1; + break; + case U8X8_MSG_CAD_SEND_DATA: + if ( in_transfer != 0 ) + { + if ( is_data == 0 ) + { + /* transfer mode is active, but data transfer */ + u8x8_byte_EndTransfer(u8x8); + /* clear the lowest two bits of the adr */ + u8x8_SetI2CAddress( u8x8, (u8x8_GetI2CAddress(u8x8)&0x0fc)|2 ); + u8x8_byte_StartTransfer(u8x8); + } + } + else + { + /* clear the lowest two bits of the adr */ + u8x8_SetI2CAddress( u8x8, (u8x8_GetI2CAddress(u8x8)&0x0fc)|2 ); + u8x8_byte_StartTransfer(u8x8); + } + in_transfer = 1; + + p = arg_ptr; + while( arg_int > 24 ) + { + u8x8->byte_cb(u8x8, U8X8_MSG_CAD_SEND_DATA, 24, p); + arg_int-=24; + p+=24; + u8x8_byte_EndTransfer(u8x8); + u8x8_byte_StartTransfer(u8x8); + } + u8x8->byte_cb(u8x8, U8X8_MSG_CAD_SEND_DATA, arg_int, p); + + break; + case U8X8_MSG_CAD_INIT: + /* apply default i2c adr if required so that the start transfer msg can use this */ + if ( u8x8->i2c_address == 255 ) + u8x8->i2c_address = 0x070; + return u8x8->byte_cb(u8x8, msg, arg_int, arg_ptr); + case U8X8_MSG_CAD_START_TRANSFER: + in_transfer = 0; + /* actual start is delayed, because we do not whether this is data or cmd transfer */ + break; + case U8X8_MSG_CAD_END_TRANSFER: + if ( in_transfer != 0 ) + u8x8_byte_EndTransfer(u8x8); + in_transfer = 0; + break; + default: + return 0; + } + return 1; +} diff --git a/csrc/u8x8_d_uc1611.c b/csrc/u8x8_d_uc1611.c index 9c5886ef..38e68ad2 100644 --- a/csrc/u8x8_d_uc1611.c +++ b/csrc/u8x8_d_uc1611.c @@ -43,14 +43,14 @@ static const uint8_t u8x8_d_uc1611_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ - U8X8_C(0x0af), /* display on */ + U8X8_C(0x0a9), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1611_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ - U8X8_C(0x0ae), /* display off */ + U8X8_C(0x0a8), /* display off, enter sleep mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; @@ -200,87 +200,34 @@ uint8_t u8x8_d_uc1611_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *a } /*================================================*/ -/* DOGM128 */ +/* EA DOGM240 */ -static const uint8_t u8x8_d_uc1611_dogm128_init_seq[] = { +static const uint8_t u8x8_d_uc1611_ea_dogm240_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ + U8X8_C(0x02f), /* internal pump control */ + U8X8_CA(0x0f1, 0x07f), /* set COM end */ + U8X8_CA(0x0f2, 0x000), /* display line start */ + U8X8_CA(0x0f3, 0x000), /* display line end */ + U8X8_C(0x0a3), /* line rate */ + U8X8_CA(0x081, 0x09f), /* set contrast */ - U8X8_C(0x0e2), /* soft reset */ - U8X8_C(0x0ae), /* display off */ - U8X8_C(0x040), /* set display start line to 0 */ + U8X8_C(0x0a9), /* display enable */ + + U8X8_C(0x0d1), /* display pattern */ + U8X8_C(0x089), /* auto increment */ + U8X8_CA(0x0c0, 0x004), /* LCD Mapping */ + U8X8_C(0x000), /* column low nibble */ + U8X8_C(0x010), /* column high nibble */ + U8X8_C(0x060), /* page adr low */ + U8X8_C(0x070), /* page adr high */ - U8X8_C(0x0a1), /* ADC set to reverse */ - U8X8_C(0x0c0), /* common output mode */ - // Flipmode - // U8X8_C(0x0a0), /* ADC set to reverse */ - // U8X8_C(0x0c8), /* common output mode */ - - U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ - U8X8_C(0x0a2), /* LCD bias 1/9 */ - U8X8_C(0x02f), /* all power control circuits on */ - U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x */ - U8X8_C(0x027), /* regulator, booster and follower */ - U8X8_CA(0x081, 0x018), /* set contrast, contrast value, EA default: 0x016 */ - U8X8_C(0x0a4), /* normal display */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; -uint8_t u8x8_d_uc1611_ea_dogm128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) -{ - /* call common procedure first and handle messages there */ - if ( u8x8_d_uc1611_common(u8x8, msg, arg_int, arg_ptr) == 0 ) - { - /* msg not handled, then try here */ - switch(msg) - { - case U8X8_MSG_DISPLAY_SETUP_MEMORY: - u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1611_240x128_display_info); - break; - case U8X8_MSG_DISPLAY_INIT: - u8x8_d_helper_display_init(u8x8); - u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611_dogm128_init_seq); - break; - default: - return 0; /* msg unknown */ - } - } - return 1; -} - - -/*================================================*/ -/* NHD-C12832 */ - -static const uint8_t u8x8_d_uc1611_nhd_c12832_init_seq[] = { - - U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ - - U8X8_C(0x0e2), /* soft reset */ - U8X8_C(0x0ae), /* display off */ - U8X8_C(0x040), /* set display start line to 0 */ - - U8X8_C(0x0a1), /* ADC set to reverse */ - U8X8_C(0x0c0), /* common output mode */ - // Flipmode - //U8X8_C(0x0a0), /* ADC set to reverse */ - //U8X8_C(0x0c8), /* common output mode */ - - U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ - U8X8_C(0x0a2), /* LCD bias 1/9 */ - U8X8_C(0x02f), /* all power control circuits on */ - U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x */ - U8X8_C(0x023), /* set V0 voltage resistor ratio to large*/ - U8X8_CA(0x081, 0x00a), /* set contrast, contrast value NHD C12832 */ - U8X8_C(0x0a4), /* normal display */ - - U8X8_END_TRANSFER(), /* disable chip */ - U8X8_END() /* end of sequence */ -}; - -uint8_t u8x8_d_uc1611_nhd_c12832(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) +uint8_t u8x8_d_uc1611_ea_dogm240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_uc1611_common(u8x8, msg, arg_int, arg_ptr) == 0 ) @@ -293,7 +240,7 @@ uint8_t u8x8_d_uc1611_nhd_c12832(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, voi break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); - u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611_nhd_c12832_init_seq); + u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611_ea_dogm240_init_seq); break; default: return 0; /* msg unknown */ @@ -301,3 +248,4 @@ uint8_t u8x8_d_uc1611_nhd_c12832(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, voi } return 1; } + diff --git a/sys/arduino/internal/DebounceU8x8/DebounceU8x8.ino b/sys/arduino/internal/DebounceU8x8/DebounceU8x8.ino index c288b50b..a71e62fc 100644 --- a/sys/arduino/internal/DebounceU8x8/DebounceU8x8.ino +++ b/sys/arduino/internal/DebounceU8x8/DebounceU8x8.ino @@ -70,6 +70,6 @@ //U8X8_ST7565_NHD_C12832_4W_HW_SPI u8x8(/* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); //U8X8_UC1610_EA_DOGXL160_4W_SW_SPI u8x8(/* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE); //U8X8_UC1610_EA_DOGXL160_4W_HW_SPI u8x8(/* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE); - +//U8X8_UC1611_EA_DOGM240_HW_I2C u8x8(/* reset=*/ 8); // Due, I2C, DOGM240 Test Board diff --git a/sys/arduino/internal/InputValueU8x8/InputValueU8x8.ino b/sys/arduino/internal/InputValueU8x8/InputValueU8x8.ino index fa153a6b..a7f08d2b 100644 --- a/sys/arduino/internal/InputValueU8x8/InputValueU8x8.ino +++ b/sys/arduino/internal/InputValueU8x8/InputValueU8x8.ino @@ -70,7 +70,7 @@ //U8X8_ST7565_NHD_C12832_4W_HW_SPI u8x8(/* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); //U8X8_UC1610_EA_DOGXL160_4W_SW_SPI u8x8(/* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE); //U8X8_UC1610_EA_DOGXL160_4W_HW_SPI u8x8(/* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE); - +//U8X8_UC1611_EA_DOGM240_HW_I2C u8x8(/* reset=*/ 8); // Due, I2C, DOGM240 Test Board // End of constructor list diff --git a/sys/arduino/internal/SelectionListU8x8/SelectionList.ino b/sys/arduino/internal/SelectionListU8x8/SelectionList.ino index aa8b16e6..ddd091ae 100644 --- a/sys/arduino/internal/SelectionListU8x8/SelectionList.ino +++ b/sys/arduino/internal/SelectionListU8x8/SelectionList.ino @@ -70,7 +70,7 @@ //U8X8_ST7565_NHD_C12832_4W_HW_SPI u8x8(/* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); //U8X8_UC1610_EA_DOGXL160_4W_SW_SPI u8x8(/* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE); //U8X8_UC1610_EA_DOGXL160_4W_HW_SPI u8x8(/* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE); - +//U8X8_UC1611_EA_DOGM240_HW_I2C u8x8(/* reset=*/ 8); // Due, I2C, DOGM240 Test Board // End of constructor list diff --git a/sys/arduino/internal/StringLineU8x8/StringLineU8x8.ino b/sys/arduino/internal/StringLineU8x8/StringLineU8x8.ino index aa8b16e6..ddd091ae 100644 --- a/sys/arduino/internal/StringLineU8x8/StringLineU8x8.ino +++ b/sys/arduino/internal/StringLineU8x8/StringLineU8x8.ino @@ -70,7 +70,7 @@ //U8X8_ST7565_NHD_C12832_4W_HW_SPI u8x8(/* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); //U8X8_UC1610_EA_DOGXL160_4W_SW_SPI u8x8(/* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE); //U8X8_UC1610_EA_DOGXL160_4W_HW_SPI u8x8(/* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE); - +//U8X8_UC1611_EA_DOGM240_HW_I2C u8x8(/* reset=*/ 8); // Due, I2C, DOGM240 Test Board // End of constructor list diff --git a/sys/arduino/u8g2_page_buffer/HelloWorld/HelloWorld.ino b/sys/arduino/u8g2_page_buffer/HelloWorld/HelloWorld.ino index 351d744c..264edbff 100644 --- a/sys/arduino/u8g2_page_buffer/HelloWorld/HelloWorld.ino +++ b/sys/arduino/u8g2_page_buffer/HelloWorld/HelloWorld.ino @@ -59,7 +59,7 @@ // Please update the pin numbers according to your setup. Use U8X8_PIN_NONE if the reset pin is not connected //U8G2_SSD1306_128X64_NONAME_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); //U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 12, /* dc=*/ 4, /* reset=*/ 6); // Arduboy (Production, Kickstarter Edition) -U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); +//U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); //U8G2_SSD1306_128X64_NONAME_1_3W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* reset=*/ 8); //U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* reset=*/ 8); //U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // All Boards without Reset of the Display diff --git a/sys/arduino/u8g2_page_buffer/U8g2Logo/U8g2Logo.ino b/sys/arduino/u8g2_page_buffer/U8g2Logo/U8g2Logo.ino index 7195d3ff..1f30110c 100644 --- a/sys/arduino/u8g2_page_buffer/U8g2Logo/U8g2Logo.ino +++ b/sys/arduino/u8g2_page_buffer/U8g2Logo/U8g2Logo.ino @@ -56,7 +56,7 @@ // U8g2 Contructor List (Picture Loop Page Buffer) // The complete list is available here: https://github.com/olikraus/u8g2/wiki/u8g2setupcpp // Please update the pin numbers according to your setup. Use U8X8_PIN_NONE if the reset pin is not connected -U8G2_SSD1306_128X64_NONAME_1_4W_SW_SPI u8g2(U8G2_MIRROR, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); +//U8G2_SSD1306_128X64_NONAME_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); //U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 12, /* dc=*/ 4, /* reset=*/ 6); // Arduboy (Production, Kickstarter Edition) //U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); //U8G2_SSD1306_128X64_NONAME_1_3W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* reset=*/ 8); diff --git a/sys/arduino/u8x8/FlipMode/FlipMode.ino b/sys/arduino/u8x8/FlipMode/FlipMode.ino index fe56618d..848a5be9 100644 --- a/sys/arduino/u8x8/FlipMode/FlipMode.ino +++ b/sys/arduino/u8x8/FlipMode/FlipMode.ino @@ -70,7 +70,7 @@ //U8X8_ST7565_NHD_C12832_4W_HW_SPI u8x8(/* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); //U8X8_UC1610_EA_DOGXL160_4W_SW_SPI u8x8(/* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE); //U8X8_UC1610_EA_DOGXL160_4W_HW_SPI u8x8(/* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE); - +//U8X8_UC1611_EA_DOGM240_HW_I2C u8x8(/* reset=*/ 8); // Due, I2C, DOGM240 Test Board // End of constructor list diff --git a/sys/arduino/u8x8/GraphicsTest/GraphicsTest.ino b/sys/arduino/u8x8/GraphicsTest/GraphicsTest.ino index 8af98b09..fc2245de 100644 --- a/sys/arduino/u8x8/GraphicsTest/GraphicsTest.ino +++ b/sys/arduino/u8x8/GraphicsTest/GraphicsTest.ino @@ -49,7 +49,7 @@ // U8x8 Contructor List // The complete list is available here: https://github.com/olikraus/u8g2/wiki/u8x8setupcpp // Please update the pin numbers according to your setup. Use U8X8_PIN_NONE if the reset pin is not connected -U8X8_SSD1306_128X64_NONAME_4W_SW_SPI u8x8(/* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); +//U8X8_SSD1306_128X64_NONAME_4W_SW_SPI u8x8(/* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); //U8X8_SSD1306_128X64_NONAME_4W_HW_SPI u8x8(/* cs=*/ 6, /* dc=*/ 4, /* reset=*/ 12); // Arduboy (DevKit) //U8X8_SSD1306_128X64_NONAME_4W_HW_SPI u8x8(/* cs=*/ 12, /* dc=*/ 4, /* reset=*/ 6); // Arduboy 10 (Production, Kickstarter Edition) //U8X8_SSD1306_128X64_NONAME_4W_HW_SPI u8x8(/* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); @@ -73,7 +73,7 @@ U8X8_SSD1306_128X64_NONAME_4W_SW_SPI u8x8(/* clock=*/ 13, /* data=*/ 11, /* cs=* //U8X8_ST7565_NHD_C12832_4W_HW_SPI u8x8(/* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); //U8X8_UC1610_EA_DOGXL160_4W_SW_SPI u8x8(/* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE); //U8X8_UC1610_EA_DOGXL160_4W_HW_SPI u8x8(/* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE); - +//U8X8_UC1611_EA_DOGM240_HW_I2C u8x8(/* reset=*/ 8); // Due, I2C, DOGM240 Test Board // End of constructor list diff --git a/sys/arduino/u8x8/HelloWorld/HelloWorld.ino b/sys/arduino/u8x8/HelloWorld/HelloWorld.ino index 6159f420..26e19bdb 100644 --- a/sys/arduino/u8x8/HelloWorld/HelloWorld.ino +++ b/sys/arduino/u8x8/HelloWorld/HelloWorld.ino @@ -59,7 +59,7 @@ //U8X8_SSD1306_128X64_NONAME_6800 u8x8(13, 11, 2, 3, 4, 5, 6, A4, /*enable=*/ 7, /*cs=*/ 10, /*dc=*/ 9, /*reset=*/ 8); //U8X8_SSD1306_128X64_NONAME_8080 u8x8(13, 11, 2, 3, 4, 5, 6, A4, /*enable=*/ 7, /*cs=*/ 10, /*dc=*/ 9, /*reset=*/ 8); //U8X8_SSD1322_NHD_256X64_4W_SW_SPI u8x8(/* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); -U8X8_SSD1322_NHD_256X64_4W_HW_SPI u8x8(/* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); +//U8X8_SSD1322_NHD_256X64_4W_HW_SPI u8x8(/* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); //U8X8_SSD1325_NHD_128X64_4W_SW_SPI u8x8(/* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); //U8X8_SSD1325_NHD_128X64_4W_HW_SPI u8x8(/* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); //U8X8_UC1701_EA_DOGS102_4W_SW_SPI u8x8(/* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); @@ -70,15 +70,15 @@ U8X8_SSD1322_NHD_256X64_4W_HW_SPI u8x8(/* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); //U8X8_ST7565_NHD_C12832_4W_HW_SPI u8x8(/* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); //U8X8_UC1610_EA_DOGXL160_4W_SW_SPI u8x8(/* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE); //U8X8_UC1610_EA_DOGXL160_4W_HW_SPI u8x8(/* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE); - +U8X8_UC1611_EA_DOGM240_HW_I2C u8x8(/* reset=*/ 8); // Due, I2C, DOGM240 Test Board // End of constructor list void setup(void) { - pinMode(16, OUTPUT); - digitalWrite(16, 0); + //pinMode(16, OUTPUT); + //digitalWrite(16, 0); u8x8.begin(); u8x8.setPowerSave(0); } diff --git a/sys/arduino/u8x8/MessageBox/MessageBox.ino b/sys/arduino/u8x8/MessageBox/MessageBox.ino index 70ab7360..3c54cd00 100644 --- a/sys/arduino/u8x8/MessageBox/MessageBox.ino +++ b/sys/arduino/u8x8/MessageBox/MessageBox.ino @@ -70,7 +70,7 @@ //U8X8_ST7565_NHD_C12832_4W_HW_SPI u8x8(/* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); //U8X8_UC1610_EA_DOGXL160_4W_SW_SPI u8x8(/* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE); //U8X8_UC1610_EA_DOGXL160_4W_HW_SPI u8x8(/* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE); - +//U8X8_UC1611_EA_DOGM240_HW_I2C u8x8(/* reset=*/ 8); // Due, I2C, DOGM240 Test Board // End of constructor list diff --git a/tools/codebuild/codebuild.c b/tools/codebuild/codebuild.c index 35614c34..90183029 100644 --- a/tools/codebuild/codebuild.c +++ b/tools/codebuild/codebuild.c @@ -221,6 +221,16 @@ struct controller controller_list[] = { NULL } } }, + + { + "uc1611", 30, 8, "u8g2_ll_hvline_vertical_top_lsb", "u8x8_cad_uc16xx_i2c", "i2c", COM_I2C, + "", /* is_generate_u8g2_class= */ 1, + { + { "ea_dogm240" }, + { NULL } + } + }, + { "st7565", 16, 8, "u8g2_ll_hvline_vertical_top_lsb", "u8x8_cad_001", "", COM_4WSPI|COM_3WSPI|COM_6800|COM_8080, "", /* is_generate_u8g2_class= */ 1, diff --git a/tools/inoupdate/u8x8.ino b/tools/inoupdate/u8x8.ino index ae13d551..6a26dff6 100644 --- a/tools/inoupdate/u8x8.ino +++ b/tools/inoupdate/u8x8.ino @@ -24,5 +24,5 @@ //U8X8_ST7565_NHD_C12832_4W_HW_SPI u8x8(/* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); //U8X8_UC1610_EA_DOGXL160_4W_SW_SPI u8x8(/* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE); //U8X8_UC1610_EA_DOGXL160_4W_HW_SPI u8x8(/* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE); - +//U8X8_UC1611_EA_DOGM240_HW_I2C u8x8(/* reset=*/ 8); // Due, I2C, DOGM240 Test Board