Форум РадиоКот • Просмотр темы - LCD ILI9481 16Bit. Модуль с Алиэкспресс
Сообщения без ответов | Активные темы
Страница 1 из 1
[ Сообщений: 8 ]
Автор
Сообщение
isx
Заголовок сообщения: LCD ILI9481 16Bit. Модуль с Алиэкспресс
Добавлено: Вс сен 03, 2017 20:14:16
Поставщик валерьянки для Кота
Карма: 11
Рейтинг сообщений: 26
Зарегистрирован: Вс июн 26, 2011 20:03:21Сообщений: 2310
Рейтинг сообщения: 0
Приветствую форумчан!
Пришел с полгода назад такой дисплейчик, только надпись на этикетке ILI9481 (свою упаковку не могу сфоткать - под рукой ее нет):
Решил попробовать его запустить, пока появилась капля свободного времени, но он не хочет проходить инициализацию.
Делаю ногодрыгом, для лучшего понимания. Работаю от внутреннего кварца. Камень - STM32F303VCT6 (на DiacoveryF3).
Линия D0-D15 соединена с портом E, пины управления с портом D.
Функции посылки команд и данных:
Спойлер Код:
oid WrCmd (uint16_t Reg_Value) { if (Data_PINs_State == 1) {ili9481_PINs_Data_Out();} ili9481_LCD_CS_DISABLE; //ili9481_LCD_RD_DISABLE; ili9481_LCD_WR_DISABLE; ili9481_LCD_CD_DATA; ili9481_LCD_CS_ENABLE; ili9481_LCD_CD_COMMAND; ili9481_SET_DATA = Reg_Value; ili9481_WR_STROBE; ili9481_LCD_CS_DISABLE; } void WrDat (uint16_t Data_for_send) { if (Data_PINs_State == 1) {ili9481_PINs_Data_Out();} ili9481_LCD_CS_DISABLE; //ili9481_LCD_RD_DISABLE; ili9481_LCD_WR_DISABLE; ili9481_LCD_CD_COMMAND; ili9481_LCD_CS_ENABLE; ili9481_LCD_CD_DATA; ili9481_SET_DATA = Data_for_send; ili9481_WR_STROBE; ili9481_LCD_CS_DISABLE; } void ili9481_Send_Data (uint16_t Reg_Value, uint8_t Data_For_Send) { if (Data_PINs_State == 1) {ili9481_PINs_Data_Out();} ili9481_LCD_CS_DISABLE; //ili9481_LCD_RD_DISABLE; ili9481_LCD_WR_DISABLE; ili9481_LCD_CD_DATA; ili9481_LCD_CS_ENABLE; ili9481_LCD_CD_COMMAND; ili9481_SET_DATA = Reg_Value; ili9481_WR_STROBE; ili9481_LCD_CS_DISABLE; ili9481_LCD_CS_ENABLE; ili9481_LCD_CD_DATA; ili9481_SET_DATA = Data_For_Send; ili9481_WR_STROBE; ili9481_LCD_CS_DISABLE; }
Функции настройки портов:
Спойлер Код:
void ili9481_PINs_Data_In(void) { GPIOE->MODER = 0x00000000; /*; GPIOA->CRL &= ~( GPIO_CRL_MODE0 // D0 |GPIO_CRL_MODE1 // D1 |GPIO_CRL_MODE2 // D2 |GPIO_CRL_MODE3 // D3 |GPIO_CRL_MODE4 // D4 |GPIO_CRL_MODE5 // D5 |GPIO_CRL_MODE6 // D6 |GPIO_CRL_MODE7 // D7 ); GPIOA->CRL &= ~( GPIO_CRL_CNF0 |GPIO_CRL_CNF1 |GPIO_CRL_CNF2 |GPIO_CRL_CNF3 |GPIO_CRL_CNF4 |GPIO_CRL_CNF5 |GPIO_CRL_CNF6 |GPIO_CRL_CNF7 ); GPIOA->CRL |= ( GPIO_CRL_CNF0_0 |GPIO_CRL_CNF1_0 |GPIO_CRL_CNF2_0 |GPIO_CRL_CNF3_0 |GPIO_CRL_CNF4_0 |GPIO_CRL_CNF5_0 |GPIO_CRL_CNF6_0 |GPIO_CRL_CNF7_0 ); */ Data_PINs_State = 1; GPIOE->ODR &= 0x0000; } void ili9481_PINs_Command_Init(void) { GPIOD->MODER &= ~( //GPIO_MODER_MODER8 // rd GPIO_MODER_MODER1 // wr |GPIO_MODER_MODER0 // rs |GPIO_MODER_MODER2 // cs |GPIO_MODER_MODER3 // rst ); GPIOD->MODER |= ( //GPIO_MODER_MODER8_0 // rd GPIO_MODER_MODER1_0 // wr |GPIO_MODER_MODER0_0 // rs |GPIO_MODER_MODER2_0 // cs |GPIO_MODER_MODER3_0 // rst ); }
Дефайны:
Спойлер Код:
#define LCD_NOOP 0x00 /* No Operation*/ #define LCD_SWRESET 0x01 /* Software Reset */ #define LCD_RDDPM 0x0A /* Read Display Power Mode */ #define LCD_RDDMADCTL 0x0B /* Read Display MADCTL */ #define LCD_RDDCOLMOD 0x0C /* Read Display Pixel Format */ #define LCD_RDDIM 0x0D /* Read Display Image Format */ #define LCD_RDDSM 0x0E /* Read Display Signal Mode */ #define LCD_RDDSDR 0x0F /* Read Display Self-Diagnostic Result */ #define LCD_SPLIN 0x10 /* Enter Sleep Mode */ #define LCD_SLEEP_OUT 0x11 /* Sleep out register */ #define LCD_PTLON 0x12 /* Partial Mode ON */ #define LCD_NORMAL_MODE_ON 0x13 /* Normal Display Mode ON */ #define LCD_DINVOFF 0x20 /* Display Inversion OFF */ #define LCD_DINVON 0x21 /* Display Inversion ON */ #define LCD_GAMMA 0x26 /* Gamma register */ #define LCD_DISPLAY_OFF 0x28 /* Display off register */ #define LCD_DISPLAY_ON 0x29 /* Display on register */ #define LCD_COLUMN_ADDR 0x2A /* Column address register */ #define LCD_PAGE_ADDR 0x2B /* Page address register */ #define LCD_GRAM 0x2C /* GRAM register */ #define LCD_RGBSET 0x2D /* Color SET */ #define LCD_RAMRD 0x2E /* Memory Read */ #define LCD_PLTAR 0x30 /* Partial Area */ #define LCD_VSCRDEF 0x33 /* Vertical Scrolling Definition */ #define LCD_TEOFF 0x34 /* Tearing Effect Line OFF */ #define LCD_TEON 0x35 /* Tearing Effect Line ON */ #define LCD_MAC 0x36 /* Memory Access Control register*/ #define LCD_VSCRSADD 0x37 /* Vertical Scrolling Start Address */ #define LCD_IDMOFF 0x38 /* Idle Mode OFF */ #define LCD_IDMON 0x39 /* Idle Mode ON */ #define LCD_PIXEL_FORMAT 0x3A /* Pixel Format register */ #define LCD_WRITE_MEM_CONTINUE 0x3C /* Write Memory Continue */ #define LCD_READ_MEM_CONTINUE 0x3E /* Read Memory Continue */ #define LCD_SET_TEAR_SCANLINE 0x44 /* Set Tear Scanline */ #define LCD_GET_SCANLINE 0x45 /* Get Scanline */ #define LCD_READ_DDB_START 0xA1 /* Read DDB start */ /* Level 2 Commands */ #define LCD_CMDACCPRTC 0xB0 /* Command Access Protect */ #define LCD_FRMCTR 0xB3 /* Frame Memory Access and Interface setting */ #define LCD_DMFMCTR 0xB4 /* Display Mode and Frame Memory Write Mode setting */ #define LCD_DEVCODERD 0xBF /* Device code read */ #define LCD_PANEL_DRV_CTL 0xC0 /* Panel Driving Setting */ #define LCD_NORMAL_TIMING_WR 0xC1 /* Display Timing Setting for Normal Mode */ #define LCD_PARTIAL_TIMING_WR 0xC2 /* Display Timing Setting for Partial Mode */ #define LCD_IDLE_TIMING_WR 0xC3 /* Display Timing Setting for Idle Mode */ #define LCD_FR_INV_CTL 0xC5 /* Frame rate and Inversion Control */ #define LCD_INTERFACE 0xC6 /* Interface Control */ #define LCD_GAMMAWR 0xC8 /* Gamma Setting */ #define LCD_POWER 0xD0 /* POWER CONTROL */ #define LCD_VCOM 0xD1 /* VCOM Control */ #define LCD_NORMAL_PWR_WR 0xD2 /* Power Setting for Normal Mode */ #define LCD_PARTIAL_PWR_WR 0xD3 /* Power Setting for Partial Mode */ #define LCD_IDLE_PWR_WR 0xD4 /* Power Setting for Idle Mode */ #define LCD_NVMEMWR 0xE0 /* NV Memory Write */ #define LCD_NVMEMCTRL 0xE1 /* NV Memory Control */ #define LCD_NVMEMRD 0xE2 /* NV Memory Status */ #define LCD_NVMEMPRT 0xE3 /* NV Memory Protection */ #define LCD_EEPROMWR_ENABLE 0xE8 /* EEPROM Write Enable */ #define LCD_EEPROMWR_DISABLE 0xE9 /* EEPROM Write Disable */ #define LCD_EEPROMWR 0xEA /* EEPROM Word Write */ #define LCD_EEPROMRD 0xEB /* EEPROM Word Read */ #define LCD_EEPROM_ADR_SET 0xEC /* EEPROM Address Set */ #define LCD_EEPROM_ERASE 0xED /* EEPROM Erase */ #define LCD_EEPROM_ERASE_ALL 0xEE /* EEPROM Erase All */ //#define ili9481_LCD_RD_ENABLE (GPIOD->BSRR |= GPIO_BSRR_BR_8)// Read data from LCD //#define ili9481_LCD_RD_DISABLE (GPIOD->BSRR |= GPIO_BSRR_BS_8) // #define ili9481_LCD_WR_ENABLE (GPIOD->BSRR |= GPIO_BSRR_BR_1) // Write data to LCD #define ili9481_LCD_WR_DISABLE (GPIOD->BSRR |= GPIO_BSRR_BS_1) // #define ili9481_LCD_CD_COMMAND (GPIOD->BSRR |= GPIO_BSRR_BR_0) // Command/Data selection. May be marked as LCD_RS, D/C, A0 or RS. #define ili9481_LCD_CD_DATA (GPIOD->BSRR |= GPIO_BSRR_BS_0) // Data - Hight. Commands - Low #define ili9481_LCD_CS_ENABLE (GPIOD->BSRR |= GPIO_BSRR_BR_2) // Chip Select. #define ili9481_LCD_CS_DISABLE (GPIOD->BSRR |= GPIO_BSRR_BS_2) // Active - LOW #define ili9481_LCD_RESET_ENABLE (GPIOD->BSRR |= GPIO_BSRR_BR_3) // Reset. #define ili9481_LCD_RESET_DISABLE (GPIOD->BSRR |= GPIO_BSRR_BS_3) // Active (LCD reset activation) - LOW #define ili9481_SET_DATA (GPIOE->ODR &= 0x0000); (GPIOE->BSRR) #define ili9481_READ_DATA (GPIOE->IDR & 0x0000) #define ili9481_WR_STROBE {ili9481_LCD_WR_ENABLE; ili9481_LCD_WR_DISABLE;}
Сама инициализация. В закоментированных блоках отображены все способы, которыми я пытался запустить. ВНИМАНИЕ! много кода:
Спойлер Код:
void ili9481_Init_Test (void) { ili9481_PINs_Command_Init(); ili9481_PINs_Data_Out(); _ili9481_Delay_ms(10); ili9481_LCD_RESET_ENABLE; _ili9481_Delay_ms(10); ili9481_LCD_RESET_DISABLE; _ili9481_Delay_ms(10); // Âûáðàëè äèñïëåé ili9481_LCD_CS_DISABLE; /* //LCD_FSMC_Config(); _ili9481_Delay_ms(50); //GPIO_SetBits(GPIOE, GPIO_Pin_1); ili9481_LCD_RESET_DISABLE; _ili9481_Delay_ms(20); //GPIO_ResetBits(GPIOE, GPIO_Pin_1); ili9481_LCD_RESET_ENABLE; _ili9481_Delay_ms(20); //GPIO_SetBits(GPIOE, GPIO_Pin_1); ili9481_LCD_RESET_DISABLE; _ili9481_Delay_ms(20);; */ /* WrCmd(0x11); _ili9481_Delay_ms(20); //WrCmd(0xD0); ili9481_Send_Data(0xD0, 0x07); ili9481_Send_Data(0xD0, 0x42); ili9481_Send_Data(0xD0, 0x18); //WrCmd(0xD1); ili9481_Send_Data(0xD1, 0x00); ili9481_Send_Data(0xD1, 0x07); ili9481_Send_Data(0xD1, 0x10); //WrCmd(0xD2); ili9481_Send_Data(0xD2, 0x01); ili9481_Send_Data(0xD2, 0x02); //WrCmd(0xC0); ili9481_Send_Data(0xC0, 0x10); ili9481_Send_Data(0xC0, 0x3B); ili9481_Send_Data(0xC0, 0x00); ili9481_Send_Data(0xC0, 0x02); ili9481_Send_Data(0xC0, 0x11); //WrCmd(0xC5); ili9481_Send_Data(0xC5, 0x03); //WrCmd(0xC8); ili9481_Send_Data(0xC8, 0x00); ili9481_Send_Data(0xC8, 0x32); ili9481_Send_Data(0xC8, 0x36); ili9481_Send_Data(0xC8, 0x45); ili9481_Send_Data(0xC8, 0x06); ili9481_Send_Data(0xC8, 0x16); ili9481_Send_Data(0xC8, 0x37); ili9481_Send_Data(0xC8, 0x75); ili9481_Send_Data(0xC8, 0x77); ili9481_Send_Data(0xC8, 0x54); ili9481_Send_Data(0xC8, 0x0C); ili9481_Send_Data(0xC8, 0x00); //WrCmd(0x36); ili9481_Send_Data(0x36, 0x0A); //WrCmd(0x3A); ili9481_Send_Data(0x3A, 0x55); WrCmd(0x2A); ili9481_Send_Data(0x2A, 0x00); ili9481_Send_Data(0x2A, 0x00); ili9481_Send_Data(0x2A, 0x01); ili9481_Send_Data(0x2A, 0x3F); //WrCmd(0x2B); ili9481_Send_Data(0x2B, 0x00); ili9481_Send_Data(0x2B, 0x00); ili9481_Send_Data(0x2B, 0x01); ili9481_Send_Data(0x2B, 0xE0); _ili9481_Delay_ms(120); WrCmd(0x29); */ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /* WrCmd(0x11); _ili9481_Delay_ms(20); WrCmd(0xD0); ili9481_Send_Data(0xD0, 0x07); ili9481_Send_Data(0xD0, 0x42); ili9481_Send_Data(0xD0, 0x18); //WrCmd(0xD1, ); ili9481_Send_Data(0xD1, 0x00); ili9481_Send_Data(0xD1, 0x07); ili9481_Send_Data(0xD1, 0x10); //WrCmd(0xD2, ); ili9481_Send_Data(0xD2, 0x01); ili9481_Send_Data(0xD2, 0x02); //WrCmd(0xC0, ); ili9481_Send_Data(0xC0, 0x10); ili9481_Send_Data(0xC0, 0x3B); ili9481_Send_Data(0xC0, 0x00); ili9481_Send_Data(0xC0, 0x02); ili9481_Send_Data(0xC0, 0x11); //WrCmd(0xC5, ); ili9481_Send_Data(0xC5, 0x08); //WrCmd(0xC8, ); ili9481_Send_Data(0xC8, 0x00); ili9481_Send_Data(0xC8, 0x32); ili9481_Send_Data(0xC8, 0x36); ili9481_Send_Data(0xC8, 0x45); ili9481_Send_Data(0xC8, 0x06); ili9481_Send_Data(0xC8, 0x16); ili9481_Send_Data(0xC8, 0x37); ili9481_Send_Data(0xC8, 0x75); ili9481_Send_Data(0xC8, 0x77); ili9481_Send_Data(0xC8, 0x54); ili9481_Send_Data(0xC8, 0x0C); ili9481_Send_Data(0xC8, 0x00); //WrCmd(0x36, ); ili9481_Send_Data(0x36, 0x0a); // WrCmd(0x3A, ); ili9481_Send_Data(0x3A, 0x55); //WrCmd(0x2A, ); ili9481_Send_Data(0x2A, 0x00); ili9481_Send_Data(0x2A, 0x00); ili9481_Send_Data(0x2A, 0x01); ili9481_Send_Data(0x2A, 0x3F); ///WrCmd(0x2B, ); ili9481_Send_Data(0x2B, 0x00); ili9481_Send_Data(0x2B, 0x00); ili9481_Send_Data(0x2B, 0x01); ili9481_Send_Data(0x2B, 0xDF); _ili9481_Delay_ms(120); WrCmd(0x29); _ili9481_Delay_ms(25); */ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /* //WrCmd(0xB9,); // Enable extension command ili9481_Send_Data(0xB9,0xFF); ili9481_Send_Data(0xB9,0x83); ili9481_Send_Data(0xB9,0x57); _ili9481_Delay_ms(50); //WrCmd(0xB6,); //Set VCOM voltage ili9481_Send_Data(0xB6,0x2C); //0x52 for HSD 3.0" WrCmd(0x11); // Sleep off _ili9481_Delay_ms(200); //WrCmd(0x35,); // Tearing effect on ili9481_Send_Data(0x35,0x00); // Added parameter //WrCmd(0x3A,); // Interface pixel format ili9481_Send_Data(0x3A,0x55); // 16 bits per pixel //WrCmd(0xCC,); // Set panel characteristic //ili9481_Send_Data(0x09); // S960>S1, G1>G480, R-G-B, normally black //WrCmd(0xB3); // RGB interface //ili9481_Send_Data(0x43); //ili9481_Send_Data(0x00); //ili9481_Send_Data(0x06); //ili9481_Send_Data(0x06); //WrCmd(0xB1,); // Power control ili9481_Send_Data(0xB1,0x00); ili9481_Send_Data(0xB1,0x15); ili9481_Send_Data(0xB1,0x0D); ili9481_Send_Data(0xB1,0x0D); ili9481_Send_Data(0xB1,0x83); ili9481_Send_Data(0xB1,0x48); //WrCmd(0xC0,); // Does this do anything? ili9481_Send_Data(0xC0,0x24); ili9481_Send_Data(0xC0,0x24); ili9481_Send_Data(0xC0,0x01); ili9481_Send_Data(0xC0,0x3C); ili9481_Send_Data(0xC0,0xC8); ili9481_Send_Data(0xC0,0x08); //WrCmd(0xB4,); // Display cycle ili9481_Send_Data(0xB4,0x02); ili9481_Send_Data(0xB4,0x40); ili9481_Send_Data(0xB4,0x00); ili9481_Send_Data(0xB4,0x2A); ili9481_Send_Data(0xB4,0x2A); ili9481_Send_Data(0xB4,0x0D); ili9481_Send_Data(0xB4,0x4F); //WrCmd(0xE0,); // Gamma curve ili9481_Send_Data(0xE0,0x00); ili9481_Send_Data(0xE0,0x15); ili9481_Send_Data(0xE0,0x1D); ili9481_Send_Data(0xE0,0x2A); ili9481_Send_Data(0xE0,0x31); ili9481_Send_Data(0xE0,0x42); ili9481_Send_Data(0xE0,0x4C); ili9481_Send_Data(0xE0,0x53); ili9481_Send_Data(0xE0,0x45); ili9481_Send_Data(0xE0,0x40); ili9481_Send_Data(0xE0,0x3B); ili9481_Send_Data(0xE0,0x32); ili9481_Send_Data(0xE0,0x2E); ili9481_Send_Data(0xE0,0x28); ili9481_Send_Data(0xE0,0x24); ili9481_Send_Data(0xE0,0x03); ili9481_Send_Data(0xE0,0x00); ili9481_Send_Data(0xE0,0x15); ili9481_Send_Data(0xE0,0x1D); ili9481_Send_Data(0xE0,0x2A); ili9481_Send_Data(0xE0,0x31); ili9481_Send_Data(0xE0,0x42); ili9481_Send_Data(0xE0,0x4C); ili9481_Send_Data(0xE0,0x53); ili9481_Send_Data(0xE0,0x45); ili9481_Send_Data(0xE0,0x40); ili9481_Send_Data(0xE0,0x3B); ili9481_Send_Data(0xE0,0x32); ili9481_Send_Data(0xE0,0x2E); ili9481_Send_Data(0xE0,0x28); ili9481_Send_Data(0xE0,0x24); ili9481_Send_Data(0xE0,0x03); ili9481_Send_Data(0xE0,0x00); ili9481_Send_Data(0xE0,0x01); // WrCmd(0x36,); // MADCTL Memory access control ili9481_Send_Data(0x36,0x48); _ili9481_Delay_ms(20); WrCmd(0x21); //Display inversion on _ili9481_Delay_ms(20); WrCmd(0x29); // Display on _ili9481_Delay_ms(120); */ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /* WrCmd(0xB9); // Enable extension command WrDat(0xFF); WrDat(0x83); WrDat(0x57); _ili9481_Delay_ms(50); WrCmd(0xB6); //Set VCOM voltage WrDat(0x2C); //0x52 for HSD 3.0" WrCmd(0x11); // Sleep off _ili9481_Delay_ms(200); WrCmd(0x35); // Tearing effect on WrDat(0x00); // Added parameter WrCmd(0x3A); // Interface pixel format WrDat(0x55); // 16 bits per pixel //WrCmd(0xCC); // Set panel characteristic //WrDat(0x09); // S960>S1, G1>G480, R-G-B, normally black //WrCmd(0xB3); // RGB interface //WrDat(0x43); //WrDat(0x00); //WrDat(0x06); //WrDat(0x06); WrCmd(0xB1); // Power control WrDat(0x00); WrDat(0x15); WrDat(0x0D); WrDat(0x0D); WrDat(0x83); WrDat(0x48); WrCmd(0xC0); // Does this do anything? WrDat(0x24); WrDat(0x24); WrDat(0x01); WrDat(0x3C); WrDat(0xC8); WrDat(0x08); WrCmd(0xB4); // Display cycle WrDat(0x02); WrDat(0x40); WrDat(0x00); WrDat(0x2A); WrDat(0x2A); WrDat(0x0D); WrDat(0x4F); WrCmd(0xE0); // Gamma curve WrDat(0x00); WrDat(0x15); WrDat(0x1D); WrDat(0x2A); WrDat(0x31); WrDat(0x42); WrDat(0x4C); WrDat(0x53); WrDat(0x45); WrDat(0x40); WrDat(0x3B); WrDat(0x32); WrDat(0x2E); WrDat(0x28); WrDat(0x24); WrDat(0x03); WrDat(0x00); WrDat(0x15); WrDat(0x1D); WrDat(0x2A); WrDat(0x31); WrDat(0x42); WrDat(0x4C); WrDat(0x53); WrDat(0x45); WrDat(0x40); WrDat(0x3B); WrDat(0x32); WrDat(0x2E); WrDat(0x28); WrDat(0x24); WrDat(0x03); WrDat(0x00); WrDat(0x01); WrCmd(0x36); // MADCTL Memory access control WrDat(0x48); _ili9481_Delay_ms(20); WrCmd(0x21); //Display inversion on _ili9481_Delay_ms(20); WrCmd(0x29); // Display on _ili9481_Delay_ms(120); */ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /* // Configure HX8357-B display WrCmd(0x11); _ili9481_Delay_ms(20); WrCmd(0xD0); WrDat(0x07); WrDat(0x42); WrDat(0x18); WrCmd(0xD1); WrDat(0x00); WrDat(0x07); WrDat(0x10); WrCmd(0xD2); WrDat(0x01); WrDat(0x02); WrCmd(0xC0); WrDat(0x10); WrDat(0x3B); WrDat(0x00); WrDat(0x02); WrDat(0x11); WrCmd(0xC5); WrDat(0x08); WrCmd(0xC8); WrDat(0x00); WrDat(0x32); WrDat(0x36); WrDat(0x45); WrDat(0x06); WrDat(0x16); WrDat(0x37); WrDat(0x75); WrDat(0x77); WrDat(0x54); WrDat(0x0C); WrDat(0x00); WrCmd(0x36); WrDat(0x0a); WrCmd(0x3A); WrDat(0x55); WrCmd(0x2A); WrDat(0x00); WrDat(0x00); WrDat(0x01); WrDat(0x3F); WrCmd(0x2B); WrDat(0x00); WrDat(0x00); WrDat(0x01); WrDat(0xDF); _ili9481_Delay_ms(120); WrCmd(0x29); _ili9481_Delay_ms(25); // End of HX8357-B display configuration */ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /* // ili9486 WrCmd(0x01); WrDat(0x00); _ili9481_Delay_ms(50); WrCmd(0x28); WrDat(0x00); WrCmd(0xC0); // Power Control 1 WrDat(0x0d); WrDat(0x0d); WrCmd(0xC1); // Power Control 2 WrDat(0x43); WrDat(0x00); WrCmd(0xC2); // Power Control 3 WrDat(0x00); WrCmd(0xC5); // VCOM Control WrDat(0x00); WrDat(0x48); WrCmd(0xB6); // Display Function Control WrDat(0x00); WrDat(0x22); // 0x42 = Rotate display 180 deg. WrDat(0x3B); WrCmd(0xE0); // PGAMCTRL (Positive Gamma Control) WrDat(0x0f); WrDat(0x24); WrDat(0x1c); WrDat(0x0a); WrDat(0x0f); WrDat(0x08); WrDat(0x43); WrDat(0x88); WrDat(0x32); WrDat(0x0f); WrDat(0x10); WrDat(0x06); WrDat(0x0f); WrDat(0x07); WrDat(0x00); WrCmd(0xE1); // NGAMCTRL (Negative Gamma Control) WrDat(0x0F); WrDat(0x38); WrDat(0x30); WrDat(0x09); WrDat(0x0f); WrDat(0x0f); WrDat(0x4e); WrDat(0x77); WrDat(0x3c); WrDat(0x07); WrDat(0x10); WrDat(0x05); WrDat(0x23); WrDat(0x1b); WrDat(0x00); WrCmd(0x20); // Display Inversion OFF, 0x21 = ON WrCmd(0x36); // Memory Access Control WrDat(0x0A); WrCmd(0x3A); // Interface Pixel Format WrDat(0x55); WrCmd(0x11); _ili9481_Delay_ms(150); WrCmd(0x29); _ili9481_Delay_ms(25); */ }
Кроме белого света дисплея и быстрого строба подсветки в момент дергания ногой РЕСЕТА никаких признаков жизни.
В данный момент есть два сомнения:
1. Неверно отрабатывается алгоритм передачи команд и данных (в том числе последовательность передачи).
2. На порту E, на котором сидит линия данных D0-D15 посажены светодиоды моей DiscoveryF3. Могут ли они так влиять на работу?
P.S. Пол дня уже бьюсь с проблемой, но пока все безуспешно. Буду благодарен за любую помощь...
Вернуться наверх
Реклама
bolek
Заголовок сообщения: Re: LCD ILI9481 16Bit. Модуль с Алиэкспресс
Добавлено: Пн сен 04, 2017 13:25:52
Сверлит текстолит когтями
Карма: 4
Рейтинг сообщений: 260
Зарегистрирован: Пт авг 21, 2009 03:22:12Сообщений: 1111
Рейтинг сообщения: 0
А ардуины мега нет под рукой чтобы проверить? У меня модуль точно такой как на снимке нормально с мегой работает. И причина не в напряжении питания ли? Ардуина от 5 В, а STM от 3,3 В
Вернуться наверх
Реклама
isx
Заголовок сообщения: Re: LCD ILI9481 16Bit. Модуль с Алиэкспресс
Добавлено: Пн сен 04, 2017 20:00:30
Поставщик валерьянки для Кота
Карма: 11
Рейтинг сообщений: 26
Зарегистрирован: Вс июн 26, 2011 20:03:21Сообщений: 2310
Рейтинг сообщения: 0
Ардуинки под рукой нет. Так-то я дисплей от 5В запитал. Сама логика должна и от 3В наверное работать.
Вернуться наверх
Реклама
musor
Заголовок сообщения: Re: LCD ILI9481 16Bit. Модуль с Алиэкспресс
Добавлено: Пн сен 04, 2017 20:10:15
Друг Кота
Карма: 123
Рейтинг сообщений: 7955
Зарегистрирован: Сб сен 13, 2014 16:27:32Сообщений: 39199Откуда: СпиртоГонск созвездия Омега
Рейтинг сообщения: 0
ктож знает по идее лучше запитать дисплей тоже от 3в3... 3в6 вдруг поможет помнится похожие проблемы были с диспами от соток когда питание стыковали через 2-3 диода пока не уравняешь не работают
_________________Z Мудрость(Опыт и выдержка) приходит с годами. Все Ваши беды и проблемы, от недостатка знаний. Умный и у дурака научится, а дураку и .. Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Вернуться наверх
Реклама
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Подробнее>>
isx
Заголовок сообщения: Re: LCD ILI9481 16Bit. Модуль с Алиэкспресс
Добавлено: Пн сен 04, 2017 21:15:30
Поставщик валерьянки для Кота
Карма: 11
Рейтинг сообщений: 26
Зарегистрирован: Вс июн 26, 2011 20:03:21Сообщений: 2310
Рейтинг сообщения: 0
Так-то по параметрам должно работать нормально:
А что с алгоритмом последовательности передачи данных и команд?
У меня был другой дисплей на контроллере ILI 320х240. Там Инициализация проходила посылкой данных по конкретному адресу каждый раз, типо как тут:
Код:
........... ili9481_Send_Data(0xD0, 0x07); ili9481_Send_Data(0xD0, 0x42); ili9481_Send_Data(0xD0, 0x18); ...........
А по этому контроллеру все примеры идут с последовательной передачей команд и данных, по типу:
Код:
......... WrCmd(0xB1); // Power control WrDat(0x00); WrDat(0x15); WrDat(0x0D); .........
Вот меня и напрягает, правильно ли я дергаю пинами управления LCD...
Вернуться наверх
Реклама
Реклама
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Подробнее>>
bolek
Заголовок сообщения: Re: LCD ILI9481 16Bit. Модуль с Алиэкспресс
Добавлено: Ср сен 06, 2017 14:32:32
Сверлит текстолит когтями
Карма: 4
Рейтинг сообщений: 260
Зарегистрирован: Пт авг 21, 2009 03:22:12Сообщений: 1111
Рейтинг сообщения: 0
isx писал(а):
... Так-то я дисплей от 5В запитал. Сама логика должна и от 3В наверное работать...
На фотке: линейный стабилизатор 5В -> 3,3 В и куча преобразователей уровня (ПУ) для согласования сигналов.
Получается полная муйня: питание высокой стороны ПУ - 5 В, следовательно, сигналы от МК должны быть 5 вольтовыми.
Запитаешь LCD от 3,3 В - ХЗ какой там стоит стабилизатор и что он будет выдавать на выход вместо положенных 3,3 В.
Варианты:
1. Поэкспериментировать с питанием LCD - посмотреть на тип стабилизатора, и если повезло и стоит low drop снизить питание LCD до минимального значения в надежде, что ПУ будут нормально работать.
2. Перейти на питание LCD от 3,3 В - подать питание в обход стабилизатора, при этом уровни напряжений высокой и низкой стороны ПУ будут одинаковы. Если ПУ будет нормально работать - проблема решена. Если нет - подавать сигналы от МК напрямую на индикатор, минуя ПУ: самый муторный вариант - куча мелкого монтажа.
По любому нужно начинать с того, что осциллографом посмотреть на сигналы на выходе ПУ, правильно ли они передают сигнал от МК.
Вернуться наверх
Реклама
isx
Заголовок сообщения: Re: LCD ILI9481 16Bit. Модуль с Алиэкспресс
Добавлено: Чт сен 07, 2017 12:40:35
Поставщик валерьянки для Кота
Карма: 11
Рейтинг сообщений: 26
Зарегистрирован: Вс июн 26, 2011 20:03:21Сообщений: 2310
Рейтинг сообщения: 0
Попробовал запитать от 3В (3.3 под рукой сейчас нет) - результат тотже. Похоже надо ардуиноМегу заказать, чтоб разобраться с этим чудом китайской мысли. Есть подозрения, что пины нормально работают и с 5В и с 3В, так как при исзменении сигнала на выводе RST с единицы на ноль, в обоих случаях дисплей еле заметно моргает. Скорее всего происходит сброс.
Вернуться наверх
Реклама
isx
Заголовок сообщения: Re: LCD ILI9481 16Bit. Модуль с Алиэкспресс
Добавлено: Вт сен 19, 2017 19:25:38
Поставщик валерьянки для Кота
Карма: 11
Рейтинг сообщений: 26
Зарегистрирован: Вс июн 26, 2011 20:03:21Сообщений: 2310
Рейтинг сообщения: 0
Разобрался с дисплеем. С 3В линиями данных и управления работает отлично. Код инициализации:
Инициализация:
Спойлер Код:
void ili9481_Init (void) { ili9481_PINs_Command_Init(); ili9481_PINs_Data_Out(); ili9481_HW_Reset(); ili9481_Send_Command(0x01); ili9481_Send_Command(0x11); _ili9481_Delay_ms(50); ili9481_Send_Command(LCD_NORMAL_MODE_ON); //0x13 ili9481_Send_Command(0xD0); //(0xD0); ili9481_Send_Data(0x07); ili9481_Send_Data(0x43); //0x43 0x42 ili9481_Send_Data(0x15); //0x15 0x18 ili9481_Send_Command(LCD_VCOM); //(0xD1); ili9481_Send_Data(0x00); ili9481_Send_Data(0x07);//07 ili9481_Send_Data(0x10); ili9481_Send_Command(LCD_NORMAL_PWR_WR); //(0xD2); ili9481_Send_Data(0x01); ili9481_Send_Data(0x02); ili9481_Send_Command(LCD_PANEL_DRV_CTL); //(0xC0); ili9481_Send_Data(0x10); //0x10 ili9481_Send_Data(0x3B); ili9481_Send_Data(0x00); ili9481_Send_Data(0x02); ili9481_Send_Data(0x11); ili9481_Send_Command(LCD_FR_INV_CTL); //(0xC5); ili9481_Send_Data(0x01); ili9481_Send_Command(LCD_GAMMAWR); //(0xC8); ili9481_Send_Data(0x00); ili9481_Send_Data(0x32); ili9481_Send_Data(0x36); ili9481_Send_Data(0x45); ili9481_Send_Data(0x06); ili9481_Send_Data(0x16); ili9481_Send_Data(0x37); ili9481_Send_Data(0x75); ili9481_Send_Data(0x77); ili9481_Send_Data(0x54); ili9481_Send_Data(0x0C); ili9481_Send_Data(0x00); ili9481_Send_Command(0x36); //(0x2B); ili9481_Send_Data(0x2B); ili9481_Send_Command(LCD_PIXEL_FORMAT); //(0x3A); ili9481_Send_Data(0x55); ili9481_Send_Command(LCD_COLUMN_ADDR); //(0x2A); ili9481_Send_Data(0x00); ili9481_Send_Data(0x00); ili9481_Send_Data((uint8_t)(ili9481_WIDTH >> 8)); ili9481_Send_Data((uint8_t)(ili9481_WIDTH - 1)); ili9481_Send_Command(LCD_PAGE_ADDR); //(0x2B); ili9481_Send_Data(0x00); ili9481_Send_Data(0x00); ili9481_Send_Data((uint8_t)(ili9481_HEIGHT >> 8)); ili9481_Send_Data((uint8_t)(ili9481_HEIGHT - 1)); _ili9481_Delay_ms(120); ili9481_Send_Command(LCD_DISPLAY_ON); //(0x29); }
Дефайны:
Спойлер Код:
#define LCD_NOOP 0x00 /* No Operation*/ #define LCD_SWRESET 0x01 /* Software Reset */ #define LCD_RDDPM 0x0A /* Read Display Power Mode */ #define LCD_RDDMADCTL 0x0B /* Read Display MADCTL */ #define LCD_RDDCOLMOD 0x0C /* Read Display Pixel Format */ #define LCD_RDDIM 0x0D /* Read Display Image Format */ #define LCD_RDDSM 0x0E /* Read Display Signal Mode */ #define LCD_RDDSDR 0x0F /* Read Display Self-Diagnostic Result */ #define LCD_SPLIN 0x10 /* Enter Sleep Mode */ #define LCD_SLEEP_OUT 0x11 /* Sleep out register */ #define LCD_PTLON 0x12 /* Partial Mode ON */ #define LCD_NORMAL_MODE_ON 0x13 /* Normal Display Mode ON */ #define LCD_DINVOFF 0x20 /* Display Inversion OFF */ #define LCD_DINVON 0x21 /* Display Inversion ON */ #define LCD_GAMMA 0x26 /* Gamma register */ #define LCD_DISPLAY_OFF 0x28 /* Display off register */ #define LCD_DISPLAY_ON 0x29 /* Display on register */ #define LCD_COLUMN_ADDR 0x2A /* Column address register */ #define LCD_PAGE_ADDR 0x2B /* Page address register */ #define LCD_GRAM 0x2C /* GRAM register */ #define LCD_RGBSET 0x2D /* Color SET */ #define LCD_RAMRD 0x2E /* Memory Read */ #define LCD_PLTAR 0x30 /* Partial Area */ #define LCD_VSCRDEF 0x33 /* Vertical Scrolling Definition */ #define LCD_TEOFF 0x34 /* Tearing Effect Line OFF */ #define LCD_TEON 0x35 /* Tearing Effect Line ON */ #define LCD_MAC 0x36 /* Memory Access Control register*/ #define LCD_VSCRSADD 0x37 /* Vertical Scrolling Start Address */ #define LCD_IDMOFF 0x38 /* Idle Mode OFF */ #define LCD_IDMON 0x39 /* Idle Mode ON */ #define LCD_PIXEL_FORMAT 0x3A /* Pixel Format register */ #define LCD_WRITE_MEM_CONTINUE 0x3C /* Write Memory Continue */ #define LCD_READ_MEM_CONTINUE 0x3E /* Read Memory Continue */ #define LCD_SET_TEAR_SCANLINE 0x44 /* Set Tear Scanline */ #define LCD_GET_SCANLINE 0x45 /* Get Scanline */ #define LCD_READ_DDB_START 0xA1 /* Read DDB start */ /* Level 2 Commands */ #define LCD_CMDACCPRTC 0xB0 /* Command Access Protect */ #define LCD_FRMCTR 0xB3 /* Frame Memory Access and Interface setting */ #define LCD_DMFMCTR 0xB4 /* Display Mode and Frame Memory Write Mode setting */ #define LCD_DEVCODERD 0xBF /* Device code read */ #define LCD_PANEL_DRV_CTL 0xC0 /* Panel Driving Setting */ #define LCD_NORMAL_TIMING_WR 0xC1 /* Display Timing Setting for Normal Mode */ #define LCD_PARTIAL_TIMING_WR 0xC2 /* Display Timing Setting for Partial Mode */ #define LCD_IDLE_TIMING_WR 0xC3 /* Display Timing Setting for Idle Mode */ #define LCD_FR_INV_CTL 0xC5 /* Frame rate and Inversion Control */ #define LCD_INTERFACE 0xC6 /* Interface Control */ #define LCD_GAMMAWR 0xC8 /* Gamma Setting */ #define LCD_POWER 0xD0 /* POWER CONTROL */ #define LCD_VCOM 0xD1 /* VCOM Control */ #define LCD_NORMAL_PWR_WR 0xD2 /* Power Setting for Normal Mode */ #define LCD_PARTIAL_PWR_WR 0xD3 /* Power Setting for Partial Mode */ #define LCD_IDLE_PWR_WR 0xD4 /* Power Setting for Idle Mode */ #define LCD_NVMEMWR 0xE0 /* NV Memory Write */ #define LCD_NVMEMCTRL 0xE1 /* NV Memory Control */ #define LCD_NVMEMRD 0xE2 /* NV Memory Status */ #define LCD_NVMEMPRT 0xE3 /* NV Memory Protection */ #define LCD_EEPROMWR_ENABLE 0xE8 /* EEPROM Write Enable */ #define LCD_EEPROMWR_DISABLE 0xE9 /* EEPROM Write Disable */ #define LCD_EEPROMWR 0xEA /* EEPROM Word Write */ #define LCD_EEPROMRD 0xEB /* EEPROM Word Read */ #define LCD_EEPROM_ADR_SET 0xEC /* EEPROM Address Set */ #define LCD_EEPROM_ERASE 0xED /* EEPROM Erase */ #define LCD_EEPROM_ERASE_ALL 0xEE /* EEPROM Erase All */ #define ili9481_DATA_PORT GPIOC #define ili9481_CONTROL_PORT GPIOD #define ili9481_LCD_WR_ENABLE (ili9481_CONTROL_PORT->BSRR |= GPIO_BSRR_BR_1) // Write data to LCD #define ili9481_LCD_WR_DISABLE (ili9481_CONTROL_PORT->BSRR |= GPIO_BSRR_BS_1) // #define ili9481_LCD_CD_COMMAND (ili9481_CONTROL_PORT->BSRR |= GPIO_BSRR_BR_0) // Command/Data selection. May be marked as LCD_RS, D/C, A0 or RS. #define ili9481_LCD_CD_DATA (ili9481_CONTROL_PORT->BSRR |= GPIO_BSRR_BS_0) // Data - Hight. Commands - Low #define ili9481_LCD_CS_ENABLE (ili9481_CONTROL_PORT->BSRR |= GPIO_BSRR_BR_2) // Chip Select. #define ili9481_LCD_CS_DISABLE (ili9481_CONTROL_PORT->BSRR |= GPIO_BSRR_BS_2) // Active - LOW #define ili9481_LCD_RESET_ENABLE (ili9481_CONTROL_PORT->BSRR |= GPIO_BSRR_BR_3) // Reset. #define ili9481_LCD_RESET_DISABLE (ili9481_CONTROL_PORT->BSRR |= GPIO_BSRR_BS_3) // Active (LCD reset activation) - LOW #define ili9481_SET_DATA (ili9481_DATA_PORT->ODR) #define ili9481_READ_DATA (ili9481_DATA_PORT->IDR & 0x0000) #define ili9481_WR_STROBE {ili9481_LCD_WR_ENABLE; ili9481_LCD_WR_DISABLE;}
Прием/отправка
Спойлер Код:
void ili9481_Send_Command (uint16_t Reg_Value) { //if (Data_PINs_State == 1) {ili9481_PINs_Data_Out();} ili9481_LCD_CS_DISABLE; //ili9481_LCD_RD_DISABLE; ili9481_LCD_WR_DISABLE; ili9481_LCD_CD_DATA; ili9481_LCD_CS_ENABLE; ili9481_LCD_CD_COMMAND; ili9481_SET_DATA = Reg_Value; ili9481_WR_STROBE; ili9481_LCD_CS_DISABLE; } void ili9481_Send_Data (uint16_t Data_for_send) { //if (Data_PINs_State == 1) {ili9481_PINs_Data_Out();} ili9481_LCD_CS_DISABLE; //ili9481_LCD_RD_DISABLE; ili9481_LCD_WR_DISABLE; ili9481_LCD_CD_COMMAND; ili9481_LCD_CS_ENABLE; ili9481_LCD_CD_DATA; ili9481_SET_DATA = Data_for_send; ili9481_WR_STROBE; ili9481_LCD_CS_DISABLE; }
Код 100% рабочий. Часть откуда-то успешно с3,14зжена, остальное писал сам, так что, если есть вопросы - спрашиваем не стесняемся
.
Дальше хочу подключить к FSMC, но информация для CMSIS скудная. Если у кого есть примеры с его использованием - поделитесь пожалуйста.
Вернуться наверх
Реклама
Страница 1 из 1
[ Сообщений: 8 ]
Кто сейчас на форуме
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения