OPEN SMART Uno R3 Air

Rankle
Offline
Зарегистрирован: 31.10.2020

Добрый день. Помогите разобраться с белым экраном. Тема "заезжанная" как я понимаю до нельзя. Я решил сам найти решение. Три дня "убил". Пересмотрел кучу видео, скачал штук 20 библиотек, примеров скетчей наверное штук 40 перепробовал. Не могу понять почему результат одинаковый: белый экран.

https://aliexpress.ru/item/32964204802.html?spm=a2g0s.9042311.0.0.264d33...

 

Вот такое вот устройство. Скачаливал и OPENSMART, и MCUFRIEND_kbv, touch screen, ili9488, и ещё куча других библиотек с примерами. Не один не работает. 

Причём что интересно, у меня не тот TFT что на видео на Али (где я покупал). И пример на видео выбирают тоже для другого контроллера.

Я уже скачал библиотеку ili9488 (как на моём TFT написано). Попробовал сам писать скетч. Столкнулся с проблемой: создание объекта TFT.

Назначение выводов (TFT -- Ардуино)

 GND      -- GND
 3V3      -- 3.3V
 CS       -- A3
 RS (x-)  -- A2
 WR (y+)  -- A1
 RD       -- A0
 RST      -- RST
 LED      -- GND
 DB0      -- D8
 DB1      -- D9
 DB2      -- D10
 DB3      -- D11
 DB4      -- D4
 DB5      -- D13
 DB6 (x+) -- D6
 DB7 (y-) -- D7

Так вот что бы создать объект TFT: 

ILI9488 tft = ILI9488(TFT_CS, TFT_DC, TFT_RST);

Что надо ставить вместо TFT_RST?

ILI9488 tft = ILI9488(A3, A2, ?);

Или я двигаюсь не в том направлении?

Вот скетч:

#include <Adafruit_GFX.h>    // Core graphics library
#include <ILI9488.h>

#define TFT_CS         A3
#define TFT_DC         A2
#define TFT_LED        GND
#define TFT_RST        ?

ILI9488 tft = ILI9488(TFT_CS, TFT_DC, TFT_RST);

// TFT Breakout  -- Arduino UNO / Mega2560 / OPEN-SMART UNO Black
// GND      -- GND
// 3V3      -- 3.3V
// CS       -- A3
// RS (x-)  -- A2
// WR (y+)  -- A1
// RD       -- A0
// RST      -- RST
// LED      -- GND
// DB0      -- D8
// DB1      -- D9
// DB2      -- D10
// DB3      -- D11
// DB4      -- D4
// DB5      -- D13
// DB6 (x+) -- D6
// DB7 (y-) -- D7

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


void setup(void) 
{
  tft.begin();
  tft.fillScreen(BLUE);
  delay(1000);
}

void loop(void) 
{
}

Я пробовал загружать какой-то скетч (не помню, нанадцатый по счёту). В нем был вывод в serial того что должно выводится на TFT. Так вот в serial пишет что отрисовалось столько то линий, столько то кругов и т.д. А TFT как был белый так и остался белый.

Alexey_Rem
Offline
Зарегистрирован: 09.09.2019

У меня когда-то получиось с библиотекой UTFT

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Rankle пишет:

Что надо ставить вместо TFT_RST?

ILI9488 tft = ILI9488(A3, A2, ?);

на вашем дисплее есть пин RST

работал с TFT 240 *320 на ESP32, тут я думаю аналогично, прекрасно заработали примеры из библиотеки Adafruit

#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"

#define _cs   17  // goes to TFT CS
#define _dc   16  // goes to TFT DC
#define _mosi 23  // goes to TFT MOSI
#define _sclk 18  // goes to TFT SCK/CLK
#define _rst  5   // goes to TFT RESET
#define _miso     // Not connected
//       3.3V     // Goes to TFT LED
//       5v       // Goes to TFT Vcc
//       Gnd      // Goes to TFT Gnd

// Use hardware SPI
Adafruit_ILI9341 tft = Adafruit_ILI9341(_cs, _dc, _rst);

-

/***************************************************
  This is our GFX example for the Adafruit ILI9341 Breakout and Shield
  ----> http://www.adafruit.com/products/1651

  Check out the links above for our tutorials and wiring diagrams
  These displays use SPI to communicate, 4 or 5 pins are required to
  interface (RST is optional)
  Adafruit invests time and resources providing this open source code,
  please support Adafruit and open-source hardware by purchasing
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.
  MIT license, all text above must be included in any redistribution
 ****************************************************/

#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"

