TFT дисплей: инверсия цвета
- Войдите на сайт для отправки комментариев
Сб, 14/01/2017 - 12:15
Здравствуйте.
Приобрел дисплей на чипе 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), синий на красный и т.д. Именно поэтому мы получили голубоватый экран вместо жёлтого, а надпись, как и хотели, черную.
Но никак не могу понять, что требуется сделать, чтобы решить эту проблему.
С ардуино я новичек, поэтому прошу не ругать, если что-то не так написал.
Попытка менять значение ILI9341_MADCTL_BGR 0x08 в файле registers.h окончилась безрезультатно
Сам спросил - сам отвечаю
Нашел чудесный алгоритм, спасибо Генри Уоррену
привожу код, который накидал, для проверки работы алгортма
#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(); } }Я его внедрил в библиотеки, чтобы в дальнейшем не возникало проблем.
Возможно есть другой способ получить нормальные цвета на данном дисплее, но я нашел только этот.
Надеюсь, что кому- то пригодится
Очень надеюсь, что это никому не пригодится.
Бороться нужно с проблемой, а не с симптомами, тем более, что средство борьбы явно слишком ресурсоемкое для маломощного контроллера.
Проще библиотеку найти ту которая нужна, а не настраивать какую попало
Все дело в инициализации дисплея. Вы используете библиотеку (или настройки библиотеки для конкретного дисплея) которые похожи по инициализации но все же от другого контроллера. То есть вы используете инициализацию не того контроллера, который используете. Выхода два: либо искать нормальную библиотеку (не правленную), либо Вам нужно почитать даташит на контроллер дисплея, выяснить какой бит отвечает за что и "ручками" подправить инициализацию в библиотеке.
Почитайте эту тему: http://arduino.ru/forum/apparatnye-voprosy/arduino-i-displei-ot-sotikov-mobilnykh-telefonov?page=2#comment-216185 там с подобным сталкивались
я использовал для такого дисплея библиотеки отсюда
#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)
Цвета в коде определялись так: (код чужой)
UTFT utftDisplay(ILI9341_16,38,39,40,41); // откомпилировался, заработал, но не влезает в экран, потихоньку правим код
На изменение бита BGR, в параметре команды Memory Access Control (0х36), дисплей никак не реагирует, однако на изменение других битов данной команды дисплей поворачивает изображение.
Пытался я бороться с проблемой, просмотрел даташит, пробовал различные команды с различными парметрами - безтолку.
На изменение бита BGR, в параметре команды Memory Access Control (0х36), дисплей никак не реагирует, однако на изменение других битов данной команды дисплей поворачивает изображение.
Пытался я бороться с проблемой, просмотрел даташит, пробовал различные команды с различными парметрами - безтолку.
Библиотеки, что я привёл пробовали?
Пробовал, но к сожалению дисплей никак не отзывается. Немного покопался в библиотеке и понял, что она для дисплеев у которых зайдествованы пины 0(RX) и 1(TX). Но в модели которая у меня эти пины дисплея свободны.
Дальние, с правой стороны. Плата внешне отличается от той, что на картинке.
Обнаружил, что дисплей отзывается на инициализацию от ILI9341 и SPFD5408. Покопавшись в даташитах обнаружил, что некоторые адреса команд и их параметры совпадают.
Вам нужно точно определить что у вас за контроллер. Для этого есть специальные программы. Читайте здесь: http://arduino.ru/forum/apparatnye-voprosy/arduino-i-displei-ot-sotikov-mobilnykh-telefonov?page=1#comment-169922
Да и вообще перечитайте тему. Там много полезного.
Нашел рабочую библиотеку 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); // выводим текст на дисплейПри помощи читалки определите какой у вас контроллер, только после этого можно что-то конкретное делать. Ссылку давал выше
Не сразу понял, что от меня требуется. Выкладываю лог
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о, как :) . Неужто вы подключили проводками на портА иль С к Меге ? Из этого лога только видно что он 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Подключал к меге к тем пинам которые указаны в описании к програме, насколько я понял это и есть портА (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
В следующий раз буду знать, что именно заказывать
Оторвал дисплей от платы, проверил пайку - холодной пайки нет. шлейф целый, без деффектов.
Искал информацию про пин IM, но ничего не нашел
в библиотеке прописана инициализация 8 битного порта writeRegister8(ILI9341_PIXELFORMAT, 0x55), если попробовать задать 9 битный порт - 0х66, то дисплей отображает
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 .
На днях попробую, о результатах отпишусь. Спасибо за ссылку.
Из своего опыта борьбы с таким дисплеем, скажу что лично у меня не получилось запустить его с UTFT. Только Adafruit. И то после непродолжительных танцев с бубном. Искать "правильную" библиотеку всё равно что искать стандартный ключ от нестандартного замка - бред. Китайпром производит контроллеры быстрее, чем обновляются библиотеки их управления.
Насчет инверсии цвета особо высказываться не могу, поскольку не разбираюсь во всех этих тонкостях с байтами и регистрами. На мой взгляд это может быть банальная ложная пайка где-то на плате. Однако так же это может быть и несоответствие в софте.
Когда пытался засветить свой дисплей 9341, копал только в единственно доступном мне напралении - библиотеки, однако опять же без осознания смысла происходящего. Помнится что в результате пару раз проскакивала инверсия цвета. Но сейчас - все работает как надо, но, к сожалению - на Adafruit. Еще помнится там у меня был какой-то нестандартный способ инициализации дисплея. Сейчас посмотрю.
Adafruit_TFTLCD tft(A3, A2, A1, A0, A4); void setup() { tft.reset(); tft.begin(0x9341); tft.fillScreen(BLACK);Вот только такая комбинация засветила мой ILI9341.
Наконец снова добрался до этого дисплея и в какомто смысле победил его. Теперь цвета выводит правильно.
Столкнулся с аналогичным дисплеем. В итоге экран адекватно заработал при выборе чипа R61526A вместо ili9341.
А библиотеку не скинете?
https://yadi.sk/d/KT8dnNv63U5WnR
Не могу найти, где скачал; дал бы ссылку на оригинал))
Нашел, где читал:
http://arduino.ru/forum/apparatnye-voprosy/arduino-i-displei-ot-sotikov-mobilnykh-telefonov?page=5#comment-264976
Вот 100%-рабочий скетч с библиотекой UTFT
https://yadi.sk/d/6-04v7G53U5aKq
Благодарю. Странно, что гугл мне не предлагал ссылку на сообщение слайдера, но давал ссылку на Ваше сообщение тут ))