Например TDA7294

Форум РадиоКот :: Просмотр темы - stm32 + ili9341 выдает не правильные цвета
Форум РадиоКот
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 выдает не правильные цвета

Добрый день товарищи :beer: , столкнулся с такой проблемой:
дисплей на контроллере ili9341 правильно показывает только синий и черный цвета, а все остальные оттенки синего :cry: уже 2 дня борюсь сил нет, может кто посмотрит проект и поможет, буду премного благодарен.
З.Ы. среда кеил

Вложения:
SRC+INC.rar [14.83 KiB]
Скачиваний: 240

Автор:  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 преобразовал в двоичное число, полученное число нужно переписать зеркально, т.е. читать не слева направо а справо налево. Получившееся число с помощью онлайн калькулятора преобразуем снова в шестнадцатиричное число. Полученным результатом заменил имевшееся значение.
А можно было просто прочитать в учебнике по си, что такое "макросы". И написать таковой. Всего в одну строку. А не устраивать "закат солнца вручную"... 8)

Автор:  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/