TFT дисплей: инверсия цвета

Euronimus
Offline
Зарегистрирован: 18.12.2016

Здравствуйте.

Приобрел дисплей на чипе ILI9341, завести его удалось используя библиотеку SPFD5408 https://github.com/JoaoLopesF/SPFD5408

Но столкнулся с другой проблемой: инвертируются цвета.

Прочитав статью http://datagor.ru/microcontrollers/microcontrollers-code-library/2924-vizualizaciya-dlya-mikrokontrollera-chast-3-tft-displey-28-240h320-na-ili9341.html наткнулся на такое объяснение причины:

1.	Все биты равны нулю. Это значение устанавливается по сбросу/подаче питания. Дисплей окрасился в голубоватый, а не жёлтый, цвет, хотя надпись «Datagor» – чёрная, как и планировалось. Однако, с надписью тоже не всё в порядке – она выведена в зеркальном отражении. Начало координат – в углу B.
Причина путаницы с цветами следующая. В описании команды Memory Write мы выяснили взаимосвязь между битами параметра этой команды и частотой ШИМ-сигнала субпикселей:
•	Старшие 5 бит – частота сигнала для субпикселя красного цвета,
•	Средние 6 бит – частота сигнала для субпикселя зелёного цвета,
•	Младшие 5 бит – частота сигнала для субпикселя синего цвета.

Однако, такой порядок действует, если бит BGR параметра команды MADCTL равен 1. Если же BGR = 0, то порядок – зеркальный:
•	Старшие 5 бит – частота сигнала для субпикселя синего цвета,
•	Средние 6 бит – частота сигнала для субпикселя зелёного цвета,
•	Младшие 5 бит – частота сигнала для субпикселя красного цвета.

В этом случае неизменными остаются только те числовые значения цветов, которые симметричны в двоичном представлении – чёрный (0000000000000000), белый (1111111111111111) и зелёный (0000011111100000). Остальные цвета меняются на зеркально-противоположные: красный (1111100000000000) на синий (0000000000011111), синий на красный и т.д. Именно поэтому мы получили голубоватый экран вместо жёлтого, а надпись, как и хотели, черную. 

Но никак не могу понять, что требуется сделать, чтобы решить эту проблему.

С ардуино я новичек, поэтому прошу не ругать, если что-то не так написал.

Euronimus
Offline
Зарегистрирован: 18.12.2016

Попытка менять значение ILI9341_MADCTL_BGR 0x08 в файле registers.h окончилась безрезультатно

Euronimus
Offline
Зарегистрирован: 18.12.2016

Сам спросил - сам отвечаю

Нашел чудесный алгоритм, спасибо Генри Уоррену
привожу код, который накидал, для проверки работы алгортма

#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF

uint8_t i = 0;                                                             // счетчик индекса массива цветов       
int long colors[]{BLACK, BLUE, RED, 
                            GREEN, CYAN, MAGENTA,
                            YELLOW, WHITE};                     // массив с набором цветов
void setup() 
{
  Serial.begin(9600);
}

void loop() 
{
  uint8_t hi, lo;                                                        // старший и младший байт
  if (Serial.available() > 0)                                   
  {                                                                                 
    switch (i)                                                             // вывод названия цвета
    {
      case 0: Serial.print("black"); break;
      case 1: Serial.print("blue"); break;
      case 2: Serial.print("red"); break;
      case 3: Serial.print("green"); break;
      case 4: Serial.print("cyan"); break;
      case 5: Serial.print("magenta"); break;
      case 6: Serial.print("yellow"); break;
      case 7: Serial.print("white"); break;
    }
    Serial.println();
    Serial.println(colors[i], BIN);                            // вывод цвета в двоичной системе

    hi = colors[i] >> 8; lo = colors[i];                     // разбор цвета на байты
   
    uint8_t x = lo;                                                    //зеркально разворачиваем
    x = ((x & 0x55) << 1) | ((x & 0xAA) >> 1);     //младший байт
    x = ((x & 0xCC) >> 2) | ((x & 0x33) << 2);
    x = (x >> 4) | (x << 4);                                     

    uint8_t y = hi;                                                    // аналогично - старший байт
    y = ((y & 0x55) << 1) | ((y & 0xAA) >> 1);
    y = ((y & 0xCC) >> 2) | ((y & 0x33) << 2);
    y = (y >> 4) | (y << 4);
    
    Serial.print(hi, BIN);                                       // вывод старшего и мл. байта
    Serial.print(" | ");                                             // разделитель для удобства восприятия
    Serial.println(lo, BIN);                                   // в оригинальном виде
   
    Serial.print(x, BIN);                                       // вывод мл. отзеркаленного байта    
    Serial.print(" | ");
    Serial.println(y, BIN);                                    // вывод стар. - байта

    uint16_t xy = x << 8 | y;                                // логическое ИЛИ для объединения байтов
    Serial.println(xy, BIN);
    Serial.println("__________________________________________");
    
    i++;
    if (i > 7) i=0;
    Serial.read();
  }
}

 

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

Надеюсь, что кому- то пригодится

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Очень надеюсь, что это никому не пригодится.

Бороться нужно с проблемой, а не с симптомами, тем более, что средство борьбы явно слишком ресурсоемкое для маломощного контроллера.

Волшебник
Offline
Зарегистрирован: 22.12.2016

Проще библиотеку найти ту которая нужна, а не настраивать какую попало

forfrends
Offline
Зарегистрирован: 24.02.2015