#define _cs   17  // goes to TFT CS
#define _dc   16  // goes to TFT DC
#define _mosi 23  // goes to TFT MOSI
#define _sclk 18  // goes to TFT SCK/CLK
#define _rst  5   // goes to TFT RESET
#define _miso     // Not connected
//       3.3V     // Goes to TFT LED  
//       5v       // Goes to TFT Vcc
//       Gnd      // Goes to TFT Gnd        

// Use hardware SPI
Adafruit_ILI9341 tft = Adafruit_ILI9341(_cs, _dc, _rst);

// If using software SPI change pins as desired
//Adafruit_ILI9341 tft = Adafruit_ILI9341(_cs, _dc, _mosi, _sclk, _rst);

void setup() {
  Serial.begin(115200);
  Serial.println("ILI9341 Test!"); 
 
  tft.begin();tft.setRotation(3);tft.fillScreen(ILI9341_BLACK); tft.setTextSize(3);tft.println("Starting...");delay(1000);
  tft.fillScreen(ILI9341_BLACK);
  // read diagnostics (optional but can help debug problems)
  uint8_t x = tft.readcommand8(ILI9341_RDMODE);
  Serial.print("Display Power Mode: 0x"); Serial.println(x, HEX);
  x = tft.readcommand8(ILI9341_RDMADCTL);
  Serial.print("MADCTL Mode: 0x"); Serial.println(x, HEX);
  x = tft.readcommand8(ILI9341_RDPIXFMT);
  Serial.print("Pixel Format: 0x"); Serial.println(x, HEX);
  x = tft.readcommand8(ILI9341_RDIMGFMT);
  Serial.print("Image Format: 0x"); Serial.println(x, HEX);
  x = tft.readcommand8(ILI9341_RDSELFDIAG);
  Serial.print("Self Diagnostic: 0x"); Serial.println(x, HEX); 
  
  Serial.println(F("Benchmark                Time (microseconds)"));
  delay(10);
  Serial.print(F("Screen fill              "));
  Serial.println(testFillScreen());
  delay(500);

  Serial.print(F("Text                     "));
  Serial.println(testText());
  delay(500);

  Serial.print(F("Lines                    "));
  Serial.println(testLines(ILI9341_CYAN));
  delay(500);

  Serial.print(F("Horiz/Vert Lines         "));
  Serial.println(testFastLines(ILI9341_RED, ILI9341_BLUE));
  delay(500);

  Serial.print(F("Rectangles (outline)     "));
  Serial.println(testRects(ILI9341_GREEN));
  delay(500);

  Serial.print(F("Rectangles (filled)      "));
  Serial.println(testFilledRects(ILI9341_YELLOW, ILI9341_MAGENTA));
  delay(500);

  Serial.print(F("Circles (filled)         "));
  Serial.println(testFilledCircles(10, ILI9341_MAGENTA));
  Serial.print(F("Circles (outline)        "));
  Serial.println(testCircles(10, ILI9341_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!"));

}

void loop(void) {
  for(uint8_t rotation=0; rotation<4; rotation++) {
    tft.setRotation(rotation);
    testText();
    delay(500);
  }
   tft.begin();tft.setRotation(3);tft.fillScreen(ILI9341_BLACK); tft.setTextSize(3);tft.println("Finished...");delay(10000);
}

unsigned long testFillScreen() {
  unsigned long start = micros();
  tft.fillScreen(ILI9341_BLACK);
  yield();
  tft.fillScreen(ILI9341_RED);
  yield();
  tft.fillScreen(ILI9341_GREEN);
  yield();
  tft.fillScreen(ILI9341_BLUE);
  yield();
  tft.fillScreen(ILI9341_BLACK);
  yield();
  return micros() - start;
}

unsigned long testText() {
  tft.fillScreen(ILI9341_BLACK);
  unsigned long start = micros();
  tft.setCursor(0, 0);
  tft.setTextColor(ILI9341_WHITE);  tft.setTextSize(1);
  tft.println("Hello World!");
  tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(2);
  tft.println(1234.56);
  tft.setTextColor(ILI9341_RED);    tft.setTextSize(3);
  tft.println(0xDEADBEEF, HEX);
  tft.println();
  tft.setTextColor(ILI9341_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(ILI9341_BLACK);
  yield();
  
  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

  yield();
  tft.fillScreen(ILI9341_BLACK);
  yield();

  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;

  yield();
  tft.fillScreen(ILI9341_BLACK);
  yield();

  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;

  yield();
  tft.fillScreen(ILI9341_BLACK);
  yield();

  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);

  yield();
  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(ILI9341_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(ILI9341_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(ILI9341_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);
    yield();
  }

  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(ILI9341_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(ILI9341_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(i, i, 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(ILI9341_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*10, i*10));
    t += micros() - start;
    tft.drawTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i,
      tft.color565(i*10, i*10, 0));
    yield();
  }

  return t;
}

unsigned long testRoundRects() {
  unsigned long start;
  int           w, i, i2,
                cx = tft.width()  / 2 - 1,
                cy = tft.height() / 2 - 1;

  tft.fillScreen(ILI9341_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(ILI9341_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));
    yield();
  }

  return micros() - start;
}

 

Rankle
Offline
Зарегистрирован: 31.10.2020

Не получилось.

поменял CS и DC на свои пины A3 и A2. Reset пробовал и 5 и A5 - результат одинаковый - белый экран.

А вот данные из Serial:
ILI9341 Test!
Display Power Mode: 0x0
MADCTL Mode: 0x0
Pixel Format: 0x0
Image Format: 0x0
Self Diagnostic: 0x0
Benchmark                Time (microseconds)
Screen fill              1496596
Text                     175020
Lines                    1437404
Horiz/Vert Lines         127052
Rectangles (outline)     83788
Rectangles (filled)      3107136
Circles (filled)         498996
Circles (outline)        614036
Triangles (outline)      316492
Triangles (filled)       1358184
Rounded rects (outline)  243000
Rounded rects (filled)   3134856
Done!
 
b707
Offline
Зарегистрирован: 26.05.2017

Rankle пишет:

А вот данные из Serial:
ILI9341 Test!
Display Power Mode: 0x0
MADCTL Mode: 0x0
Pixel Format: 0x0
Image Format: 0x0
Self Diagnostic: 0x0
 

нифига не читается, нет связи с контроллером дисплея похоже.

добавка

Посмотрел внимательно плату - вы пытаетесь, похоже. воткнуть дисплей в разъем на плате... Это слишком просто :)

проверьте. для начала. совпадает ли распиновка на дисплее и на плате. Подозреваю что нет. Тогда придется проводами подключать.

 

Rankle
Offline
Зарегистрирован: 31.10.2020

Так они в паре продаются (плата и дисплей). Разъём так и называется - "TFT".\

И на видео так всё "красиво" у них получается.

Прозвонил контакты. Всё верно.

b707
Offline
Зарегистрирован: 26.05.2017

ну тогда писать продавцу и спрашивать что за Х

Может дисплей просто напросто неисправен, а вы тут библиотеки подбираете

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Rankle пишет:

Не получилось.

поменял CS и DC на свои пины A3 и A2. Reset пробовал и 5 и A5 - результат одинаковый - белый экран.

А вот данные из Serial:
ILI9341 Test!
Display Power Mode: 0x0
 
 

а библиотеку от Adafruit правильную поставили? под свой чип
а настройку на параллельный режим дисплея или через SPI работает? 

я б для начала седенил проводочками через SPI, удостоверился что реально экран рабочий, а потом бы уже разбирался с комплектным разьемом через что там эти платы бутербродами соеденяются

Update: посмотрел на дисплей, нет там SPI :(  
остается вам искать правильные библиотеки к нему - пинайте продавца.
 

nik182
Offline
Зарегистрирован: 04.05.2015

Я вот купил комплектом. А когда стал с проводочками разбираться, оказалось не все точно соответствуют. Китаец это подтвердил, но пошёл в отказ на счёт переходника. Пришлось паять. Работает.  

yara19
Offline
Зарегистрирован: 23.01.2021

[quote=nik182]

Я вот купил комплектом. А когда стал с проводочками разбираться, оказалось не все точно соответствуют. Китаец это подтвердил, но пошёл в отказ на счёт переходника. Пришлось паять. Работает.  

А что конкретно меняли?

nik182
Offline
Зарегистрирован: 04.05.2015

Распиновка другая. Взял шлейф от HDD один конец на дисплей, второй отрезал провода распаял согласно схеме на второй разъем.

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

nik182 пишет:

Я вот купил комплектом. А когда стал с проводочками разбираться, оказалось не все точно соответствуют. Китаец это подтвердил, но пошёл в отказ на счёт переходника. Пришлось паять. Работает.  

Я вот тоже купил комплектом. Правда, это были stm32f407vet6 и 3.2" ILI9341. 16-разрядный специализированный интерфейс. Друг к другу они подходили. Но оказалось, что ни к одной другой из имеющихся у меня плат stm32f407vet6 дисплей не подходит. Т.е. это была какая-то специальная версия  платы stm32f407vet6 именно для этого дисплея. 

yara19
Offline
Зарегистрирован: 23.01.2021

У меня 3.0,но прошивка на него от 3.2.Уже незнаю куда копать,все перепробовал.

b707
Offline
Зарегистрирован: 26.05.2017

PAUL1, ветку внимательно не прочитали а уже влезли. Если у дисплея и платы не совпадает распиновка, то никакой файл РЕДМЕ :) 'это не исправит