3.5" TFT LCD красный меговский + mega 2560 R3 . РЕШЕНО ! + как решить другие !

slider
Offline
Зарегистрирован: 17.06.2014
эта тема задумывалась как решение в запуске этого шилда тем кто приобрел этот дисплей и закинул его в дальний угол. Чтоб могли его запустить.
И как методика , чтобы сами могли разобраться в похожих случаях.
Дабы эта проделанная работа не затерялась среди тысячи сообщений соседней ветки, создал новую тему.
Форумчанин  с этого форума попросил помочь и прислал мне для изучения и запуска этого шилда TFT LCD shield 3.5" arduino mega ili9488 480x320.  дисплей FPC-A35242N01QI-A
Дисплей выдавал такую вот билиберду, каракули , на всевозможных инициализациях :
по опыту могу сказать что это из-за неправильной битности или цветности.  //опыт в своей ветке  http://arduino.ru/forum/apparatnye-voprosy/arduino-i-displei-ot-sotikov-mobilnykh-telefonov
пересылка транспортной компанией на удивление составила всего то около 100руб (против почтой в 250р). Никто видимо так и не захотел уделять времени и сил, хотя, что и как, всё было до нельзя разжёвано и посоветовано. Просто это требовало много времени для реализации. Пришлось делать что советовал, самому. 
 
1. первое что надо выяснить - это модель контроллера. (мало ли, закончились одни дисплеи, китайцы сунули другие, и нифига не проверили). Нагреваем феном низ шилда, отклеиваем аккуратно экран. Сначала был изучен предполагаемый даташит и провода от кристалла(контроллера) в шлейф. 27стр. PDF:
 
Рисуем распиновку:
 
 
 
Выводим RD (он оказался не разведен на шилде)
оказался под шлейфом подключен на +3.3в, режем доржку (пометил синим крестиком), и через резистор 10ком на 42пин ардуины. Чтоб в будущих скетчах не выводить лог1 на 42пин, а просто его не использовать, добавим ещё 10ком от +5в на 42пин ардуины.
 
 
 пишем и оттачиваем скетч подачи управляющих сигналов и считывания командой 3Dh , ID дисплея согласно его даташиту  стр.42: 
 
Reset - сброс дисплея (лог1-сброс , лог0-нормальная работа) 
CS - ChipSelect - выбор кристалла (лог1-отключение выводов, 0-включение), отключать желательно на случай переходных процессов чтения-записи, чтоб лог.0и1 с дисплея не упирались в лог.1и0 ардуино. Или на случай подключения параллельно несколько дисплеев. Если дисплей один, и всегда как принимающий данные (на RD всегда лог1) , то в принципе можно отказаться от этого вывода, подав на него лог.0 . К тому же благодаря последовательно 10ком резисторам, если встретятся сильные сигналы с дисплея и ардуины. то ничто не выйдет из строя.
RD - Read (чтение данных дисплеем, лог1-дисплей считывает,  лог0-передает данные) , можно отказаться от этого вывода, если с дисплея ничего считывать не надо, а только отсылать ему команды и данные, подав на него лог.1 , что и делают производители в многих шилдах.
CD (RS) - Command (CommandData)  - КомандаДанные - лог1-когда передаем команду(или адрес регистра в памяти) , лог.0 когда данные (данные в регистре памяти)  
WR - Write - Запись лог1-строб записи в дисплей.
 
скетч для считывания ID дисплеев был составлен и  отстроен на нескольких шилдах и дисплеях, выложил здесь:
 
скетч выдал ID=9488 это и есть ili9488
Замечу что у большинства дисплеев ID лежит по нулевому адресу. и может не иметь числа схожие с названием контроллера. Есть некоторые дисплеи у которых ID в ______   адресах(регистрах), всё это смотрится в предполагаемых даташитах.
Проще всего было подменить в UTFT инициализацию от ILI9486, в папке ...\libraries\UTFT\tft_drivers\ili9486\initlcd.h  , он в UTFT такого же разрешения 320х480  . 
В файле UTFT.cpp  28 место из 31го , разрешение 319х 479
word dsx[] = {............., 319, 799, 127, 127};
word dsy[] = {............., 479, 479, 159, 159};
 
В файле UTFT.h  под номером 28  ILI9486 , оставляем закоментированным только его       
 //#define ILI9486 28
 
