Форум РадиоКот https://radiokot.ru/forum/ |
|
stm32 + ili9341 выдает не правильные цвета https://radiokot.ru/forum/viewtopic.php?f=59&t=136668 |
Страница 1 из 1 |
Автор: | koteika [ Ср окт 12, 2016 10:41:18 ] | ||
Заголовок сообщения: | stm32 + ili9341 выдает не правильные цвета | ||
Добрый день товарищи ![]() дисплей на контроллере ili9341 правильно показывает только синий и черный цвета, а все остальные оттенки синего ![]() З.Ы. среда кеил
|
Автор: | Alexey_N [ Ср ноя 02, 2016 15:41:55 ] |
Заголовок сообщения: | Re: stm32 + ili9341 выдает не правильные цвета |
Что-то у вас инициализация ili9341 подозрительная, двойная какая-то, исправьте на нормальную. |
Автор: | apn [ Чт ноя 23, 2017 08:26:36 ] |
Заголовок сообщения: | Re: stm32 + ili9341 выдает не правильные цвета |
Добрый день. У Вас решилась эта задача ? У меня аналогичная ситуация. Буду благодарен за ответ любого рода. Мой mail: apn@sinn.ru Спасибо. |
Автор: | Sergey_78r [ Пт ноя 24, 2017 14:09:49 ] |
Заголовок сообщения: | Re: stm32 + ili9341 выдает не правильные цвета |
Ну судя по тому, что после совета исправить инициализацию вопросов больше не было, может тоже в этом дело? Попробуйте так, у меня работает: Спойлер#define ILI9341_RESET 0x01#define ILI9341_SLEEP_OUT 0x11 #define ILI9341_GAMMA 0x26 #define ILI9341_DISPLAY_OFF 0x28 #define ILI9341_DISPLAY_ON 0x29 #define ILI9341_COLUMN_ADDR 0x2A #define ILI9341_PAGE_ADDR 0x2B #define ILI9341_GRAM 0x2C #define ILI9341_MAC 0x36 #define ILI9341_PIXEL_FORMAT 0x3A #define ILI9341_WDB 0x51 #define ILI9341_WCD 0x53 #define ILI9341_RGB_INTERFACE 0xB0 #define ILI9341_FRC 0xB1 #define ILI9341_BPC 0xB5 #define ILI9341_DFC 0xB6 #define ILI9341_POWER1 0xC0 #define ILI9341_POWER2 0xC1 #define ILI9341_VCOM1 0xC5 #define ILI9341_VCOM2 0xC7 #define ILI9341_POWERA 0xCB #define ILI9341_POWERB 0xCF #define ILI9341_PGAMMA 0xE0 #define ILI9341_NGAMMA 0xE1 #define ILI9341_DTCA 0xE8 #define ILI9341_DTCB 0xEA #define ILI9341_POWER_SEQ 0xED #define ILI9341_3GAMMA_EN 0xF2 #define ILI9341_INTERFACE 0xF6 #define ILI9341_PRC 0xF7 LCD_CS_set(0); LCD_RST_set(1); LCD_SendCommand(ILI9341_RESET); Delay(100); LCD_SendCommand(ILI9341_RESET); Delay(100); /// commands here LCD_SendCommand(ILI9341_POWERA); LCD_SendData(0x39); LCD_SendData(0x2C); LCD_SendData(0x00); LCD_SendData(0x34); LCD_SendData(0x02); LCD_SendCommand(ILI9341_POWERB); LCD_SendData(0x00); LCD_SendData(0xC1); LCD_SendData(0x30); LCD_SendCommand(ILI9341_DTCA); LCD_SendData(0x85); LCD_SendData(0x00); LCD_SendData(0x78); LCD_SendCommand(ILI9341_DTCB); LCD_SendData(0x00); LCD_SendData(0x00); LCD_SendCommand(ILI9341_POWER_SEQ); LCD_SendData(0x64); LCD_SendData(0x03); LCD_SendData(0x12); LCD_SendData(0x81); LCD_SendCommand(ILI9341_PRC); LCD_SendData(0x20); LCD_SendCommand(ILI9341_POWER1); LCD_SendData(0x23); LCD_SendCommand(ILI9341_POWER2); LCD_SendData(0x10); LCD_SendCommand(ILI9341_VCOM1); LCD_SendData(0x3E); LCD_SendData(0x28); LCD_SendCommand(ILI9341_VCOM2); LCD_SendData(0x86); LCD_SendCommand(ILI9341_MAC); LCD_SendData(0x48); LCD_SendCommand(ILI9341_PIXEL_FORMAT); LCD_SendData(0x55); LCD_SendCommand(ILI9341_FRC); LCD_SendData(0x00); LCD_SendData(0x18); LCD_SendCommand(ILI9341_DFC); LCD_SendData(0x08); LCD_SendData(0x82); LCD_SendData(0x27); LCD_SendCommand(ILI9341_3GAMMA_EN); LCD_SendData(0x00); LCD_SendCommand(ILI9341_COLUMN_ADDR); LCD_SendData(0x00); LCD_SendData(0x00); LCD_SendData(0x00); LCD_SendData(0xEF); LCD_SendCommand(ILI9341_PAGE_ADDR); LCD_SendData(0x00); LCD_SendData(0x00); LCD_SendData(0x01); LCD_SendData(0x3F); LCD_SendCommand(ILI9341_GAMMA); LCD_SendData(0x01); LCD_SendCommand(ILI9341_PGAMMA); LCD_SendData(0x0F); LCD_SendData(0x31); LCD_SendData(0x2B); LCD_SendData(0x0C); LCD_SendData(0x0E); LCD_SendData(0x08); LCD_SendData(0x4E); LCD_SendData(0xF1); LCD_SendData(0x37); LCD_SendData(0x07); LCD_SendData(0x10); LCD_SendData(0x03); LCD_SendData(0x0E); LCD_SendData(0x09); LCD_SendData(0x00); LCD_SendCommand(ILI9341_NGAMMA); LCD_SendData(0x00); LCD_SendData(0x0E); LCD_SendData(0x14); LCD_SendData(0x03); LCD_SendData(0x11); LCD_SendData(0x07); LCD_SendData(0x31); LCD_SendData(0xC1); LCD_SendData(0x48); LCD_SendData(0x08); LCD_SendData(0x0F); LCD_SendData(0x0C); LCD_SendData(0x31); LCD_SendData(0x36); LCD_SendData(0x0F); LCD_SendCommand(ILI9341_SLEEP_OUT); Delay(100); LCD_SendCommand(ILI9341_DISPLAY_ON); LCD_SendCommand(ILI9341_GRAM); |
Автор: | apn [ Пн ноя 27, 2017 08:46:43 ] |
Заголовок сообщения: | Re: stm32 + ili9341 выдает не правильные цвета |
Спасибо, я уже разобрался. Проблема была в том, что я использовал 8bit протокол. а TFT был выставлен для 16bit (это IM). |
Автор: | BBM [ Чт май 01, 2025 15:22:29 ] |
Заголовок сообщения: | Re: stm32 + ili9341 выдает не правильные цвета |
Я проблему решил следующим образом - переписал инициализацию цветов в файле библиотеки ILI9341. Шестнадцатиричное значение с помощью калькулятора Windows преобразовал в двоичное число, полученное число нужно переписать зеркально, т.е. читать не слева направо а справо налево. Получившееся число с помощью онлайн калькулятора преобразуем снова в шестнадцатиричное число. Полученным результатом заменил имевшееся значение. Те значения, которые симметричны остаются без изменений - это белый, чёрный, зелёный, розовый, пурпурный. Получилось такое: было стало #define ILI9341_BLACK 0x0000 /* 0, 0, 0 * 0000 0000 0000 0000 BLACK (чёрный) */ #define ILI9341_NAVY 0xF000 /* 0, 0, 128 * 0000 0000 0000 1111 0x000F F000 */ #define ILI9341_DARKGREEN 0x07C0 /* 0, 128, 0 * 0000 0011 1110 0000 0x03E0 07C0 */ #define ILI9341_DARKCYAN 0xF7C0 /* 0, 128, 128 * 0000 0011 1110 1111 0x03EF F7C0*/ #define ILI9341_MAROON 0x001E /* 128, 0, 0 * 0111 1000 0000 0000 0x7800 001E */ #define ILI9341_PURPLE 0xF01E /* 128, 0, 128 * 0111 1000 0000 1111 0x780F F01E*/ #define ILI9341_OLIVE 0x87DE /* 128, 128, 0 * 0111 1011 1110 0001 0x7BE0 87DE*/ #define ILI9341_LIGHTGREY 0x1863 /* 192, 192, 192 * 1100 0110 0001 1000 0xC618 1863*/ #define ILI9341_DARKGREY 0xF7D3 /* 128, 128, 128 * 0111 1011 1110 1111 0x7BEF F7D3*/ #define ILI9341_BLUE 0xF800 /* 0, 0, 255 * 0000 0000 0001 1111 0x001F F800*/ #define ILI9341_GREEN 0x07E0 /* 0, 255, 0 * 0000 0111 1110 0000 07E0*/ #define ILI9341_CYAN 0xFFE0 /* 0, 255, 255 * 0000 0111 1111 1111 0x07FF FFE0*/ #define ILI9341_RED 0x001F /* 255, 0, 0 * 1111 1000 0000 0000 0xF800 001F*/ #define ILI9341_MAGENTA 0xF81F /* 255, 0, 255 * 1111 1000 0001 1111 MAGENTA (пурпурный)F81F*/ #define ILI9341_YELLOW 0x07FF /* 255, 255, 0 * 1111 1111 1110 0000 FFE0 07FF*/ #define ILI9341_WHITE 0xFFFF /* 255, 255, 255 * 1111 1111 1111 1111 WHITE (белый) FFFF*/ #define ILI9341_ORANGE 0x04BF /* 255, 165, 0 * 1111 1101 0010 0000 0xFD20 04BF */ #define ILI9341_GREENYELLOW 0xA7F5 /* 173, 255, 47 * 1010 1111 1110 0101 0xAFE5 A7F5*/ #define ILI9341_PINK 0xF81F /* 1111 1000 0001 1111 #define ILI9341_GRAY 0x514a /* 0101 0010 1000 1010 0x528A |
Автор: | jcxz [ Чт май 01, 2025 23:55:05 ] |
Заголовок сообщения: | Re: stm32 + ili9341 выдает не правильные цвета |
Я проблему решил следующим образом - переписал инициализацию цветов в файле библиотеки ILI9341. Шестнадцатиричное значение с помощью калькулятора Windows преобразовал в двоичное число, полученное число нужно переписать зеркально, т.е. читать не слева направо а справо налево. Получившееся число с помощью онлайн калькулятора преобразуем снова в шестнадцатиричное число. Полученным результатом заменил имевшееся значение. А можно было просто прочитать в учебнике по си, что такое "макросы". И написать таковой. Всего в одну строку. А не устраивать "закат солнца вручную"... ![]() |
Автор: | BBM [ Пт май 02, 2025 05:04:25 ] |
Заголовок сообщения: | Re: stm32 + ili9341 выдает не правильные цвета |
Я в Си особо не силён, можно сказать начинающий. Мне так оказалось проще. |
Автор: | jcxz [ Пт май 02, 2025 11:16:51 ] |
Заголовок сообщения: | Re: stm32 + ili9341 выдает не правильные цвета |
Так если учебник не открывать, то так навсегда и останетесь начинающим. Как же иначе? |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |