TFT 2.4 белый экран
- Войдите на сайт для отправки комментариев
Сб, 04/02/2017 - 16:19
Подскажите рабочую библиотеку для дисплея TFT 2.4.
На обратной стороне платы наклейка "8340". При тестировании скетчем LCD_ID_Reader Version 1.2, в монитор порта у меня отобразился адрес 0х000000. При подключении к UNO весь экран светится белым и ни на что не реагирует при загрузке любого скетча-тестера которые я находил.

ILI 9325 ILI9341
ILI 9325 ILI9341
К сожалению мне не помогло( скачивал от сюда: ссылка
Как был белый экран так и остался.
А эту читали? http://arduino.ru/forum/apparatnye-voprosy/arduino-uno-r3-lcd-24-tft
А эту читали? http://arduino.ru/forum/apparatnye-voprosy/arduino-uno-r3-lcd-24-tft
Да читал, не помогло. Китайчан скинул файл (это оригинал как он мне прислал его), там схемы, библиотеки, скетчи, некоторые даже компилируются:). Если серьезно то они рабочие, запускаются, НО мне не подошли, может кому то подойдет. До сих пор белый экран и разговор с продавцом не двигается дальше "чем я могу вам помочь?" и вот этого архива.
Спрашивал у продавца можел ли быть такое что шлейф поврежден. Ответа не последовало
в поиск по форуму: 2.4
// к тому же читалки и даже стандартная библиотека выдают в терминал гораздо больше инфы чем вы указали.
// к тому же читалки и даже стандартная библиотека выдают в терминал гораздо больше инфы чем вы указали.
0x9328 пробуй
там ноги нужно правильно указывать
Я адафрутовской пользуюсь, https://github.com/adafruit/TFTLCD-Library
// This sketch has been Refurbished by BUHOSOFT // IMPORTANT: Adafruit_TFTLCD LIBRARY MUST BE SPECIFICALLY // CONFIGURED FOR EITHER THE TFT SHIELD OR THE BREAKOUT BOARD. // SEE RELEVANT COMMENTS IN Adafruit_TFTLCD.h FOR SETUP. #include <Adafruit_GFX.h> // Core graphics library #include <Adafruit_TFTLCD.h> // Hardware-specific library // The control pins for the LCD can be assigned to any digital or // analog pins...but we'll use the analog pins as this allows us to // double up the pins with the touch screen (see the TFT paint example). #define LCD_CS A3 // Chip Select goes to Analog 3 #define LCD_CD A2 // Command/Data goes to Analog 2 #define LCD_WR A1 // LCD Write goes to Analog 1 #define LCD_RD A0 // LCD Read goes to Analog 0 #define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin #define DEBUG 1 // When using the BREAKOUT BOARD only, use these 8 data lines to the LCD: // For the Arduino Uno, Duemilanove, Diecimila, etc.: // D0 connects to digital pin 8 (Notice these are // D1 connects to digital pin 9 NOT in order!) // D2 connects to digital pin 2 // D3 connects to digital pin 3 // D4 connects to digital pin 4 // D5 connects to digital pin 5 // D6 connects to digital pin 6 // D7 connects to digital pin 7 // For the Arduino Mega, use digital pins 22 through 29 // (on the 2-row header at the end of the board). // Assign human-readable names to some common 16-bit color values: #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET); // If using the shield, all control and data lines are fixed, and // a simpler declaration can optionally be used: // Adafruit_TFTLCD tft; void setup(void) { #ifdef DEBUG Serial.begin(115200); Serial.println(F("TFT LCD test")); Serial.print("TFT size is "); Serial.print(tft.width()); Serial.print("x"); Serial.println(tft.height()); #endif // DEBUG tft.reset(); uint16_t identifier = tft.readID(); if(identifier == 0x9325) { #ifdef DEBUG Serial.println(F("Found ILI9325 LCD driver")); } else if(identifier == 0x9328) { Serial.println(F("Found ILI9328 LCD driver")); } else if(identifier == 0x7575) { Serial.println(F("Found HX8347G LCD driver")); } else if(identifier == 0x9341) { Serial.println(F("Found ILI9341 LCD driver")); } else if(identifier == 0x8357) { Serial.println(F("Found HX8357D LCD driver")); #endif // DEBUG } else { #ifdef DEBUG Serial.print(F("Unknown LCD driver chip: ")); Serial.println(identifier, HEX); Serial.print(F("I try use ILI9341 LCD driver ")); Serial.println(F("If using the Adafruit 2.8\" TFT Arduino shield, the line:")); Serial.println(F(" #define USE_ADAFRUIT_SHIELD_PINOUT")); Serial.println(F("should appear in the library header (Adafruit_TFT.h).")); Serial.println(F("If using the breakout board, it should NOT be #defined!")); Serial.println(F("Also if using the breakout, double-check that all wiring")); Serial.println(F("matches the tutorial.")); #endif // DEBUG identifier = 0x9341; } tft.begin(identifier); #ifdef DEBUG Serial.println(F("Benchmark Time (microseconds)")); Serial.print(F("Screen fill ")); Serial.println(testFillScreen()); delay(500); Serial.print(F("Text ")); Serial.println(testText()); delay(3000); Serial.print(F("Lines ")); Serial.println(testLines(CYAN)); delay(500); Serial.print(F("Horiz/Vert Lines ")); Serial.println(testFastLines(RED, BLUE)); delay(500); Serial.print(F("Rectangles (outline) ")); Serial.println(testRects(GREEN)); delay(500); Serial.print(F("Rectangles (filled) ")); Serial.println(testFilledRects(YELLOW, MAGENTA)); delay(500); Serial.print(F("Circles (filled) ")); Serial.println(testFilledCircles(10, MAGENTA)); Serial.print(F("Circles (outline) ")); Serial.println(testCircles(10, WHITE)); delay(500); Serial.print(F("Triangles (outline) ")); Serial.println(testTriangles()); delay(500); Serial.print(F("Triangles (filled) ")); Serial.println(testFilledTriangles()); delay(500); Serial.print(F("Rounded rects (outline) ")); Serial.println(testRoundRects()); delay(500); Serial.print(F("Rounded rects (filled) ")); Serial.println(testFilledRoundRects()); delay(500); Serial.println(F("Done!")); #endif // DEBUG } void loop(void) { for(uint8_t rotation=0; rotation<4; rotation++) { tft.setRotation(rotation); testText(); delay(2000); } testFilledRoundRects(); testRoundRects(); testFilledTriangles(); testTriangles(); testCircles(10, WHITE); testFillScreen(); testText(); testLines(CYAN); testFastLines(RED, BLUE); testRects(GREEN); testFilledRects(YELLOW, MAGENTA); testFilledCircles(10, MAGENTA); } unsigned long testFillScreen() { unsigned long start = micros(); tft.fillScreen(BLACK); tft.fillScreen(RED); tft.fillScreen(GREEN); tft.fillScreen(BLUE); tft.fillScreen(BLACK); return micros() - start; } unsigned long testText() { tft.fillScreen(BLACK); unsigned long start = micros(); tft.setCursor(0, 0); tft.setTextColor(WHITE); tft.setTextSize(1); tft.println("Hello World!"); tft.setTextColor(YELLOW); tft.setTextSize(2); tft.println(1234.56); tft.setTextColor(RED); tft.setTextSize(3); tft.println(0xDEADBEEF, HEX); tft.println(); tft.setTextColor(GREEN); tft.setTextSize(5); tft.println("Groop"); tft.setTextSize(2); tft.println("I implore thee,"); tft.setTextSize(1); tft.println("my foonting turlingdromes."); tft.println("And hooptiously drangle me"); tft.println("with crinkly bindlewurdles,"); tft.println("Or I will rend thee"); tft.println("in the gobberwarts"); tft.println("with my blurglecruncheon,"); tft.println("see if I don't!"); return micros() - start; } unsigned long testLines(uint16_t color) { unsigned long start, t; int x1, y1, x2, y2, w = tft.width(), h = tft.height(); tft.fillScreen(BLACK); x1 = y1 = 0; y2 = h - 1; start = micros(); for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color); x2 = w - 1; for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color); t = micros() - start; // fillScreen doesn't count against timing tft.fillScreen(BLACK); x1 = w - 1; y1 = 0; y2 = h - 1; start = micros(); for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color); x2 = 0; for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color); t += micros() - start; tft.fillScreen(BLACK); x1 = 0; y1 = h - 1; y2 = 0; start = micros(); for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color); x2 = w - 1; for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color); t += micros() - start; tft.fillScreen(BLACK); x1 = w - 1; y1 = h - 1; y2 = 0; start = micros(); for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color); x2 = 0; for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color); return micros() - start; } unsigned long testFastLines(uint16_t color1, uint16_t color2) { unsigned long start; int x, y, w = tft.width(), h = tft.height(); tft.fillScreen(BLACK); start = micros(); for(y=0; y<h; y+=5) tft.drawFastHLine(0, y, w, color1); for(x=0; x<w; x+=5) tft.drawFastVLine(x, 0, h, color2); return micros() - start; } unsigned long testRects(uint16_t color) { unsigned long start; int n, i, i2, cx = tft.width() / 2, cy = tft.height() / 2; tft.fillScreen(BLACK); n = min(tft.width(), tft.height()); start = micros(); for(i=2; i<n; i+=6) { i2 = i / 2; tft.drawRect(cx-i2, cy-i2, i, i, color); } return micros() - start; } unsigned long testFilledRects(uint16_t color1, uint16_t color2) { unsigned long start, t = 0; int n, i, i2, cx = tft.width() / 2 - 1, cy = tft.height() / 2 - 1; tft.fillScreen(BLACK); n = min(tft.width(), tft.height()); for(i=n; i>0; i-=6) { i2 = i / 2; start = micros(); tft.fillRect(cx-i2, cy-i2, i, i, color1); t += micros() - start; // Outlines are not included in timing results tft.drawRect(cx-i2, cy-i2, i, i, color2); } return t; } unsigned long testFilledCircles(uint8_t radius, uint16_t color) { unsigned long start; int x, y, w = tft.width(), h = tft.height(), r2 = radius * 2; tft.fillScreen(BLACK); start = micros(); for(x=radius; x<w; x+=r2) { for(y=radius; y<h; y+=r2) { tft.fillCircle(x, y, radius, color); } } return micros() - start; } unsigned long testCircles(uint8_t radius, uint16_t color) { unsigned long start; int x, y, r2 = radius * 2, w = tft.width() + radius, h = tft.height() + radius; // Screen is not cleared for this one -- this is // intentional and does not affect the reported time. start = micros(); for(x=0; x<w; x+=r2) { for(y=0; y<h; y+=r2) { tft.drawCircle(x, y, radius, color); } } return micros() - start; } unsigned long testTriangles() { unsigned long start; int n, i, cx = tft.width() / 2 - 1, cy = tft.height() / 2 - 1; tft.fillScreen(BLACK); n = min(cx, cy); start = micros(); for(i=0; i<n; i+=5) { tft.drawTriangle( cx , cy - i, // peak cx - i, cy + i, // bottom left cx + i, cy + i, // bottom right tft.color565(0, 0, i)); } return micros() - start; } unsigned long testFilledTriangles() { unsigned long start, t = 0; int i, cx = tft.width() / 2 - 1, cy = tft.height() / 2 - 1; tft.fillScreen(BLACK); start = micros(); for(i=min(cx,cy); i>10; i-=5) { start = micros(); tft.fillTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i, tft.color565(0, i, i)); t += micros() - start; tft.drawTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i, tft.color565(i, i, 0)); } return t; } unsigned long testRoundRects() { unsigned long start; int w, i, i2, cx = tft.width() / 2 - 1, cy = tft.height() / 2 - 1; tft.fillScreen(BLACK); w = min(tft.width(), tft.height()); start = micros(); for(i=0; i<w; i+=6) { i2 = i / 2; tft.drawRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(i, 0, 0)); } return micros() - start; } unsigned long testFilledRoundRects() { unsigned long start; int i, i2, cx = tft.width() / 2 - 1, cy = tft.height() / 2 - 1; tft.fillScreen(BLACK); start = micros(); for(i=min(tft.width(), tft.height()); i>20; i-=6) { i2 = i / 2; tft.fillRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(0, i, 0)); } return micros() - start; }Из своего опыта, была у меня одна ардуина УНО, китайская, все пины рабочие, но из дисплея всё время читала разные ID, я так с ней и неразобрался, приклеел бирку - с дисплеем не рулит и применил где-то где индикации нет.
а в сериал, что она отвечает?
Как в сктче и написано, отвечает
Serial.print(F("Unknown LCD driver chip: "));082Serial.println(identifier, HEX);0х0034 и другую муть, с нормальной ардуиной шилд сразу включился. Был 0ь9323
значит унка странная :) хорошо когда есть замена
Ага, или дисплей странный, не подходили они друг другу
Я адафрутовской пользуюсь, https://github.com/adafruit/TFTLCD-Library
Дополнено: А это просто распознавалка или он еще и рисует что то на экране? Спрашиваю потому что по коду он вроде рисует что то, но у меня все равно белый экран
Rotation test выдает например вот это, хотя там так же предусмотрен ILI9341
Меня смущает что на моей плате нет пина LCD_CD, вместо него LCD_RS
Там и написано -неизвестный 0. То есть не распознаёт
Там и написано -неизвестный 0. То есть не распознаёт
А нужно раскомментировать USE_ADAFRUIT_SHIELD_PINOUT если плату используешь или нет?
У меня закоментировано для Уно - //#define USE_ADAFRUIT_SHIELD_PINOUT 1
А еще бывает разная битность. По крайней мере я точно видел 16bit и 8bit это где меняется и может ли влиять на что то в моем случае?
Может быть с "Уной" проблеммы как можно проверить?
Разобрался с кодом выше: там
Поэтому у меня все замечательно отобразилось. Если не присваивать а именно считывать с дисплея, он 0 выдает
поищите читалку для адафруитских дисплеев здесь, которая опрашивает все регистры, и выложите что она ответила.
вот нашел http://arduino.ru/forum/apparatnye-voprosy/arduino-i-displei-ot-sotikov-mobilnykh-telefonov?page=4#comment-254691 Comondante выложил читалку и что она выдает
Интересная тема. Вот что выдала читалка:
Предполагаю что драйвер HX8340b или HX8340n или HX8340bn, но библиотеки не могу найти под ардуино и для 2,4". Нашел библиотеку, но она для 2,2", там SPY интерфейс. Можно как то портировать его что ли?
Дополнено: нашел на 8340 вот это: код инициализации (ссылка на архив), но как это использовать не знаю.
Дополнено2: Узнал как примерно использовать из темы предыдущего сообщения, но не помогло - экран белый.
Запустили? либа должна быть у китайцев, читали отзывы от таких же диспов на Али?
HX8340 врятли , у него меньшее разрешение , можете попробовать подключить проводами как в UTFT (с ним и даташит по подключению) , там есть HX8340 8 бит , выберите . RD на +5в .
пробуйте новую читалку v5.1 из http://arduino.ru/forum/apparatnye-voprosy/arduino-i-displei-ot-sotikov-mobilnykh-telefonov?page=5#comment-264976
у вас на шилде написано mcufriend , можете у них на сайте поискать либы к нему http://www.mcufriend.com/shop/html/?20.html
UNO накрылась... поэтому возможно ни один скетч и не работает. Распознал когда делал часы на ней - у меня чертичто на портах творилось, я уж и на библиотеки грешил и на модуль часов и на себя то любимого обязательно. Но вот как то так, в общем все грустно.
Я пробовал подлючить к NANO, но только один скетч адафруитовский пробовал. Тоже белый экран и там питания мне не хватило, экран начал тухнуть, я вырубил не стал больше так рисковать.
Думаю закупить нано и сделать отдельное питание от компьютерного БП. Должно ведь подойти?
Ну а скетч я обязательно выложу рабочий в эту тему как запустится все и заработает, т.к. проект в силе но надо закупить все.
Читалку новую попробую, спасибо
у меня st7781. с адафрутовскими читалками было также ... ноли... поставил Mcufriend все побежало. https://yadi.sk/d/LJ_SGe8knkRAs
У меня была схожая ситуация! Правда дисплей другой https://ru.aliexpress.com/item/3-2-TFT-LCD-Display-module-Touch-Screen-Shield-board-onboard-temperature-sensor-w-Touch-Pen/32755473754.html?spm=2114.13010608.0.0.xMqTk9 . Все грузилось, но экран светился белым. Оказалось, что под W8 имя пользователя на русском написано. А по этому в пути C:\....\пользователи\ИМЯ\докумены\....\Arduino... пишутся библиотеки дополнительные и промежуточные файлы. Создав другого юзера на латинице - все заработало!
Оказалось, что под W8 имя пользователя на русском написано.
Полезное замечание, может кому то пригодится, но у меня на инглише. Думаю что из-за uno, так что друзья еще и arduino свои на исправность проверяйте
Дошли руки до нее попробую на Нано если найду размер маленький библиотеки
у меня st7781. с адафрутовскими читалками было также ... ноли... поставил Mcufriend все побежало. https://yadi.sk/d/LJ_SGe8knkRAs
В вашей библиотеке ошибка на некий CS_IDLE ругается
пробуйте новую читалку v5.1 из http://arduino.ru/forum/apparatnye-voprosy/arduino-i-displei-ot-sotikov-mobilnykh-telefonov?page=5#comment-264976
Читалка не влезла в НАНО, попробовать не удалось.
пробуйте новую читалку v5.1 из http://arduino.ru/forum/apparatnye-voprosy/arduino-i-displei-ot-sotikov-mobilnykh-telefonov?page=5#comment-264976
Читалка не влезла в НАНО, попробовать не удалось.
[/quote]
#include <Adafruit_TFTLCD.h> // Hardware-specific library // The control pins for the LCD can be assigned to any digital or // analog pins...but we'll use the analog pins as this allows us to // double up the pins with the touch screen (see the TFT paint example). #define LCD_CS A3 // Chip Select goes to Analog 3 #define LCD_CD A2 // Command/Data goes to Analog 2 #define LCD_WR A1 // LCD Write goes to Analog 1 #define LCD_RD A0 // LCD Read goes to Analog 0 #define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin // When using the BREAKOUT BOARD only, use these 8 data lines to the LCD: // For the Arduino Uno, Duemilanove, Diecimila, etc.: // D0 connects to digital pin 8 (Notice these are // D1 connects to digital pin 9 NOT in order!) // D2 connects to digital pin 2 // D3 connects to digital pin 3 // D4 connects to digital pin 4 // D5 connects to digital pin 5 // D6 connects to digital pin 6 // D7 connects to digital pin 7 // For the Arduino Mega, use digital pins 22 through 29 // (on the 2-row header at the end of the board). Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET); void setup(void) { Serial.begin(9600); Serial.println(" ");Serial.println(" "); Serial.println(F("v5.2 read all register + read ID ")); tft.reset(); uint16_t identifier = tft.readID(); // 0x9341; uint8_t minimal = 0; Serial.println(" "); if(identifier == 0x9325) { Serial.println(F("Found ILI9325 LCD driver")); } else if(identifier == 0x9328) { Serial.println(F("Found ILI9328 LCD driver")); } else if(identifier == 0x7575) { Serial.println(F("Found HX8347G LCD driver")); } else if(identifier == 0x9341) { Serial.println(F("Found ILI9341 LCD driver")); } else if(identifier == 0x8357) { Serial.println(F("Found HX8357D LCD driver")); } else { Serial.print(F("Unknown LCD driver chip: ")); Serial.println(identifier, HEX); Serial.println(F("***use minimal init as driver ili9341 ili9488 *** ->")); identifier = 0x9341; // если чип не найден, то принудительно минимальный инит подобных ili9341 ili9488 minimal=1; //return; } } void loop(void) { }Ну да :) знал бы не купил, повелся на то что нано v3 какая то новая была на тот момент.
Попробовал я снова на мсфренд заходил их библиотеки брал, перебрал все адафруитовские скачанные которые влезли и удавалось размер уменьшить - результата нет. хоть плачь я не знаю. попробую читалку сжать вечером напишу
уже сжал , выше ее и выложил (упрощенный скетч для atmega168).
важен весь ответ, он должен быть такой большой:
v5.2 read all register + read ID
Unknown LCD driver chip: 0
***use minimal init as driver ili9341 ili9488 *** ->
Если питание не подавать на мониторчик, то выводит С0С0 или FEFE но это я думаю неправильно
У меня тоже аналогичная проблема. Какие только библиотек не применял, одно и то же, белый экран. Может мне не рабочий дисплей попался?
прозвоните шлеф, может контакт хреновый, еще внимание обратите на поведение выхода rst как он себя ведет при запуске
Что в rst проверять? Напряжение? Уточните пжл чайнику ; )
у меня st7781. с адафрутовскими читалками было также ... ноли... поставил Mcufriend все побежало. https://yadi.sk/d/LJ_SGe8knkRAs
В вашей библиотеке ошибка на некий CS_IDLE ругается
код киньте .. и ошбочку тоже... возможно не указан пин CS?
ну почти, лог.уровни
внимание обратите на поведение выхода rst как он себя ведет при запуске
можно по подробнее?
по rst ... его вообще не обяз подключать ..... я на своем выкусил и порт использую... есть пара статей в инете что надо ссделать .... щас лень искать... но поиск что то как освобоить пины на 2.4 tft lcd
на землю его нужно. не обяз.? а если от наводок он будет ресетиться постоянно?
rst лучше к rst ардуины . вот пример с вырезанными 3мя пинами на UTFT http://arduino.ru/forum/apparatnye-voprosy/arduino-i-displei-ot-sotikov-mobilnykh-telefonov?page=1#comment-167595
также к примеру (rst-rst) необходимо делать в некоторых либах с SPI дисплеями http://arduino.ru/forum/apparatnye-voprosy/28-spi-tft-podklyuchenie#comment-160676
Спасибо, попробую на выходных
>>на землю его нужно. не обяз.? а если от наводок он будет ресетиться постоянно?
Возможно .... но пока ни разу не резетнулся... если вы говорите на землю.. то это тоже свободный пин ардуинки ) запомню
Кто разбирал, скажите нормально что дорожки объеденины перед шлейфом (ну или после него)?