Все дело в инициализации дисплея. Вы используете библиотеку (или настройки библиотеки для конкретного дисплея) которые похожи по инициализации но все же от другого контроллера. То есть вы используете инициализацию не того контроллера, который используете. Выхода два: либо искать нормальную библиотеку (не правленную), либо Вам нужно почитать даташит на контроллер дисплея, выяснить какой бит отвечает за что и "ручками" подправить инициализацию в библиотеке.

Почитайте эту тему: http://arduino.ru/forum/apparatnye-voprosy/arduino-i-displei-ot-sotikov-mobilnykh-telefonov?page=2#comment-216185 там с подобным сталкивались

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

я использовал для такого дисплея библиотеки отсюда

#include <UTFT.h> // UTFT Library from Henning Karlsen (http://www.rinkydinkelectronics.com/library.php)
#include <UTFT_Geometry.h> //UTFT Geometry Library from Henning Karlsen (http://www.rinkydinkelectronics.com/library.php)
 

Цвета в коде определялись так: (код чужой)

extern uint8_t BigFont[];
extern uint8_t SmallFont[];
extern uint8_t SevenSegmentFull[];

#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
#define ORANGE  0xFF00

UTFT utftDisplay(ILI9341_16,38,39,40,41);  // откомпилировался, заработал, но не влезает в экран, потихоньку правим код
 

 

Euronimus
Offline
Зарегистрирован: 18.12.2016

На изменение бита BGR, в параметре команды Memory Access Control (0х36), дисплей никак не реагирует, однако на изменение других битов данной команды дисплей поворачивает изображение.

Пытался я бороться с проблемой, просмотрел даташит, пробовал различные команды с различными парметрами - безтолку.

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Euronimus пишет:

На изменение бита BGR, в параметре команды Memory Access Control (0х36), дисплей никак не реагирует, однако на изменение других битов данной команды дисплей поворачивает изображение.

Пытался я бороться с проблемой, просмотрел даташит, пробовал различные команды с различными парметрами - безтолку.

 

Библиотеки, что я привёл пробовали?

Euronimus
Offline
Зарегистрирован: 18.12.2016

Пробовал, но к сожалению дисплей никак не отзывается. Немного покопался в библиотеке и понял, что она для дисплеев у которых зайдествованы пины 0(RX) и 1(TX). Но в модели которая у меня эти пины дисплея свободны.

Дальние, с правой стороны. Плата внешне отличается от той, что на картинке.

 

Обнаружил, что дисплей отзывается на инициализацию от ILI9341 и SPFD5408. Покопавшись в даташитах обнаружил, что некоторые адреса команд и их параметры совпадают.

forfrends
Offline
Зарегистрирован: 24.02.2015

Вам нужно точно определить что у вас за контроллер. Для этого есть специальные программы. Читайте здесь: http://arduino.ru/forum/apparatnye-voprosy/arduino-i-displei-ot-sotikov-mobilnykh-telefonov?page=1#comment-169922

Да и вообще перечитайте тему. Там много полезного.

Euronimus
Offline
Зарегистрирован: 18.12.2016

Нашел рабочую библиотеку UTFT.h, дисплей завелся, как мне показалось даже шустрее чем с адафрутом.

Заводится только использовании инициализации для ILI9341, проблема таже самая.

myGLCD.setFont(SmallFont);               // устанавливаем маленький шрифт
  myGLCD.setColor(VGA_WHITE);              // устанавливаем белый цвет текста
  myGLCD.print("iarduino.ru | SmallFont", CENTER, 50); // выводим текст на дисплей
  
  myGLCD.setFont(BigFont);                 // устанавливаем большой шрифт
  myGLCD.setColor(VGA_BLUE);               // устанавливаем синий цвет текста
  myGLCD.print("BigFont", CENTER, 100);    // выводим текст на дисплей
  myGLCD.print("iarduino.ru", CENTER, 115);// выводим текст на дисплей

  myGLCD.setFont(SevenSegNumFont);         // устанавливаем шрифт имитирующий семисегментный индикатор
  myGLCD.setColor(VGA_FUCHSIA);            // устанавливаем пурпурный цвет текста
  myGLCD.print("1234567890", CENTER, 150); // выводим текст на дисплей

forfrends
Offline
Зарегистрирован: 24.02.2015

При помощи читалки определите какой у вас контроллер, только после этого можно что-то конкретное делать. Ссылку давал выше

Euronimus
Offline
Зарегистрирован: 18.12.2016

Не сразу понял, что от меня требуется. Выкладываю лог 

start... 

      
               1p 2p 3p 4p 5p 6p 7p 8parameter(byte)
      
register 00    00 00 00 00 00 00 00 00  ***
      
