Как инициализировать дисплей DT028ATFT

Я пытаюсь инициализировать дисплей DT028ATFT-TS на основной плате STM32F10B. Система работала с DT028TFT-TS раньше, но это отображение было прекращено. В результате использования нового diplay, интерфейс также должен был измениться с ILI9320 на ILI9341. Сейчас я в основном пытаюсь инициализировать новый дисплей в конфигурации, которая была бы эквивалентна тому, что у меня было раньше.

Проблема, с которой я сталкиваюсь, заключается в том, что изображение на дисплее в итоге показывает горизонтальные полосы, случайно распределенные (слегка отличающиеся при каждом запуске) с небольшим мерцанием. И время от времени (не уверен, если связан), он просто показывает подсветку и ничего больше - без разводов, без тестового изображения. Тестовое изображение - это только один большой красный квадрат (100x100), отображаемый при x=100, y=50. Вы можете увидеть эффект проблемы здесь: Изображение с полосами.

Следующее является частью кода инициализации, который я использовал - часть этого взята как таковая из примера кода DisplayTech, предлагаемого на их веб-сайте, часть его настроена. Я исключил команды из примера кода, которые не документированы в ILI9341 (возможно, настройки поставщика), и параметры гамма-коррекции, просто чтобы сэкономить место. Любая помощь в выяснении, где я пошла не так, будет принята с благодарностью.

// DT028ATFT LCD init - ILI9341:
// Frame Rate Control
SPI_WriteCMD(0xB1);
SPI_WriteDAT(0x00);     // division ratio: 1
SPI_WriteDAT(0x10);     // 16 clocks per line
// Power Control
SPI_WriteCMD(0xC0);
SPI_WriteDAT(0x25);     // GVDD = 4.70V
SPI_WriteCMD(0xC1);
SPI_WriteDAT(0x03);     // VCL=VCI x 2, VGH=VCI x 6, VGL=-VCI x 3
// VCOM Control
SPI_WriteCMD(0xC5);
SPI_WriteDAT(0x5C);     // VCOMH = 5.000 V
SPI_WriteDAT(0x4C);     // VCOML = -0.600 V
SPI_WriteCMD(0xC7);
SPI_WriteDAT(0x94);     // VCOMH = VMH - 44, VCOML = VML - 44
// Memory Access Control
SPI_WriteCMD(0x36);
SPI_WriteDAT(0x08);     // BGR=1, Normal addr order and refresh direction
// Write CTRL Display
SPI_WriteCMD(0x53);
SPI_WriteDAT(0x24);     // BCTRL=1, DD=0, BL=1
// Display Function Control
SPI_WriteCMD(0xB6);
SPI_WriteDAT(0x00);     // Normal scan, V63 pos pol / V0 neg pol
SPI_WriteDAT(0xA0);     // LCD normally white, G1 to G320, S720 to S1
SPI_WriteDAT(0x27);     // NL = 320
SPI_WriteDAT(0x00);     // PCDIV not used
// Entry Mode Set
SPI_WriteCMD(0xB7);
SPI_WriteDAT(0x06);     // Normal display for G1-G320 output, Low voltage detection enabled
// Column Address Set
SPI_WriteCMD(0x2A);
SPI_WriteDAT(0x00);
SPI_WriteDAT(0x00);     // Start Column = 0
SPI_WriteDAT(0x00);
SPI_WriteDAT(0xEF);     // End Column = 239
// Page Address Set
SPI_WriteCMD(0x2B);
SPI_WriteDAT(0x00);
SPI_WriteDAT(0x00);     // Start Page = 0
SPI_WriteDAT(0x01);
SPI_WriteDAT(0x3F);     // End Page = 319
// Gamma Set
SPI_WriteCMD(0x26);
SPI_WriteDAT(0x01);     // Gamma Curve 1 selected (G2.2)
// Pixel Format Set
SPI_WriteCMD(0x3A);
SPI_WriteDAT(0x55);     // 16bits/pixel (RGB and MCU i/f)
// Interface Control
SPI_WriteCMD(0xF6);
SPI_WriteDAT(0x00);     // image data not wrapped around (exceeding data ignored)
SPI_WriteDAT(0x00);     // MSB used also as LSB for R and B (64k colours)
SPI_WriteDAT(0x00);     // Disp Op Mode: internal clk, GRAM access: Sys I/F, 1 transf/pxl (16bit 64k colours)
// RGB Interface Signal Control
SPI_WriteCMD(0xB0);
SPI_WriteDAT(0xC0);     // BypassMode=1, RCM=2, VSPL=0, HSPL=0, DPL=0, EPL=0
// Sleep Mode off (DC/DC conv enabled, internal osc started)
SPI_WriteCMD(0x11);
Dly100us((void*)1200);
// Display ON
SPI_WriteCMD(0x29);
// ===============================

1 ответ

Решение

Ваша проблема звучит как проблема времени. Вы пытались уменьшить частоту кадров? это должно уменьшить время отображения. Вы устанавливаете его на 119 Гц.

вы делаете правильный сброс до инициализации?

Вы можете сравнить с другими реализациями для контроллера ILI9341:

Другие вопросы по тегам