в скетче пишем
UTFT myGLCD(ILI9486,38,39,40,41);   или UTFT myGLCD(28,38,39,40,41);  
Скармливая разные инициализации и переработанные под UTFT от ili9488 , дисплей не завёлся, и предположив что по ошибке производителей шилда он 8 битный, для этого в UTFT.cpp меняем битность на 8  (UTFT будет передавать 16бит двумя 8битными с дополнительным сигналом WR ) 
было
byte dtm[] = {......., 16, 16, SERIAL_5PIN, SERIAL_5PIN};
стало
byte dtm[] = {......., 8, 16, SERIAL_5PIN, SERIAL_5PIN};
 
и пробуем в \Arduino\libraries\UTFT\hardware\avr\HW_ATmega1280.h
заменить выдачу младшего байта в портС , ведь во многих дисплеях включенных на 8 бит шина данных с DB8-DB15 для этого и заточен UTFT, приходит на пины ардуины 22-29, а в ili 9488 при 8-бит используются DB0-7 которые скомутированы 30-37пины ардуины (PORTC микроконтроллера)
для этого меняем в UTFT  портА на портС
было:
#else
PORTA = VH;
pulse_low(P_WR, B_WR);
PORTA = VL;
pulse_low(P_WR, B_WR);
 
стало:
#else
PORTC= VH;
pulse_low(P_WR, B_WR);
PORTC = VL;
pulse_low(P_WR, B_WR);
 
белый экран, дисплей не завелся, значит он не 8 бит, возвращаем всё на место.
 
2. второе что надо выяснить - его настоящую битность.
значит конкретно с ней напутано. Исследуем дальше...  согласно схеме выводов кристалла и выходов со стекла в шлейф , предположительно IM2,1 - следующие от вывода RESX замкнуты на GND . вывод IM0 выведен в шлейф. (на фотках выше) Также доказывает это вывод всех 18бит в шлейфе, (а не как обычно 16), что значит один режим это точно 18бит, а второй видимо 9 бит. Также  доказывает то, что если остановить скетч  на выдаче данных (порт сконфить на вход. включить подтягив. резисторы),  на выходе шлейфа с DB0-DB8 дисплей пересиливает слабые сигналы с 10ком резисторов, четко видны уровни лог0 и лог1 от дисплея,.а DB9-DB17 в Z-состоянии.  - значит дисплей был настроен на 9 бит. поэтому UTFT и не справлялись с ним. 
 !  IM0 (пин2) на шилде идёт на +3,3в (пин3) прям под шлейфом. Чтобы перерезать дорожку, надо хотябы половину шлейфа отпаять. Поэтому простое решение паяльник и наточенная плоско и остро зубочистка под пин IM0 , воткнутая с обратной стороны под прогретый вывод паяльником. Проверяем чтоб он потерял контакт с 3им пином. И замыкаем на рядом GND (пин1):
Решение:
 
Теперь при считывании данных , лог0 и 1 наблюдаются на всех 18бит шлейфа.    16битный режим и 18битный немного схожи при определенной передачи цветности. (не буду загружать картинками из даташита, кто хочет может сам глянуть со стр.123)  Запускаем UTFT на 16бит как было и о чудо !!! Переворачиваем в регистре 36h
 

 

получаем в итоге УРА !!!

UTFT\examples\Arduino (AVR)\UTFT_Demo_480x320

проверяем цветность

#include <UTFT.h>
int i;
UTFT myGLCD(28,38,39,40,41);

void setup() {
  myGLCD.InitLCD();
  myGLCD.clrScr();
     for (i=0; i<255; i++)  
     {
       myGLCD.setColor(i,0,0);
      myGLCD.drawLine(i,0 ,i,50); 
        myGLCD.setColor(0,i,0);
      myGLCD.drawLine(i,50 ,i,100); 
        myGLCD.setColor(0,0,i);
      myGLCD.drawLine(i,100 ,i,150); // белый
        myGLCD.setColor(i,i,i);
        
      myGLCD.drawLine(i,150 ,i,200);
       myGLCD.setColor(i,i,0);
      myGLCD.drawLine(i,200 ,i,210);
       myGLCD.setColor(i,0,i);
      myGLCD.drawLine(i,210 ,i,220);
      myGLCD.setColor(0,i,i);
      myGLCD.drawLine(i,220 ,i,230);
     }
}

void loop() 
{
  // put your main code here, to run repeatedly:
}

сравнение с зененым шилдом для УНО 400х240 ili9327

Все цвета присутствуют. значит 18битный режим ili9488 в нужной цветности подошёл для 16ти битного режима адресации в UTFT .

Тач кстати то работал, то нет (перелом шлейфа в месте пайки), пришлось оторвать его шлейф  от платы, зачистить и снова припаять. 
UTouch\examples\Arduino\UTouch_QuickDraw
видно, что нажатия по периметру стремятся отобразиться к правее центра, значит там тач немного продавлен. Но ничего страшного , при хороших нажатиях, библиотека UTouch более менее справляется
UTouch\examples\Arduino\UTouch_QuickPaint :
 
собственно это всё.
Пожалуйста. Шилд был отправлен обратно его хозяину.
 
"Спасибо"  благодарность за проделанные исследования, сил и время можно отправить на карту Сбербанка  4276 4500 1754 7783 или скинуть на тлф. 8-951-ЧОЧ-71O9 или на  яндекс кошелек 410013695938113 .    
 
архив UTFT 2.79 c подмененой (добавленной) инициализацией для ILI9488 , +разные найденные инициализации init code ili9488 в папке \UTFT\tft_drivers\ili9486   +проверенный тач (изменен в юстировке portrait на ladscape, отюстированные данные подставлены), т.е. готово к использованию: 

 

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

В примерах уже подставлены  28 или ili9486  (   UTFT myGLCD(ILI9486,38,39,40,41);  ) -  это всё для  этого шилда ili9488 (смотрим внимательней на первые фото, шилды ili9488 бывают не такие же).  Ещё раз!, в своих в скетчах пишем

UTFT myGLCD(ILI9486,38,39,40,41);   или UTFT myGLCD(28,38,39,40,41);

Для новичков, надо стереть предыдущие библиотеки utft и utouch из C:\Users\...\Documents\Arduino\libraries  и заменить этими. Чтобы старый мусор от них не мешал.

Тех кто хочет считать ID с него (или пользоваться его видеопамятью) - надо задействовать RD,  можно обойтись теми резисторами что на нём есть.

1. режем дорожку как говорил ранее (или также плоско наточенной зубочисткой поднимаем 32й пин дисплея )

2. подключаем так 

10к на +5v с U2 , необходимо чтоб в скетчах не конфить 42й пин на выход и уст. лог.1 (  pinMode(42,OUTPUT); digitalWrite(42,HIGH); ).  . А просто не использовать его. Тогда он по умолчанию будет как вход, и через 10к, на нём будет лог1, которая и будет включать дисплей в ваших скетчах на приём команд и данных от  Ардуино.

Проверить, такого дисплея у меня нет. проверяйте. (я заводил с лицевой части шилда отдельным резистором 42й пин с Ардуино и 32й пин дисплея) 

 

//П.С. поправка, в первом сообщении правильней:  Reset - сброс дисплея (лог0-сброс , лог1-нормальная работа).

На других ранних шилдах где питание к дисплею бралось с +3,3в ардуины, а со стабилизатора только на подсветку, этой лог1 на RESET и лог. уровней с других выводов хватало для запитки дисплея с лихвой. Можно было обойтись без +3,3в с ардуино. И довольно таки с лихвой, что  питание дисплея пересиливалось лог.1 уровнями (с ардуино) и было  аж выше 4в (а дисплею максимум можно 3,3в) , поэтому и придумали китайцы соеденить вместе +3,3в и подсветку. Белые светодиоды в ней выступают в роли стабилитронов, и не дают напряженю питания дисплея подняться выше +3...+3,2 вольт.  Такое решение имеет и "-", на который можно не особо обращать внимания. Это если стоят вместо резисторов , 2х сторонние "преобразователи уровней" , то лог.1 +5в с Ардуино, через ""преобразователи уровней"" (внутренние диоды от входа на питание) упирается в +3в , тес самым Ардуинка напрягается, ну и больше кушает. 

Самоделкин
Offline
Зарегистрирован: 04.12.2015

Уважаемый Slider. Как старый электронщик, с интересом прочитал эту заметку. Просто поразительно, отличное знание темы. Но вот вопрос. У меня подобная же игрушка из китайского интернет магазина. Подобная, но не один в один. 3,95", но вообщем всё тоже самое, ни один драйвер не подходит.

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

И вот чудо с вашим драйвером выробляе як и трэба. Великий дякуй вам паважаны Slider. 

pankotskiy
Offline
Зарегистрирован: 29.12.2015