register 00    00 00 00 00 00 00 00 00  ***
register 01    00 00 00 00 00 00 00 00
register 02    00 00 00 00 00 00 00 00
register 03    00 00 00 00 00 00 00 00
register 04    FF FF FF FF 00 00 00 00  ***
register 05    00 00 00 00 00 00 00 00
register 06    00 00 00 00 00 00 00 00
register 07    00 00 00 00 00 00 00 00
register 08    00 00 00 00 00 00 00 00
register 09    00 00 00 00 00 00 00 00
register 0A    08 08 00 00 00 00 00 00
register 0B    00 00 00 00 00 00 00 00
register 0C    66 66 00 00 00 00 00 00
register 0D    00 00 00 00 00 00 00 00
register 0E    00 00 00 00 00 00 00 00
register 0F    00 00 00 00 00 00 00 00
register 10    00 00 00 00 00 00 00 00
register 11    00 00 00 00 00 00 00 00
register 12    00 00 00 00 00 00 00 00
register 13    00 00 00 00 00 00 00 00
register 14    00 00 00 00 00 00 00 00
register 15    00 00 00 00 00 00 00 00
register 16    00 00 00 00 00 00 00 00
register 17    00 00 00 00 00 00 00 00
register 18    00 00 00 00 00 00 00 00
register 19    00 00 00 00 00 00 00 00
register 1A    00 00 00 00 00 00 00 00
register 1B    00 00 00 00 00 00 00 00
register 1C    00 00 00 00 00 00 00 00
register 1D    00 00 00 00 00 00 00 00
register 1E    00 00 00 00 00 00 00 00
register 1F    00 00 00 00 00 00 00 00
register 20    00 00 00 00 00 00 00 00
register 21    00 00 00 00 00 00 00 00
register 22    00 00 00 00 00 00 00 00
register 23    00 00 00 00 00 00 00 00
register 24    00 00 00 00 00 00 00 00
register 25    00 00 00 00 00 00 00 00
register 26    00 00 00 00 00 00 00 00
register 27    00 00 00 00 00 00 00 00
register 28    00 00 00 00 00 00 00 00
register 29    00 00 00 00 00 00 00 00
register 2A    00 00 00 00 EF 00 00 00
register 2B    00 00 00 01 3F 00 00 00
register 2C    00 FC FC 18 EC 84 28 44
register 2D    00 00 00 00 00 00 00 00
register 2E    00 FC FC 18 EC 84 28 44
register 2F    00 00 00 00 00 00 00 00
register 30    00 00 00 01 3F 00 00 00
register 31    00 00 00 00 00 00 00 00
register 32    00 00 00 00 00 00 00 00
register 33    00 00 00 00 00 00 00 00
register 34    00 00 00 00 00 00 00 00
register 35    00 00 00 00 00 00 00 00
register 36    00 00 00 00 00 00 00 00
register 37    00 00 00 00 00 00 00 00
register 38    00 00 00 00 00 00 00 00
register 39    00 00 00 00 00 00 00 00
register 3A    66 66 00 00 00 00 00 00
register 3B    00 00 00 00 00 00 00 00
register 3C    00 FC FC 18 EC 84 28 44
register 3D    00 00 00 00 00 00 00 00
register 3E    00 00 00 00 FC FC 18 EC
register 3F    00 00 00 00 00 00 00 00
register 40    00 00 00 00 00 00 00 00
register 41    00 00 00 00 00 00 00 00
register 42    00 00 00 00 00 00 00 00
register 43    00 00 00 00 00 00 00 00
register 44    00 00 00 00 00 00 00 00
register 45    00 00 4C 00 00 00 00 00
register 46    00 00 00 00 00 00 00 00
register 47    00 00 00 00 00 00 00 00
register 48    00 00 00 00 00 00 00 00
register 49    00 00 00 00 00 00 00 00
register 4A    00 00 00 00 00 00 00 00
register 4B    00 00 00 00 00 00 00 00
register 4C    00 00 00 00 00 00 00 00
register 4D    00 00 00 00 00 00 00 00
register 4E    00 00 00 00 00 00 00 00
register 4F    00 00 00 00 00 00 00 00
register 50    00 00 00 00 00 00 00 00
register 51    00 00 00 00 00 00 00 00
register 52    00 00 00 00 00 00 00 00
register 53    00 00 00 00 00 00 00 00
register 54    00 00 00 00 00 00 00 00
register 55    00 00 00 00 00 00 00 00
register 56    00 00 00 00 00 00 00 00
register 57    00 00 00 00 00 00 00 00
register 58    00 00 00 00 00 00 00 00
register 59    00 00 00 00 00 00 00 00
register 5A    00 00 00 00 00 00 00 00
register 5B    00 00 00 00 00 00 00 00
register 5C    00 00 00 00 00 00 00 00
register 5D    00 00 00 00 00 00 00 00
register 5E    00 00 00 00 00 00 00 00
register 5F    00 00 00 00 00 00 00 00
register 60    00 00 00 00 00 00 00 00
register 61    00 00 00 00 00 00 00 00
register 62    00 00 00 00 00 00 00 00
register 63    00 00 00 00 00 00 00 00
register 64    00 00 00 00 00 00 00 00
register 65    00 00 00 00 00 00 00 00
register 66    00 00 00 00 00 00 00 00
register 67    00 00 00 00 00 00 00 00
register 68    00 00 00 00 00 00 00 00
register 69    00 00 00 00 00 00 00 00
register 6A    00 00 00 00 00 00 00 00
register 6B    00 00 00 00 00 00 00 00
register 6C    00 00 00 00 00 00 00 00
register 6D    00 00 00 00 00 00 00 00
register 6E    00 00 00 00 00 00 00 00
register 6F    00 00 00 00 00 00 00 00
register 70    00 00 00 00 00 00 00 00
register 71    00 00 00 00 00 00 00 00
register 72    00 00 00 00 00 00 00 00
register 73    00 00 00 00 00 00 00 00
register 74    00 00 00 00 00 00 00 00
register 75    00 00 00 00 00 00 00 00
register 76    00 00 00 00 00 00 00 00
register 77    00 00 00 00 00 00 00 00
register 78    00 00 00 00 00 00 00 00
register 79    00 00 00 00 00 00 00 00
register 7A    00 00 00 00 00 00 00 00
register 7B    00 00 00 00 00 00 00 00
register 7C    00 00 00 00 00 00 00 00
register 7D    00 00 00 00 00 00 00 00
register 7E    00 00 00 00 00 00 00 00
register 7F    00 00 00 00 00 00 00 00
register 80    00 00 00 00 00 00 00 00
register 81    00 00 00 00 00 00 00 00
register 82    00 00 00 00 00 00 00 00
register 83    00 00 00 00 00 00 00 00
register 84    00 00 00 00 00 00 00 00
register 85    00 00 00 00 00 00 00 00
register 86    00 00 00 00 00 00 00 00
register 87    00 00 00 00 00 00 00 00
register 88    00 00 00 00 00 00 00 00
register 89    00 00 00 00 00 00 00 00
register 8A    00 00 00 00 00 00 00 00
register 8B    00 00 00 00 00 00 00 00
register 8C    00 00 00 00 00 00 00 00
register 8D    00 00 00 00 00 00 00 00
register 8E    00 00 00 00 00 00 00 00
register 8F    00 00 00 00 00 00 00 00
register 90    00 00 00 00 00 00 00 00
register 91    00 00 00 00 00 00 00 00
register 92    00 00 00 00 00 00 00 00
register 93    00 00 00 00 00 00 00 00
register 94    00 00 00 00 00 00 00 00
register 95    00 00 00 00 00 00 00 00
register 96    00 00 00 00 00 00 00 00
register 97    00 00 00 00 00 00 00 00
register 98    00 00 00 00 00 00 00 00
register 99    00 00 00 00 00 00 00 00
register 9A    00 00 00 00 00 00 00 00
register 9B    00 00 00 00 00 00 00 00
register 9C    00 00 00 00 00 00 00 00
register 9D    00 00 00 00 00 00 00 00
register 9E    00 00 00 00 00 00 00 00
register 9F    00 00 00 00 00 00 00 00
register A0    00 00 00 00 00 00 00 00
register A1    FF FF FF FF 00 00 00 00
register A2    00 00 00 00 00 00 00 00
register A3    00 00 00 00 00 00 00 00
register A4    00 00 00 00 00 00 00 00
register A5    00 00 00 00 00 00 00 00
register A6    00 00 00 00 00 00 00 00
register A7    00 00 00 00 00 00 00 00
register A8    00 00 00 00 00 00 00 00
register A9    00 00 00 00 00 00 00 00
register AA    00 00 00 00 00 00 00 00
register AB    00 00 00 00 00 00 00 00
register AC    00 00 00 00 00 00 00 00
register AD    00 00 00 00 00 00 00 00
register AE    00 00 00 00 00 00 00 00
register AF    00 00 00 00 00 00 00 00
register B0    00 00 00 00 00 00 00 00
register B1    00 00 00 00 00 00 00 00
register B2    00 00 00 00 00 00 00 00
register B3    00 00 00 00 00 00 00 00
register B4    00 00 00 00 00 00 00 00
register B5    00 00 00 00 00 00 00 00
register B6    00 00 00 00 00 00 00 00
register B7    00 00 00 00 00 00 00 00
register B8    00 00 00 00 00 00 00 00
register B9    00 00 00 00 00 00 00 00
register BA    00 00 00 00 00 00 00 00
register BB    00 00 00 00 00 00 00 00
register BC    00 00 00 00 00 00 00 00
register BD    00 00 00 00 00 00 00 00
register BE    00 00 00 00 00 00 00 00
register BF    00 00 00 00 00 00 00 00  ***
register C0    00 00 00 00 00 00 00 00
register C1    00 00 00 00 00 00 00 00
register C2    00 00 00 00 00 00 00 00
register C3    00 00 00 00 00 00 00 00
register C4    00 00 00 00 00 00 00 00
register C5    00 00 00 00 00 00 00 00
register C6    00 00 00 00 00 00 00 00
register C7    00 00 00 00 00 00 00 00
register C8    00 00 00 00 00 00 00 00
register C9    00 00 00 00 00 00 00 00
register CA    00 00 00 00 00 00 00 00
register CB    00 00 00 00 00 00 00 00
register CC    00 00 00 00 00 00 00 00
register CD    00 00 00 00 00 00 00 00
register CE    00 00 00 00 00 00 00 00
register CF    00 00 00 00 00 00 00 00
register D0    00 00 00 00 00 00 00 00
register D1    00 00 00 00 00 00 00 00
register D2    00 00 00 00 00 00 00 00
register D3    00 00 00 00 00 00 00 00  ***
register D4    00 00 00 00 00 00 00 00
register D5    00 00 00 00 00 00 00 00
register D6    00 00 00 00 00 00 00 00
register D7    00 00 00 00 00 00 00 00
register D8    00 00 00 00 00 00 00 00
register D9    00 00 00 00 00 00 00 00
register DA    00 00 00 00 00 00 00 00  ***
register DB    00 00 00 00 00 00 00 00  ***
register DC    00 00 00 00 00 00 00 00  ***
register DD    00 00 00 00 00 00 00 00
register DE    00 00 00 00 00 00 00 00
register DF    00 00 00 00 00 00 00 00
register E0    00 00 00 00 00 00 00 00
register E1    00 00 00 00 00 00 00 00
register E2    00 00 00 00 00 00 00 00
register E3    00 00 00 00 00 00 00 00
register E4    00 00 00 00 00 00 00 00
register E5    00 00 00 00 00 00 00 00
register E6    00 00 00 00 00 00 00 00
register E7    00 00 00 00 00 00 00 00
register E8    00 00 00 00 00 00 00 00
register E9    00 00 00 00 00 00 00 00
register EA    00 00 00 00 00 00 00 00
register EB    00 00 00 00 00 00 00 00
register EC    00 00 00 00 00 00 00 00
register ED    00 00 00 00 00 00 00 00
register EE    00 00 00 00 00 00 00 00
register EF    00 00 00 00 00 00 00 00  ***
register F0    00 00 00 00 00 00 00 00
register F1    00 00 00 00 00 00 00 00
register F2    00 00 00 00 00 00 00 00
register F3    00 00 00 00 00 00 00 00
register F4    00 00 00 00 00 00 00 00
register F5    00 00 00 00 00 00 00 00
register F6    00 00 00 00 00 00 00 00
register F7    00 00 00 00 00 00 00 00
register F8    00 00 00 00 00 00 00 00
register F9    00 00 00 00 00 00 00 00
register FA    00 00 00 00 00 00 00 00
register FB    00 00 00 00 00 00 00 00
register FC    00 00 00 00 00 00 00 00
register FD    00 00 00 00 00 00 00 00
register FE    00 00 00 00 00 00 00 00
register FF    00 00 00 00 00 00 00 00

 

