This commit is contained in:
kraus 2018-04-05 23:37:03 +02:00
parent f08ff974c0
commit 454a23a33c
4 changed files with 204 additions and 1 deletions

View File

@ -172,4 +172,7 @@ https://github.com/olikraus/u8g2 ChangeLog
2018-xx-xx v2.22.x olikraus@gmail.com
* Added SSD1306 128x64 Adafruit OLED (issue 521)
* Added Winstart SSD1306 64x48 OLED variant (issue 522)
* Added support for JLX240160 (issue 556)
* Added open iconic icons (issue 535)

View File

@ -791,6 +791,7 @@ uint8_t u8x8_d_st7567_pi_132x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void
uint8_t u8x8_d_st7567_jlx12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
uint8_t u8x8_d_st7588_jlx12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
uint8_t u8x8_d_st75256_jlx256128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
uint8_t u8x8_d_st75256_jlx256160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
uint8_t u8x8_d_st75256_jlx240160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
uint8_t u8x8_d_st75256_jlx25664(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
uint8_t u8x8_d_st75256_jlx172104(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);

View File

@ -794,7 +794,6 @@ uint8_t u8x8_d_st75256_jlx240160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, voi
u8x8_cad_SendCmd(u8x8, 0x05c );
/* this procedure assumes, that the overall width is 172 */
do
{
c = ((u8x8_tile_t *)arg_ptr)->cnt;
@ -863,3 +862,195 @@ uint8_t u8x8_d_st75256_jlx240160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, voi
}
/*=============================================*/
/* JLX256160 */
static const u8x8_display_info_t u8x8_st75256_256x160_display_info =
{
/* chip_enable_level = */ 0,
/* chip_disable_level = */ 1,
/* post_chip_enable_wait_ns = */ 20,
/* pre_chip_disable_wait_ns = */ 20,
/* reset_pulse_width_ms = */ 5,
/* post_reset_wait_ms = */ 5, /**/
/* sda_setup_time_ns = */ 20, /* */
/* sck_pulse_width_ns = */ 40, /* */
/* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */
/* spi_mode = */ 0, /* active high, rising edge */
/* i2c_bus_clock_100kHz = */ 4, /* 400KHz */
/* data_setup_time_ns = */ 15,
/* write_pulse_width_ns = */ 70,
/* tile_width = */ 30,
/* tile_hight = */ 20,
/* default_x_offset = */ 16, /* x offset in flipmode 0 */
/* flipmode_x_offset = */ 0, /* */
/* pixel_width = */ 240,
/* pixel_height = */ 160
};
static const uint8_t u8x8_d_st75256_256x160_init_seq[] = {
U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */
U8X8_DLY(20),
U8X8_C( 0x030 ), /* select 00 commands */
U8X8_C( 0x094 ), /* sleep out */
//U8X8_C( 0x030 ), /* select 00 commands */
U8X8_C( 0x0ae ), /* display off */
U8X8_C( 0x031 ), /* select 01 commands */
U8X8_CA( 0x0d7, 0x09f ), /* disable auto read */
//U8X8_C( 0x031 ), /* select 01 commands */
U8X8_C( 0x032 ), /* analog circuit set */
U8X8_A( 0x000 ), /* code example: OSC Frequency adjustment */
U8X8_A( 0x001 ), /* Frequency on booster capacitors 1 = 6KHz? */
U8X8_A( 0x000 ), /* Bias: 1: 1/13, 2: 1/12, 3: 1/11, 4:1/10, 5:1/9 */
//U8X8_C( 0x031 ), /* select 01 commands */
U8X8_C( 0x020 ), /* gray levels */
U8X8_A( 0x01 ),
U8X8_A( 0x03 ),
U8X8_A( 0x05 ),
U8X8_A( 0x07 ),
U8X8_A( 0x09),
U8X8_A( 0x0b ),
U8X8_A( 0x0d ),
U8X8_A( 0x10 ),
U8X8_A( 0x11 ),
U8X8_A( 0x13 ),
U8X8_A( 0x15 ),
U8X8_A( 0x17 ),
U8X8_A( 0x19 ),
U8X8_A( 0x1b ),
U8X8_A( 0x1d ),
U8X8_A( 0x1f ),
U8X8_C( 0x030 ), /* select 00 commands */
U8X8_CAA(0x75, 0, 0x4f), /* row range */
U8X8_CAA(0x15, 0, 255), /* col range */
//U8X8_C( 0x030 ), /* select 00 commands */
U8X8_CA( 0xbc, 0x02 ), /* data scan dir */
U8X8_A( 0xa6 ), /* ??? */
//U8X8_C( 0x030 ), /* select 00 commands */
U8X8_C( 0x00c ), /* data format LSB top */
//U8X8_C( 0x030 ), /* select 00 commands */
U8X8_C( 0xca ), /* display control, 3 args follow */
U8X8_A( 0x00 ), /* 0x00: no clock division, 0x04: devide clock */
U8X8_A( 159 ), /* 1/160 duty value from the DS example code */
U8X8_A( 0x20 ), /* nline off */
//U8X8_C( 0x030 ), /* select 00 commands */
U8X8_CA( 0x0f0, 0x010 ), /* monochrome mode = 0x010*/
//U8X8_C( 0x030 ), /* select 00 commands */
U8X8_CAA( 0x81, 0x18, 0x04 ), /* Volume control */
//U8X8_C( 0x030 ), /* select 00 commands */
U8X8_CA( 0x020, 0x00b ), /* Power control: Regulator, follower & booster on */
U8X8_DLY(100),
U8X8_END_TRANSFER(), /* disable chip */
U8X8_END() /* end of sequence */
};
uint8_t u8x8_d_st75256_jlx256160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
{
uint8_t x, c;
uint8_t *ptr;
switch(msg)
{
case U8X8_MSG_DISPLAY_DRAW_TILE:
u8x8_cad_StartTransfer(u8x8);
x = ((u8x8_tile_t *)arg_ptr)->x_pos;
x *= 8;
u8x8_cad_SendCmd(u8x8, 0x030 ); /* select command set */
u8x8_cad_SendCmd(u8x8, 0x075 ); /* row */
if ( u8x8->x_offset == 0 ) /* 0 means flip mode 1 */
u8x8_cad_SendArg(u8x8, 1+(((u8x8_tile_t *)arg_ptr)->y_pos));
else
u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos));
u8x8_cad_SendArg(u8x8, 0x04f);
//u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos));
u8x8_cad_SendCmd(u8x8, 0x015 ); /* col */
u8x8_cad_SendArg(u8x8, x+u8x8->x_offset);
u8x8_cad_SendArg(u8x8, 255);
u8x8_cad_SendCmd(u8x8, 0x05c );
do
{
c = ((u8x8_tile_t *)arg_ptr)->cnt;
ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr;
/* SendData can not handle more than 255 bytes, treat c > 31 correctly */
if ( c > 31 )
{
u8x8_cad_SendData(u8x8, 248, ptr); /* 31*8=248 */
ptr+=248;
c -= 31;
}
u8x8_cad_SendData(u8x8, c*8, ptr);
arg_int--;
} while( arg_int > 0 );
u8x8_cad_EndTransfer(u8x8);
return 1;
case U8X8_MSG_DISPLAY_SETUP_MEMORY:
//u8x8_SetI2CAddress(u8x8, 0x078); /* lowest I2C adr of the ST75256 */
u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st75256_256x160_display_info);
return 1;
case U8X8_MSG_DISPLAY_INIT:
u8x8_d_helper_display_init(u8x8);
u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x160_init_seq);
return 1;
case U8X8_MSG_DISPLAY_SET_POWER_SAVE:
if ( arg_int == 0 )
u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave0_seq);
else
u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave1_seq);
return 1;
case U8X8_MSG_DISPLAY_SET_FLIP_MODE:
if ( arg_int == 0 )
{
u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip0_seq);
u8x8->x_offset = u8x8->display_info->default_x_offset;
}
else
{
u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip1_seq);
u8x8->x_offset = u8x8->display_info->flipmode_x_offset;
}
return 1;
#ifdef U8X8_WITH_SET_CONTRAST
case U8X8_MSG_DISPLAY_SET_CONTRAST:
u8x8_cad_StartTransfer(u8x8);
u8x8_cad_SendCmd(u8x8, 0x030 );
u8x8_cad_SendCmd(u8x8, 0x081 ); /* there are 9 bit for the volume control */
u8x8_cad_SendArg(u8x8, (arg_int & 0x1f)<<1 ); /* lower 6 bit */
u8x8_cad_SendArg(u8x8, (arg_int>>5)); /* upper 3 bit */
u8x8_cad_EndTransfer(u8x8);
return 1;
#endif
}
return 0;
}

View File

@ -1,8 +1,16 @@
STM32L0 Cortex-M0/M0+
STM32L011 access line 2K RAM 2x Timer
STM32L031 access line 8K RAM 3x Timer
STM32L0x1 access line
STM32L0x1K access line, 32 Pins (LQFP)
STM32L0x1F access line, 20 Pins (TSSOP20)
STM32L0x1F3 8KB Flash
STM32L0x1F4 16KB Flash
STM32L011F4P6
STM32L0x1F6 32KB Flash
STM32L0x2 USB+DAC
STM32L1 Cortex-M3
STM32L4 Cortex-M4