Мой 3,95''  (ili 9488) завёлся тоже не сразу, пришлось искать и ковырять библиотеку, чтоб избавиться от зеркальности изображения ( the display is mirror inverted, if there is made no correction in initlcd.h (COM(0x36): DATA(0x8A) instead of DATA(0x0A).), чтоб синхронизировать LCD и Touch (сейчас точно не вспомню, но вроде в том же initlcd.h менял значения с portrait на landscape то ли в строке LCD то ли в Touch). Завёлся с библиотекой UTFT и строками инициализации:

UTFT myGLCD(CTE32HR,38,39,40,41); 

UTouch  myTouch( 6, 5, 4, 3, 2);

Возни и поисков было на три дня, но... результат есть и он вполне приемлимый. С этим скетчем всё работает:

// UTFT_Demo_480x320 (C)2013 Henning Karlsen
// web: http://www.henningkarlsen.com/electronics
//
// This program is a demo of how to use most of the functions
// of the library with a supported display modules.
//
// This demo was made for modules with a screen resolution 
// of 480x320 pixels.
//
// This program requires the UTFT library.
//

#include <UTFT.h>

// Declare which fonts we will be using
extern uint8_t SmallFont[];

// Uncomment the next line for Arduino 2009/Uno
//UTFT myGLCD(CTE32HR,19,18,17,16);   // Remember to change the model parameter to suit your display module!

// Uncomment the next line for Arduino Mega
UTFT myGLCD(CTE32HR,38,39,40,41);   // Remember to change the model parameter to suit your display module!

void setup()
{
  randomSeed(analogRead(0));
  
// Setup the LCD
  myGLCD.InitLCD();
  myGLCD.setFont(SmallFont);
}

void loop()
{
  int buf[478];
  int x, x2;
  int y, y2;
  int r;

// Clear the screen and draw the frame
  myGLCD.clrScr();

  myGLCD.setColor(255, 0, 0);
  myGLCD.fillRect(0, 0, 479, 13);
  myGLCD.setColor(64, 64, 64);
  myGLCD.fillRect(0, 306, 479, 319);
  myGLCD.setColor(255, 255, 255);
  myGLCD.setBackColor(255, 0, 0);
  myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1);
  myGLCD.setBackColor(64, 64, 64);
  myGLCD.setColor(255,255,0);
  myGLCD.print("<http://electronics.henningkarlsen.com>", CENTER, 307);

  myGLCD.setColor(0, 0, 255);
  myGLCD.drawRect(0, 14, 479, 305);

// Draw crosshairs
  myGLCD.setColor(0, 0, 255);
  myGLCD.setBackColor(0, 0, 0);
  myGLCD.drawLine(239, 15, 239, 304);
  myGLCD.drawLine(1, 159, 478, 159);
  for (int i=9; i<470; i+=10)
    myGLCD.drawLine(i, 157, i, 161);
  for (int i=19; i<220; i+=10)
    myGLCD.drawLine(237, i, 241, i);

// Draw sin-, cos- and tan-lines  
  myGLCD.setColor(0,255,255);
  myGLCD.print("Sin", 5, 15);
  for (int i=1; i<478; i++)
  {
    myGLCD.drawPixel(i,159+(sin(((i*1.13)*3.14)/180)*95));
  }
  
  myGLCD.setColor(255,0,0);
  myGLCD.print("Cos", 5, 27);
  for (int i=1; i<478; i++)
  {
    myGLCD.drawPixel(i,159+(cos(((i*1.13)*3.14)/180)*95));
  }

  myGLCD.setColor(255,255,0);
  myGLCD.print("Tan", 5, 39);
  for (int i=1; i<478; i++)
  {
    myGLCD.drawPixel(i,159+(tan(((i*1.13)*3.14)/180)));
  }

  delay(2000);

  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,478,304);
  myGLCD.setColor(0, 0, 255);
  myGLCD.setBackColor(0, 0, 0);
  myGLCD.drawLine(239, 15, 239, 304);
  myGLCD.drawLine(1, 159, 478, 159);

// Draw a moving sinewave
  x=1;
  for (int i=1; i<(478*15); i++) 
  {
    x++;
    if (x==479)
      x=1;
    if (i>479)
    {
      if ((x==239)||(buf[x-1]==159))
        myGLCD.setColor(0,0,255);
      else
        myGLCD.setColor(0,0,0);
      myGLCD.drawPixel(x,buf[x-1]);
    }
    myGLCD.setColor(0,255,255);
    y=159+(sin(((i*0.7)*3.14)/180)*(90-(i / 100)));
    myGLCD.drawPixel(x,y);
    buf[x-1]=y;
  }

  delay(2000);
  
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,478,304);