slider
Offline
Зарегистрирован: 17.06.2014

 

о, как :) . Неужто вы подключили проводками на портА иль С к Меге ?   Из этого лога только видно что он 320x240 из регистров 2A и 2С . В регистре D3 должно было лежать 9341 . Читалки это не панацея (крайне редко ID запрятан глубоко, т.е. только косвенные признаки, в таких случаях лучше уж тупо просто перебрать распространенные иниты) . 

Раз у шилда адафруитстая распиновка , то вставьте шилд в Уно и запустите графические примерчики что с последней библиотекой адафруита (на гихабе к примеру), они в сериал монитор кидают известные им ID . Вот их лог и выложите.

поищите по форуму 2.4    и   0x4535 (хотя setxy у него отлична от ili9341 ) 

если что, у адафруита есть 2 либы по ili9341 - 8бит как у вас и SPI

я так понял проблема только с BGR - RGB ? поищите BGR  по даташитам подходящих инитов дисплеев .

иначе , по поводу  правильной цветопередачи м.б.:  

1. неподходящий инит  

2. неправильные настройки инита (гамма коррекция, регистр упр. матрицей к примеру по даташиту ili9341 это бит BGR в регистре 36h и еще упоминание BGR есть в бите SS в регистре  B6h  .  Прочитайте еще про регистр F6h   бит ENDIAN

3. непропай или сопля (тогда помимо  и координаты нарушаться)        

4. не та битность дисплея 8/9  16/18 бит (отдирать дисп и смотреть на шлейф , возможность уст. правильную битность перемычками или выводами IM )  . Ваша програмная примочка из 2го сообщения comment-251940   дает белый цвет? гляньте по даташиту ili9341 различие кодировки цветности 8 и 9 бит при параллельном интерфейсе :  7.6.3. 8-bit Parallel MCU Interface  и   7.6.4. 9-bit Parallel MCU Interface , там с цветными картинками кодировки цветов все показано

5. дефектный дисп или подделка

вот чтение регистров с нормального ili9341  , в регистре D3h лежит 9341 :

               1p 2p 3p 4p 5p 6p 7p 8parameter(byte)
      
register 00    00 00 00 00 00 00 00 00  ***
      
register 00    00 00 00 00 00 00 00 00  ***
register 01    00 00 00 00 00 00 00 00
register 02    00 00 00 00 00 00 00 00
register 03    00 00 00 00 00 00 00 00
register 04    00 00 00 00 00 00 00 00  ***
register 05    00 00 00 00 00 00 00 00
register 06    00 00 00 00 00 00 00 00
register 07    00 00 00 00 00 00 00 00
register 08    00 00 00 00 00 00 00 00
register 09    00 00 61 00 00 00 00 00
register 0A    00 08 00 00 00 00 00 00
register 0B    00 00 00 00 00 00 00 00
register 0C    00 06 00 00 00 00 00 00
register 0D    00 00 00 00 00 00 00 00
register 0E    00 00 00 00 00 00 00 00
register 0F    00 00 00 00 00 00 00 00
register 10    00 00 00 00 00 00 00 00
register 11    00 00 00 00 00 00 00 00
register 12    00 00 00 00 00 00 00 00
register 13    00 00 00 00 00 00 00 00
register 14    00 00 00 00 00 00 00 00
register 15    00 00 00 00 00 00 00 00
register 16    00 00 00 00 00 00 00 00
register 17    00 00 00 00 00 00 00 00
register 18    00 00 00 00 00 00 00 00
register 19    00 00 00 00 00 00 00 00
register 1A    00 00 00 00 00 00 00 00
register 1B    00 00 00 00 00 00 00 00
register 1C    00 00 00 00 00 00 00 00
register 1D    00 00 00 00 00 00 00 00
register 1E    00 00 00 00 00 00 00 00
register 1F    00 00 00 00 00 00 00 00
register 20    00 00 00 00 00 00 00 00
register 21    00 00 00 00 00 00 00 00
register 22    00 00 00 00 00 00 00 00
register 23    00 00 00 00 00 00 00 00
register 24    00 00 00 00 00 00 00 00
register 25    00 00 00 00 00 00 00 00
register 26    00 00 00 00 00 00 00 00
register 27    00 00 00 00 00 00 00 00
register 28    00 00 00 00 00 00 00 00
register 29    00 00 00 00 00 00 00 00
register 2A    00 00 00 00 00 00 00 00
register 2B    00 00 00 00 00 00 00 00
register 2C    00 00 00 00 00 00 00 00
register 2D    00 00 00 00 00 00 00 00
register 2E    00 54 54 54 A8 A8 A8 A8
register 2F    00 00 00 00 00 00 00 00
register 30    00 00 00 00 00 00 00 00
register 31    00 00 00 00 00 00 00 00
register 32    00 00 00 00 00 00 00 00
register 33    00 00 00 00 00 00 00 00
register 34    00 00 00 00 00 00 00 00
register 35    00 00 00 00 00 00 00 00
register 36    00 00 00 00 00 00 00 00
register 37    00 00 00 00 00 00 00 00
register 38    00 00 00 00 00 00 00 00
register 39    00 00 00 00 00 00 00 00
register 3A    00 00 00 00 00 00 00 00
register 3B    00 00 00 00 00 00 00 00
register 3C    00 00 00 00 00 00 00 00
register 3D    00 00 00 00 00 00 00 00
register 3E    00 54 54 54 54 54 54 A8
register 3F    00 00 00 00 00 00 00 00
register 40    00 00 00 00 00 00 00 00
register 41    00 00 00 00 00 00 00 00
register 42    00 00 00 00 00 00 00 00
register 43    00 00 00 00 00 00 00 00
register 44    00 00 00 00 00 00 00 00
register 45    00 00 00 00 00 00 00 00
register 46    00 00 00 00 00 00 00 00
register 47    00 00 00 00 00 00 00 00
register 48    00 00 00 00 00 00 00 00
register 49    00 00 00 00 00 00 00 00
register 4A    00 00 00 00 00 00 00 00
register 4B    00 00 00 00 00 00 00 00
register 4C    00 00 00 00 00 00 00 00
register 4D    00 00 00 00 00 00 00 00
register 4E    00 00 00 00 00 00 00 00
register 4F    00 00 00 00 00 00 00 00
register 50    00 00 00 00 00 00 00 00
register 51    00 00 00 00 00 00 00 00
register 52    00 00 00 00 00 00 00 00
register 53    00 00 00 00 00 00 00 00
register 54    00 00 00 00 00 00 00 00
register 55    00 00 00 00 00 00 00 00
register 56    00 00 00 00 00 00 00 00
register 57    00 00 00 00 00 00 00 00
register 58    00 00 00 00 00 00 00 00
register 59    00 00 00 00 00 00 00 00
register 5A    00 00 00 00 00 00 00 00
register 5B    00 00 00 00 00 00 00 00
register 5C    00 00 00 00 00 00 00 00
register 5D    00 00 00 00 00 00 00 00
register 5E    00 00 00 00 00 00 00 00
register 5F    00 00 00 00 00 00 00 00
register 60    00 00 00 00 00 00 00 00
register 61    00 00 00 00 00 00 00 00
register 62    00 00 00 00 00 00 00 00
register 63    00 00 00 00 00 00 00 00
register 64    00 00 00 00 00 00 00 00
register 65    00 00 00 00 00 00 00 00
register 66    00 00 00 00 00 00 00 00
register 67    00 00 00 00 00 00 00 00
register 68    00 00 00 00 00 00 00 00
register 69    00 00 00 00 00 00 00 00
register 6A    00 00 00 00 00 00 00 00
register 6B    00 00 00 00 00 00 00 00
register 6C    00 00 00 00 00 00 00 00
register 6D    00 00 00 00 00 00 00 00
register 6E    00 00 00 00 00 00 00 00
register 6F    00 00 00 00 00 00 00 00
register 70    00 00 00 00 00 00 00 00
register 71    00 00 00 00 00 00 00 00
register 72    00 00 00 00 00 00 00 00
register 73    00 00 00 00 00 00 00 00
register 74    00 00 00 00 00 00 00 00
register 75    00 00 00 00 00 00 00 00
register 76    00 00 00 00 00 00 00 00
register 77    00 00 00 00 00 00 00 00
register 78    00 00 00 00 00 00 00 00
register 79    00 00 00 00 00 00 00 00
register 7A    00 00 00 00 00 00 00 00
register 7B    00 00 00 00 00 00 00 00
register 7C    00 00 00 00 00 00 00 00
register 7D    00 00 00 00 00 00 00 00
register 7E    00 00 00 00 00 00 00 00
register 7F    00 00 00 00 00 00 00 00
register 80    00 00 00 00 00 00 00 00
register 81    00 00 00 00 00 00 00 00
register 82    00 00 00 00 00 00 00 00
register 83    00 00 00 00 00 00 00 00
register 84    00 00 00 00 00 00 00 00
register 85    00 00 00 00 00 00 00 00
register 86    00 00 00 00 00 00 00 00
register 87    00 00 00 00 00 00 00 00
register 88    00 00 00 00 00 00 00 00
register 89    00 00 00 00 00 00 00 00
register 8A    00 00 00 00 00 00 00 00
register 8B    00 00 00 00 00 00 00 00
register 8C    00 00 00 00 00 00 00 00
register 8D    00 00 00 00 00 00 00 00
register 8E    00 00 00 00 00 00 00 00
register 8F    00 00 00 00 00 00 00 00
register 90    00 00 00 00 00 00 00 00
register 91    00 00 00 00 00 00 00 00
register 92    00 00 00 00 00 00 00 00
register 93    00 00 00 00 00 00 00 00
register 94    00 00 00 00 00 00 00 00
register 95    00 00 00 00 00 00 00 00
register 96    00 00 00 00 00 00 00 00
register 97    00 00 00 00 00 00 00 00
register 98    00 00 00 00 00 00 00 00
register 99    00 00 00 00 00 00 00 00
register 9A    00 00 00 00 00 00 00 00
register 9B    00 00 00 00 00 00 00 00
register 9C    00 00 00 00 00 00 00 00
register 9D    00 00 00 00 00 00 00 00
register 9E    00 00 00 00 00 00 00 00
register 9F    00 00 00 00 00 00 00 00
register A0    00 00 00 00 00 00 00 00
register A1    00 00 00 00 00 00 00 00
register A2    00 00 00 00 00 00 00 00
register A3    00 00 00 00 00 00 00 00
register A4    00 00 00 00 00 00 00 00
register A5    00 00 00 00 00 00 00 00
register A6    00 00 00 00 00 00 00 00
register A7    00 00 00 00 00 00 00 00
register A8    00 00 00 00 00 00 00 00
register A9    00 00 00 00 00 00 00 00
register AA    00 00 00 00 00 00 00 00
register AB    00 00 00 00 00 00 00 00
register AC    00 00 00 00 00 00 00 00
register AD    00 00 00 00 00 00 00 00
register AE    00 00 00 00 00 00 00 00
register AF    00 00 00 00 00 00 00 00
register B0    00 00 00 00 00 00 00 00
register B1    00 00 1B 1B 1B 1B 1B 1B
register B2    00 00 1B 1B 1B 1B 1B 1B
register B3    00 00 1B 1B 1B 1B 1B 1B
register B4    00 02 00 00 00 00 00 00
register B5    00 02 02 0A 14 14 14 14
register B6    00 0A 82 27 04 00 00 00
register B7    00 06 06 06 06 06 06 06
register B8    00 0C 0C 0C 0C 0C 0C 0C
register B9    00 CC CC CC CC CC CC CC
register BA    00 04 04 04 04 04 04 04
register BB    00 65 65 65 65 65 65 65
register BC    00 44 44 44 44 44 44 44
register BD    00 00 00 00 00 00 00 00
register BE    00 0F 0F 0F 0F 0F 0F 0F
register BF    00 00 00 00 00 00 00 00  ***
register C0    00 21 00 00 00 00 00 00
register C1    00 10 10 10 10 10 10 10
register C2    00 00 00 00 00 00 00 00
register C3    00 00 00 00 00 00 00 00
register C4    00 00 00 00 00 00 00 00
register C5    00 31 3C 3C 3C 3C 3C 3C
register C6    00 00 00 00 00 00 00 00
register C7    00 C0 C0 C0 C0 C0 C0 C0
register C8    00 00 00 00 00 00 00 00
register C9    00 55 32 E4 00 00 00 00
register CA    00 C3 00 3C 3C 3C 3C 3C
register CB    00 39 2C 00 30 01 01 01
register CC    00 70 07 07 07 07 07 07
register CD    00 0A 0A 0A 0A 0A 0A 0A
register CE    00 50 42 00 00 00 00 00
register CF    00 00 81 30 30 30 30 30
register D0    00 00 00 00 00 00 00 00
register D1    00 00 00 00 00 00 00 00
register D2    00 01 00 02 02 02 02 02
register D3    00 00 93 41 41 41 41 41  ***
register D4    00 00 00 00 00 00 00 00
register D5    00 00 00 00 00 00 00 00
register D6    00 00 00 00 00 00 00 00
register D7    00 00 00 00 00 00 00 00
register D8    00 00 00 00 00 00 00 00
register D9    00 00 00 00 00 00 00 00
register DA    00 00 00 00 00 00 00 00  ***
register DB    00 00 00 00 00 00 00 00  ***
register DC    00 00 00 00 00 00 00 00  ***
register DD    00 C1 C1 C1 C1 C1 C1 C1
register DE    00 00 00 00 00 04 04 04
register DF    00 FF 0F FF 0F FF 0F FF
register E0    00 0F 16 14 0A 0D 06 43
register E1    00 08 2B 2D 04 10 04 3E
register E2    00 00 00 00 00 00 00 00
register E3    00 00 00 00 00 00 00 00
register E4    00 00 00 00 00 00 00 00
register E5    00 00 00 00 00 00 00 00
register E6    00 00 00 00 00 00 00 00
register E7    00 00 00 00 00 00 00 00
register E8    00 84 11 7A 7A 7A 7A 7A
register E9    00 04 11 7A 7A 7A 7A 7A
register EA    00 66 00 00 00 00 00 00
register EB    00 00 00 00 00 00 00 00
register EC    00 00 00 00 00 00 00 00
register ED    00 55 01 23 01 01 01 01
register EE    00 11 01 01 01 01 01 01
register EF    00 03 80 02 02 02 02 02  ***
register F0    00 00 00 00 00 00 00 00
register F1    00 00 00 00 00 00 00 00
register F2    00 02 02 02 02 02 02 02
register F3    00 0B 00 00 00 00 00 00
register F4    00 00 00 00 00 00 00 00
register F5    00 00 00 00 00 00 00 00
register F6    00 01 00 00 00 00 00 00
register F7    00 10 10 10 10 10 10 10
register F8    00 03 03 03 03 03 03 03
register F9    00 70 70 70 70 70 70 70
register FA    00 47 47 47 47 47 47 47
register FB    00 47 47 47 47 47 47 47
register FC    00 00 00 00 00 00 00 00
register FD    00 00 00 00 00 00 00 00
register FE    00 00 00 00 00 00 00 00
register FF    00 00 00 00 00 00 00 00
Euronimus
Offline
Зарегистрирован: 18.12.2016

Подключал к меге к тем пинам которые указаны в описании к програме, насколько я понял это и есть портА (22-29 пины). Разрешение дисплея верное. 

Как я уже писал выше для этого дисплея подошел инит от ili9341, в команду 0х36 вводится параметр 0х48, если я все правильно понял, то 0х08 это как раз и есть бит BGR. Но отключение этого бита и ввод параметра 0х40 - ничего не дает, изменение других битов данной команды - вращает/отражает изображение на экране.

Адафруит так же не может определить ИД и в лог выводит прочитаный ид 0, и ни одна программа из примеров не запускается, для запуска программ я скармливаю библиотеке ид 0x9341 в строке tft.begin(0x9341).

Лазил по даташиту, искал все команды связанные с выводом цвета, но никаких успехов не добился.

2. вечером гляну еще раз, попробую поиграть с битами.

3. я заметил, что изображение выводится вверх ногами, так же коогдинаты сенсора сдвинуты относительно дисплея на -90гр. (по часово стрелке). Вы про такие нарушения координат?

4. Так же вечером гляну на шлейф. Примочка дает адекватные цвета и белый в том числе, она ведь не инвертирует биты, а лишь зеркально отражает каждый байт и меняет их местами:

11111000 00000000 -> 00000000 00011111

5. Насчет подделки вероятность стремится к 100% https://ru.aliexpress.com/item/For-Arduino-UNO-2-4-inch-TFT-touch-screen-supporting-For-UNO-R3/1625923145.html?spm=2114.13010608.0.0.tr23SC

В следующий раз буду знать, что именно заказывать

Euronimus
Offline
Зарегистрирован: 18.12.2016

Оторвал дисплей от платы, проверил пайку - холодной пайки нет. шлейф целый, без деффектов.

Искал информацию про пин IM, но ничего не нашел

в библиотеке прописана инициализация 8 битного порта writeRegister8(ILI9341_PIXELFORMAT, 0x55), если попробовать задать 9 битный порт - 0х66, то дисплей отображает 

slider
Offline
Зарегистрирован: 17.06.2014

Euronimus, попробуйте http://arduino.ru/forum/apparatnye-voprosy/arduino-i-displei-ot-sotikov-mobilnykh-telefonov?page=5#comment-264976

1. что выдаст читалка v5.1 ? 

2. попробовать скетч от MCUFRIEND ,

3. попробовать UTFT запиленный под LCD TFT 2.4" R61526 arduino uno  .

Euronimus
Offline
Зарегистрирован: 18.12.2016

На днях попробую, о результатах отпишусь. Спасибо за ссылку.

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

Из своего опыта борьбы с таким дисплеем, скажу что лично у меня не получилось запустить его с UTFT. Только Adafruit. И то после непродолжительных танцев с бубном. Искать "правильную" библиотеку всё равно что искать стандартный ключ от нестандартного замка - бред. Китайпром производит контроллеры быстрее, чем обновляются библиотеки их управления.

Насчет инверсии цвета особо высказываться не могу, поскольку не разбираюсь во всех этих тонкостях с байтами и регистрами. На мой взгляд это может быть банальная ложная пайка где-то на плате. Однако так же это может быть и несоответствие в софте.

Когда пытался засветить свой дисплей 9341, копал только в единственно доступном мне напралении - библиотеки, однако опять же без осознания смысла происходящего. Помнится что в результате пару раз проскакивала инверсия цвета. Но сейчас - все работает как надо, но, к сожалению - на Adafruit. Еще помнится там у меня был какой-то нестандартный способ инициализации дисплея. Сейчас посмотрю.

Adafruit_TFTLCD tft(A3, A2, A1, A0, A4);

void setup()
{
  tft.reset();
  tft.begin(0x9341);
  tft.fillScreen(BLACK);

Вот только такая комбинация засветила мой ILI9341.

Euronimus
Offline
Зарегистрирован: 18.12.2016

Наконец снова добрался до этого дисплея и в какомто смысле победил его. Теперь цвета выводит правильно.

 У дисплея ili9341 запись цвета в регистр памяти производится со старшего байта.
 Мне попался дисплей с "перевернутой" памятью: при записи цвета дисплей считывает сначало младший байт и младший бит записывает в старший бит памяти:
напрмиер цвет 0хD5EA (В11010101 B11101010) будет отображаться на экране: 0x55FA (В01010101 В11111010)
Операции зеркального отражения битов в байтов и перетасовывания байтов местами не достаточно, т.к. каждый цвет оказался также перевернут.
Поэтому если попытаться вывести оттенок красного 0x8000 (R5 == B10000) мы увидим черный. Данному цвету для экрана соответствуют байты 0x0800 (R5 == B00001), которые явялются зеркальным откражением друг друга.
Хранение в памяти цвета RGB565 выглядит приблизительно так: нормальное представление цвета: rgb и перевернутое: qƃɹ
Аналогичная ситуация с зеленым и синим цветами.
 
Тыкание в регистры результатов не дало. Возможно, что биты регистров также перевернуты, но сомневаюсь в этом, т.к. некотоыре регистры всеже учавствуют в инициализации и без них дисплей не заводится.
 
Немного подправил библиотеку SPFD5408, добавил функции переворачивания цвета, а также преобразование цвета из 24бит (RGB888) в 16бит (RGB565).
В примеры добавил скетч с небольшим описанием.
 
alex_kotl
Offline
Зарегистрирован: 21.03.2018

Столкнулся с аналогичным дисплеем. В итоге экран адекватно заработал при выборе чипа R61526A вместо ili9341.

Euronimus
Offline
Зарегистрирован: 18.12.2016

А библиотеку не скинете?

alex_kotl
Offline
Зарегистрирован: 21.03.2018

https://yadi.sk/d/KT8dnNv63U5WnR

Не могу найти, где скачал; дал бы ссылку на оригинал))

alex_kotl
Offline
Зарегистрирован: 21.03.2018
alex_kotl
Offline
Зарегистрирован: 21.03.2018

Вот 100%-рабочий скетч с библиотекой UTFT

https://yadi.sk/d/6-04v7G53U5aKq

Euronimus
Offline
Зарегистрирован: 18.12.2016

Благодарю. Странно, что гугл мне не предлагал ссылку на сообщение слайдера, но давал ссылку на Ваше сообщение тут ))