ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
25 ноября
318535 Топик полностью
Cepгeй Бopщ (28.03.2012 16:39 - 16:42, просмотров: 160) ответил FDA на Кто работал с ЖКИ WDX0006-TGH-#01 (контроллер Sitronix ST7549)? Я что-то не понял с протоколом I2C. Получается что после передачи адреса перед передачей control byte нужно передат ьещё один бит??? Ни у кого примерчика нет для этого контроллера?
С 7548 работал, не было там такого. И в этом такая же диаграма. Где вы лишний бит увидели? В контрольном байте два старших бита несут полезную информацию и 6 незначащих. Примерчик вот такой, если поможет: namespace ns_st7548 { static uint8_t const I2C_address = 0x78 >> 1; enum mode_t { CMD_TILL_STOP = 0x00, DATA_TILL_STOP = 0x40 }; enum command_t { // General commands FUNCTION_SET = 0x20, SET_Y = 0x40, SET_X = 0x80, // Basic commands DISPLAY_CONTROL = 0x08, SET_VO_RANGE = 0x04, // Extended commands DISPLAY_CONFIG = 0x08, SET_BIAS = 0x10, SET_Vo = 0x80, }; enum func_set_t { // FUNCTION_SET XDIRECTION_NORMAL = (0 << 4), // MX = 0 XDIRECTION_REVERSE = (1 << 4), // MX = 1 YDIRECTION_NORMAL = (0 << 3), // MY = 0 YDIRECTION_REVERSE = (1 << 3), // MY = 1 POWER_ON = (0 << 2), // PD = 0 POWER_DOWN = (1 << 2), // PD = 1 HORIZONTAL_ADDRESSING = (0 << 1), // V = 0 VERTICAL_ADDRESSING = (1 << 1), // V = 1 BASIC_CMD_SET = (0 << 0), // H = 0 EXTENDED_CMD_SET = (1 << 0), // H = 1 }; enum disp_ctrl_t { // DISPLAY_CONTROL BLANK = (0 << 2) | (0 << 0), // D = 0, E = 0 NORMAL = (1 << 2) | (0 << 0), // D = 1, E = 0 ALL_ON = (0 << 2) | (1 << 0), // D = 0, E = 1 INVERSE = (1 << 2) | (1 << 0), // D = 1, E = 1 }; enum vo_range_t { // SET_VO_RANGE VO_LOW = (0 << 0), // PRS = 0 VO_HIGH = (1 << 0), // PRS = 1 }; enum cfg_t { // DISPLAY_CONFIG MSB_ON_TOP = (0 << 2), LSB_ON_TOP = (1 << 2), }; enum bias_t { // SET_BIAS BIAS_11, BIAS_10, BIAS_9, BIAS_8, BIAS_7, BIAS_6, BIAS_5, BIAS_4, }; } using namespace ns_st7548; #include "i2c.h" static i2c_t<I2C_address, USCI0, DMA2 > I2C; uint8_t const st7548_t::init_cmd[] = { FUNCTION_SET | XDIRECTION_NORMAL | YDIRECTION_NORMAL | POWER_ON | HORIZONTAL_ADDRESSING | EXTENDED_CMD_SET // H = 1 , DISPLAY_CONFIG | LSB_ON_TOP // DO = 1 , SET_BIAS | BIAS_9 // 64 rows => 1/64 duty cycle , SET_Vo | 0xFF // Vo = max at 0xFF // | 0x64 // Vo = max at 0xFF , FUNCTION_SET | XDIRECTION_NORMAL | YDIRECTION_NORMAL | POWER_ON | HORIZONTAL_ADDRESSING | BASIC_CMD_SET // H=0 , SET_VO_RANGE | VO_HIGH // Vo gen ON(PRS=1) , DISPLAY_CONTROL | NORMAL // D=1 E=0 , normal mode , SET_Y | 0x00 // Y=0 , SET_X | 0x00 // X=0 }; //*************************************** void st7548_t::power_on() { ON(LCD_SUPPLY); ON(LCD_RESET); { uint8_t volatile i = 0; while (--i); } // delay_ms(1); OFF(LCD_RESET); { uint8_t volatile i = 0; while (--i); } // delay_ms(10); //*************************************************** //* Lcd init commands * //*************************************************** I2C.on(); if(I2C.write(CMD_TILL_STOP, init_cmd, sizeof(init_cmd))) { PoweredOn = true; Buffer.Update.Left = 0; Buffer.Update.Right = SIZE_X; Buffer.Update.Bottom = 0; Buffer.Update.Top = SIZE_Y; } }