// Draw some filled rectangles
  for (int i=1; i<6; i++)
  {
    switch (i)
    {
      case 1:
        myGLCD.setColor(255,0,255);
        break;
      case 2:
        myGLCD.setColor(255,0,0);
        break;
      case 3:
        myGLCD.setColor(0,255,0);
        break;
      case 4:
        myGLCD.setColor(0,0,255);
        break;
      case 5:
        myGLCD.setColor(255,255,0);
        break;
    }
    myGLCD.fillRect(150+(i*20), 70+(i*20), 210+(i*20), 130+(i*20));
  }

  delay(2000);
  
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,478,304);

// Draw some filled, rounded rectangles
  for (int i=1; i<6; i++)
  {
    switch (i)
    {
      case 1:
        myGLCD.setColor(255,0,255);
        break;
      case 2:
        myGLCD.setColor(255,0,0);
        break;
      case 3:
        myGLCD.setColor(0,255,0);
        break;
      case 4:
        myGLCD.setColor(0,0,255);
        break;
      case 5:
        myGLCD.setColor(255,255,0);
        break;
    }
    myGLCD.fillRoundRect(270-(i*20), 70+(i*20), 330-(i*20), 130+(i*20));
  }
  
  delay(2000);
  
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,478,304);

// Draw some filled circles
  for (int i=1; i<6; i++)
  {
    switch (i)
    {
      case 1:
        myGLCD.setColor(255,0,255);
        break;
      case 2:
        myGLCD.setColor(255,0,0);
        break;
      case 3:
        myGLCD.setColor(0,255,0);
        break;
      case 4:
        myGLCD.setColor(0,0,255);
        break;
      case 5:
        myGLCD.setColor(255,255,0);
        break;
    }
    myGLCD.fillCircle(180+(i*20),100+(i*20), 30);
  }
  
  delay(2000);
  
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,478,304);

// Draw some lines in a pattern
  myGLCD.setColor (255,0,0);
  for (int i=15; i<304; i+=5)
  {
    myGLCD.drawLine(1, i, (i*1.6)-10, 304);
  }
  myGLCD.setColor (255,0,0);
  for (int i=304; i>15; i-=5)
  {
    myGLCD.drawLine(478, i, (i*1.6)-11, 15);
  }
  myGLCD.setColor (0,255,255);
  for (int i=304; i>15; i-=5)
  {
    myGLCD.drawLine(1, i, 491-(i*1.6), 15);
  }
  myGLCD.setColor (0,255,255);
  for (int i=15; i<304; i+=5)
  {
    myGLCD.drawLine(478, i, 490-(i*1.6), 304);
  }
  
  delay(2000);
  
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,478,304);

// Draw some random circles
  for (int i=0; i<100; i++)
  {
    myGLCD.setColor(random(255), random(255), random(255));
    x=32+random(416);
    y=45+random(226);
    r=random(30);
    myGLCD.drawCircle(x, y, r);
  }

  delay(2000);
  
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,478,304);

// Draw some random rectangles
  for (int i=0; i<100; i++)
  {
    myGLCD.setColor(random(255), random(255), random(255));
    x=2+random(476);
    y=16+random(289);
    x2=2+random(476);
    y2=16+random(289);
    myGLCD.drawRect(x, y, x2, y2);
  }

  delay(2000);
  
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,478,304);

// Draw some random rounded rectangles
  for (int i=0; i<100; i++)
  {
    myGLCD.setColor(random(255), random(255), random(255));
    x=2+random(476);
    y=16+random(289);
    x2=2+random(476);
    y2=16+random(289);
    myGLCD.drawRoundRect(x, y, x2, y2);
  }

  delay(2000);
  
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,478,304);

  for (int i=0; i<100; i++)
  {
    myGLCD.setColor(random(255), random(255), random(255));
    x=2+random(476);
    y=16+random(289);
    x2=2+random(476);
    y2=16+random(289);
    myGLCD.drawLine(x, y, x2, y2);
  }

  delay(2000);
  
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,478,304);

  for (int i=0; i<10000; i++)
  {
    myGLCD.setColor(random(255), random(255), random(255));
    myGLCD.drawPixel(2+random(476), 16+random(289));
  }

  delay(2000);

  myGLCD.fillScr(0, 0, 255);
  myGLCD.setColor(255, 0, 0);
  myGLCD.fillRoundRect(160, 70, 319, 169);
  
  myGLCD.setColor(255, 255, 255);
  myGLCD.setBackColor(255, 0, 0);
  myGLCD.print("That's it!", CENTER, 93);
  myGLCD.print("Restarting in a", CENTER, 119);
  myGLCD.print("few seconds...", CENTER, 132);
  
  myGLCD.setColor(0, 255, 0);
  myGLCD.setBackColor(0, 0, 255);
  myGLCD.print("Runtime: (msecs)", CENTER, 290);
  myGLCD.printNumI(millis(), CENTER, 305);
  
  delay (10000);
}

 

Yuraz
Offline
Зарегистрирован: 19.01.2016

pankotskiy пишет:

Мой 3,95''  (ili 9488) завёлся тоже не сразу, пришлось искать и ковырять библиотеку, чтоб избавиться от зеркальности изображения ( the display is mirror inverted, if there is made no correction in initlcd.h (COM(0x36): DATA(0x8A) instead of DATA(0x0A).)

Здравствуйте pankotskiy! Скажите, какой именно надо менять initlcd.h, у меня их много в libraries\UTFT\tft_drivers\, я не знаю какой точно используется.
В первую очередь пробовал: 

c:\Arduino\libraries\UTFT\tft_drivers\r61581\
c:\Arduino\libraries\UTFT\tft_drivers\ili9486\
 

LCD_Write_COM(0x36);
// LCD_Write_DATA(0x0A);
//LCD_Write_DATA(0x48);
LCD_Write_DATA(0x88);

и т.п.

И можно ли исправляемую строку привести? Железо анологичное что и у вас. 

Пробовал по совету slider, перебирал много, не нашел решение...

PS. Колеги, снимаю вопрос! Благодаря супер профессионалу slider, с его супер постами что выше, ответил на свой вопрос!

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

Добавлю сюда про ещё один меговский шилд , любезно предоставленный СанСанычем 

надпись на плате 3.95" TFT LCD for arduino mega 2560(ili9488)   , на дисплее FW-TFT040-V08A

По результатам решения сразу скажу что контроллер диспа действительно ili9488 , что на адафруите не хотел запускаться потому как автоматом там не определялся, на UTFT не запускался потому как шина дисплея 8бит и к тому же заведена на PORTA  (по умолчанию в либе всё с точностью наоборот).

А теперь всё по порядку:

Плюсы этого шилда что самый дешёвый из 480x320 3.95" ,  свободен портС (пины 30-37 ) . И для тача стоит спецмикруха XPT2046 , шина SPI но подключена как софтовый ,  либа сродни УТФТ  - UTouch    ,  инит стандартный UTouch myTouch( 6, 5, 4, 3, 2); . Скорость вывода общей инфы на дисп, не кардинально отличается от 16бит ili9488 ибо команды по пересылке теже 8бит, разве что цветность передается в 2 шага, но это не долго в сравнении с другими процессами. // можете сравнить у кого есть меговский 16битный ili9488  480x320 на UTFT и черкнуть сюда за сколько времени стандартный тест выполнился. Время теста данного шилда(8бит ili9488 480x320 ) - 47,5сек ! - это достаточно быстро из-за доработанной либы turbo. Полагаю что время 16бит гдето совсем рядом, так что эти 8бит шилды можно брать.

для чтения ID вывел RD, вам нечего паять не нужно. Картинки кликабельны.

 

читалка портаА  ID_display_read_to_serial_monitor_universal_v3_1_PORTA выдала 

               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 54 80 66 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 54 54 54 54
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 54
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 93 30 93 30 FF FF FF
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 FF FF FF
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 A0 11 11 11 11 11 11
register B2    00 00 11 11 11 11 11 11
register B3    00 00 11 11 11 11 11 11
register B4    00 02 02 02 02 02 02 02
register B5    00 02 02 0A 04 04 04 04
register B6    00 02 02 3B 3B 3B 3B 3B
register B7    00 06 06 06 06 06 06 06
register B8    00 00 00 02 02 02 02 02
register B9    00 04 04 04 04 04 04 04
register BA    00 04 04 04 04 04 04 04
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 20 00 00 00 00 00
register BF    00 00 00 00 00 00 00 00  ***
register C0    00 0E 0E 0E 0E 0E 0E 0E
register C1    00 44 08 08 08 08 08 08
register C2    00 33 33 33 33 33 33 33
register C3    00 33 33 33 33 33 33 33
register C4    00 33 33 33 33 33 33 33
register C5    00 00 40 00 40 40 40 40
register C6    00 E0 01 01 01 01 01 01
register C7    00 00 00 00 00 00 00 00
register C8    00 B0 B0 B0 B0 B0 B0 B0
register C9    00 BB BB BB BB BB BB BB
register CA    00 0B 0B 0B 0B 0B 0B 0B
register CB    00 A8 A8 A8 A8 A8 A8 A8
register CC    00 03 03 03 03 03 03 03
register CD    00 43 43 43 43 43 43 43
register CE    00 02 02 02 02 02 02 02
register CF    00 F8 F8 F8 F8 F8 F8 F8
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 09 40 00 00
register D3    00 00 94 88 88 88 88 88  ***
register D4    00 97 00 00 00 00 00 00
register D5    00 0C 00 00 00 00 00 00
register D6    00 00 00 00 00 00 00 00
register D7    00 03 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 54 00 00 00 00 00 00  ***
register DB    00 80 00 00 00 00 00 00  ***
register DC    00 66 00 00 00 00 00 00  ***
register DD    00 02 00 00 00 00 00 00
register DE    00 01 00 04 08 0C 0D 0E
register DF    00 00 00 00 00 00 00 00
register E0    00 00 07 0C 05 13 09 36
register E1    00 00 20 23 04 10 06 37
register E2    00 00 00 00 00 00 00 00
register E3    00 00 00 00 00 00 00 00
register E4    00 03 03 03 03 03 03 03
register E5    00 74 74 74 74 74 74 74
register E6    00 00 00 00 00 00 00 00
register E7    00 4C 4C 4C 4C 4C 4C 4C
register E8    00 44 44 44 44 44 44 44
register E9    00 00 00 00 00 00 00 00
register EA    00 14 14 14 14 14 14 14
register EB    00 40 80 03 00 00 00 00
register EC    00 00 02 03 78 FF FF 04
register ED    00 00 00 00 00 00 00 00
register EE    00 2A 2A 2A 2A 2A 2A 2A
register EF    00 00 00 00 00 00 00 00  ***
register F0    00 01 13 13 13 13 13 13
register F1    00 36 04 00 3C 0F 64 15
register F2    00 58 04 12 02 22 22 FF
register F3    00 02 20 00 AA 01 01 01
register F4    00 00 00 08 91 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 A9 51 2C 82 48 00 09
register F8    00 21 04 82 00 00 00 00
register F9    00 00 00 00 00 00 00 00
register FA    00 00 00 00 20 00 00 00
register FB    00 00 0F FF 90 FF FF FF
register FC    00 00 05 0E 20 07 00 05
register FD    00 00 00 00 00 00 00 00
register FE    00 00 00 00 00 00 00 00
register FF    00 42 30 34 06 06 06 06

Решающие D3h    00 00 94 88   , остальные   04h    00 54 80 66 00 00 00 00  ,  DA - 00 54 , DB - 00 80 , DC - 00 66

И так, в архиве всё собрано и настроено к пользованию, опишу что уже там сделал и что к чему, распаковать всё в мои документы ...\Arduino\libraries  , похожих либ что в архиве там не должно быть , иначе IDE будет ругаться на повторные библиотеки. Сопротивление тача 700 и 240 Ом (отклеился 2й пин шлейфа от стекла, помог прогрев , через скользкую бумагу, его на стекле  и удержание пару сек чтоб остыл и прикрепился)

 

1. на основе библиотек henningkarlsen

- графика UTFT . за основу взят UTFT_v2.77b2_uno_ili9327_8bit_turbo ,      1. добавил много разных инитов на ili9488 в UTFT\tft_drivers\ili9327_8 и не стесняйтесь заглядывать в их initlcd.h там  закоментированы переворачивания и т.д.;        2. в либе заменил разрешение на disp_x_size = 319; disp_y_size = 479; display_transfer_mode = 8; и заменил _delay_ms на delay; переписал LCD_Write_DATA(char VH,char VL) для тработы tinyFAT        3. в примере UTFT\examples\Arduino (AVR)\UTFT_Demo_480x320 заменил вызов на №31 ; 4. в UTFT\hardware\avr\HW_ATmega1280.h заменил портС на портА , и также регистр DDRC на DDRA . 

используем пример UTFT_Demo_480x320 

- тач  UTouch на базе UTouch v1.30.zip , изменил вызовы в примерах,  PORTRAIT на LANDSCAPE в калибровке , сделал калибровку и записал ее данные в файл библиотеки. Напомню , функция myTouch.setPrecision(...); позволяет установить точность нажатия.

- tinyFAT с  UTFT_tinyFAT работа с microSD  .   изменен тип экрана на №31 . флэшка 2 или 4 Gb форматировать на FAT (16),  пример UTFT_tinyFAT\examples\Demo_Landscape    , картинки на флэху закинуть из папки UTFT_tinyFAT\Image-files .  Качество и красочность картинок порадуют.   Если свои фотки , то в UTFT\Tools есть конвертер в RAW  - ImageConverter565.exe  . // 10ком резисторы на меньшие не перепаивал, и так всё считывало, ибо либа использует софтовый SPI.

   

 

 

2. на основе Adafruit

графика Adafruit   ( либы Adafruit_TFTLCD + Adafruit_GFX ) либа одна из последних, где присутствуют много всяких контроллеров. в примерах включил принудительно ili9488 , изменил распиновку на 

#define LCD_CS 40 // Chip Select goes to Analog 3
#define LCD_CD 38 // Command/Data goes to Analog 2
#define LCD_WR 39 // LCD Write goes to Analog 1
#define LCD_RD 42 // LCD Read goes to Analog 0
#define LCD_RESET 41 // Can alternately just connect to Arduino's reset pin
и в примере  tftbmp   к томуже  #define SD_CS 53 // 10   
 
Использовать примеры Adafruit_TFTLCD\examples\   graphicstest , rotationtest(рисовать через сериал монитор)  , tftbmp (для него скопировать на microSD картинки из Adafruit_TFTLCD\bitmaps\ , файловая система любая, и перепаять набор резисторов PR4 103 (10ком*4)  на 102(1ком) или на крайняк 101(100ом)  ибо либа SD.h  использует аппаратный SPI - он очень быстр и 10ком заваливали импульсы. 
// долго парился с примером  tftbmp , дисплей редко заводился, вис, аппаратно все поперепробовал, оказалось адафруитцы сделали косяк в этом примере : Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, A4 );   //  а надо не A4 , а LCD_RESET - из-за этого на меге этот пример не работал! 
 
SD работа с microSD , там много интересных примерчиков , к примеру SD\examples\CardInfo выдаст в сериал монитор инфу о карте и список файлов.  поддерживает FAT (16) , FAT32 .
 
 
тач . либа тача к сожалению в адафруите только для тачей подключенных напрямую, поэтому адафруитские примеры тача работать не будут, надо использовать UTouch из родни UTFT .  На пока UTouch приладил для 480x320 , положил в Adafruit_TFTLCD\examples\tftpaint3 , с rotation особо не парился , просто поменял x y . Работает. // Напомню , функция myTouch.setPrecision(...); позволяет установить точность нажатия.
 
 
архив : https://yadi.sk/d/UQHngzW-svzSH кинуть в C:\Users\...\Documents\Arduino\libraries  (Win7), распаковать в текущую.
 
// внизу этого сообщения не нажимать кнопки "ответить" и "цитировать" чтоб, мало ли что, я смог что сюда добавить . 
//// скорость вывода фотографий этими двумя способами ( набором либ) примерно одинакова. 
hugoboss317
Offline
Зарегистрирован: 21.03.2013

Попытаюсь воскресить тему!

Кто-нибудь загружал скетч во всеми "вкраплениями" размером больше 90 К? Всё работает?

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

конкретней. 

на atmega2560 , atmega128 ограничение памяти progmem 65кбайт , иначе глюк

http://arduino.ru/forum/programmirovanie/avr-ogranichenie-na-obem-dannykh-razmeshchennykh-v-flash-pamyati-programy

ежели речь о файле с микросд , то максимум не пробовал. В инете должно полно инфы на это.

 

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Все понимают что не работает но никто не понимает почему.

Я ничего не путаю? 

В меге 2560 и 1280 - 256К и 128К соответственно, можно использовать только 64?

Только мне кажеться что тут что то не то?

elderjiang
elderjiang аватар
Offline
Зарегистрирован: 30.07.2018

привет товарищ

У меня также есть FPC-A35242N01QI-A, я хочу управлять им с помощью stm32, но я не знаю определения контакта,Каково определение контакта?

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

hugoboss317 пишет:

Все понимают что не работает но никто не понимает почему.

Я ничего не путаю? 

В меге 2560 и 1280 - 256К и 128К соответственно, можно использовать только 64?

Только мне кажеться что тут что то не то?

Для адресации за пределами 64К нужны far-указатели.