2.4 "TFT РК-екран не працює на Arduino Mega


9

Навіть на веб-сайті ebay зазначається, що я не можу використовувати 2.4-дюймовий дисплей TFT LCD Shield під час приєднання до Arduino Mega. Проблема в тому, що я купив цей щит помилково. Я хочу покласти цей щит на Arduino Mega 2560. Чи є такий спосіб поєднання Mega та 2.4 "екрану екрана?

Примітка: Я приміряв Arduino Uno свого друга. Щит працює дуже добре.

Примітка: Фото нижче визначає моє питання. На дисплеї не працює код мого Ардуїно. Він працює лише своїм світлодіодом.

введіть тут опис зображення

    // UTFT_Demo_320x240 (C)2012 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 320x240 pixels.
//
// This program requires the UTFT library.
//

#include <UTFT.h>
#define ILI9320_16 18
// Declare which fonts we will be using
extern uint8_t SmallFont[];

// Uncomment the next line for Arduino 2009/Uno
//UTFT myGLCD(UNO_24,A2,A1,A3,A4);   // Remember to change the model parameter to suit your display module!

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

void setup()
{
  randomSeed(analogRead(0));

// Setup the LCD
  pinMode(A0,OUTPUT);       // for the UNO_SHIELD_1IN1
  digitalWrite(A0,HIGH);    // the RD pin must be set high
  myGLCD.InitLCD();
  myGLCD.setFont(SmallFont);
}

void loop()
{
  int buf[318];
  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, 319, 13);
  myGLCD.setColor(64, 64, 64);
  myGLCD.fillRect(0, 226, 319, 239);
  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, 227);

  myGLCD.setColor(0, 0, 255);
  myGLCD.drawRect(0, 14, 319, 225);

// Draw crosshairs
  myGLCD.setColor(0, 0, 255);
  myGLCD.setBackColor(0, 0, 0);
  myGLCD.drawLine(159, 15, 159, 224);
  myGLCD.drawLine(1, 119, 318, 119);
  for (int i=9; i<310; i+=10)
    myGLCD.drawLine(i, 117, i, 121);
  for (int i=19; i<220; i+=10)
    myGLCD.drawLine(157, i, 161, i);

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

  myGLCD.setColor(255,0,0);
  myGLCD.print("Cos", 5, 27);
  for (int i=1; i<318; i++)
  {
    myGLCD.drawPixel(i,119+(cos(((i*1.13)*3.14)/180)*95));
  }

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

  delay(2000);

  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,318,224);
  myGLCD.setColor(0, 0, 255);
  myGLCD.setBackColor(0, 0, 0);
  myGLCD.drawLine(159, 15, 159, 224);
  myGLCD.drawLine(1, 119, 318, 119);

// Draw a moving sinewave
  x=1;
  for (int i=1; i<(318*20); i++) 
  {
    x++;
    if (x==319)
      x=1;
    if (i>319)
    {
      if ((x==159)||(buf[x-1]==119))
        myGLCD.setColor(0,0,255);
      else
        myGLCD.setColor(0,0,0);
      myGLCD.drawPixel(x,buf[x-1]);
    }
    myGLCD.setColor(0,255,255);
    y=119+(sin(((i*1.1)*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,318,224);

// 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(70+(i*20), 30+(i*20), 130+(i*20), 90+(i*20));
  }

  delay(2000);

  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,318,224);

// 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(190-(i*20), 30+(i*20), 250-(i*20), 90+(i*20));
  }

  delay(2000);

  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,318,224);

// 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(100+(i*20),60+(i*20), 30);
  }

  delay(2000);

  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,318,224);

// Draw some lines in a pattern
  myGLCD.setColor (255,0,0);
  for (int i=15; i<224; i+=5)
  {
    myGLCD.drawLine(1, i, (i*1.44)-10, 224);
  }
  myGLCD.setColor (255,0,0);
  for (int i=224; i>15; i-=5)
  {
    myGLCD.drawLine(318, i, (i*1.44)-11, 15);
  }
  myGLCD.setColor (0,255,255);
  for (int i=224; i>15; i-=5)
  {
    myGLCD.drawLine(1, i, 331-(i*1.44), 15);
  }
  myGLCD.setColor (0,255,255);
  for (int i=15; i<224; i+=5)
  {
    myGLCD.drawLine(318, i, 330-(i*1.44), 224);
  }

  delay(2000);

  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,318,224);

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

  delay(2000);

  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,318,224);

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

  delay(2000);

  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,318,224);

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

  delay(2000);

  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,318,224);

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

  delay(2000);

  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,318,224);

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

  delay(2000);

  myGLCD.fillScr(0, 0, 255);
  myGLCD.setColor(255, 0, 0);
  myGLCD.fillRoundRect(80, 70, 239, 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, 210);
  myGLCD.printNumI(millis(), CENTER, 225);

  delay (10000);
}

1
Оголошення на eBay має таке безглузде твердження: "Цей щит НЕ працює з Mega Arduinos, але його буде половина швидкості дощок типу" Uno "через те, як" Мега "переставляє всі штифти (немає способу обійти це!) "Як це може одночасно не працювати, і бути наполовину швидкістю?
gwideman

Використовуєте 8-бітну або 16-бітну версію?
LoneWolf

Ви кодуєте, щоб використовувати шпильки 38-41 під час перегляду картинки, щит навіть не підключається до шпильок 38-41. Ви також визначаєте іншу lcd-модель для Mega, ніж для UNO. Спробуйте використовувати той самий код, що і uno; такUTFT myGLCD(UNO_24,A2,A1,A3,A4);
Гербен

Дивлячись на формулювання, це здається, що воно не працює, але з часом у них з’явиться більш повільна бібліотека, щоб змусити її працювати.

Відповіді:


7

Я щойно придбав ті ж ЖК екрани кілька днів тому, шукаючи бібліотеку, щоб використовувати його з дошкою MEGA 2560, яку я знайшов https://github.com/Smoke-And-Wires/TFT-Shield-Example-Code, який підтримує дошки UNO та MEGA .

Використання дуже просто, якщо ми хочемо використовувати його для MEGA, нам слід змінити заголовок #include "uno_24_shield.h"у SWTFT.cpp на#include "mega_24_shield.h"

Опис (корисно для додавання підтримки для щита в інших бібліотеках):

Несумісність пов'язана з різними картами портів для встановлення Arduino між Mega та UNO.

в РК-екрані UNO буде підключено через:

+---------------+-----+-----+-----+-----+-----+-----+-----+-----+
| LCD Data Bit  |  7  |  6  |  5  |  4  |  3  |  2  |  1  |  0  |
+---------------+-----+-----+-----+-----+-----+-----+-----+-----+
| Digital pin # |  7  |  6  |  5  |  4  |  3  |  2  |  9  |  8  |
+---------------+-----+-----+-----+-----+-----+-----+-----+-----+
| Uno port/pin  | PD7 | PD6 | PD5 | PD4 | PD3 | PD2 | PB1 | PB0 |
+---------------+-----+-----+-----+-----+-----+-----+-----+-----+

в MEGA він буде підключений через:

+---------------+-----+-----+-----+-----+-----+-----+-----+-----+
| LCD Data Bit  |  7  |  6  |  5  |  4  |  3  |  2  |  1  |  0  |
+---------------+-----+-----+-----+-----+-----+-----+-----+-----+
| Digital pin # |  7  |  6  |  5  |  4  |  3  |  2  |  9  |  8  |
+---------------+-----+-----+-----+-----+-----+-----+-----+-----+
| MEGA port/pin | PH4 | PH3 | PE3 | PG5 | PE5 | PE4 | PH6 | PH5 |
+---------------+-----+-----+-----+-----+-----+-----+-----+-----+

1
БОЖЕ МІЙ!! Він працює: D Спочатку я завантажую Arduino Enhanced Release 1.0.5 звідси: forum.arduino.cc/index.php/topic,118440.0.html Потім я відкрив ваш код GitHub, а потім завантажую його. Я відкриваю swtft.cpp через програму DevC / C ++, яку я завантажив раніше. Я змінюю рядки uno з цими: #include "mega_24_shield.h", то завантажую код у Mega, і він спрацював. Я поставив 2.4-дюймовий LCD TFT на MEGA, я більше нічого не зробив. Я просто поклав щит на Mega: D Бог рятує вас: D Дуже особливе спасибі. Помилка була ще 6 місяців. Дякую
Бей

4

Спосіб продовження полягає в створенні електронної таблиці, де відображаються положення штифтів, використовувані цією платою, і сигнали щита Arduino, до яких вони підключаються. Поруч із цим вам потрібні стовпці, що показують фактичні сигнали на ATMega2560 (для Mega2560) та ATMega328 (для Uno), до яких прикріплюються ці щитові екрани. Ви можете отримати цю інформацію за схематичними малюнками Uno та Mega2560.

Швидким поглядом здається, що назви щитків Arduino для Uno та Mega однакові: наприклад, щит "0" (цифровий нуль) знаходиться в одному і тому ж місці на обох дошках, а також для інших штифтів.

Однак на Uno digital-0 додається до ATMega328 порт D біт 0, тоді як на Mega2560 він приєднується до ATMega2560 Порт E біт 0. І цифрові речі стають більш тупими.

Тепер, коли подвійні біти індивідуально використовуються digitalWrite (pin, value), бібліотека Arduino, без сумніву, піклується про переведення на відповідний порт / біт, який потрібно встановити для мікросхема ATMega та плати Arduino, яка використовується. Однак бібліотекам, які використовують функції нижчого рівня (особливо якщо їм потрібно записувати цілі байти в порти, як це може бути швидка бібліотека LCD), потрібно буде зробити власні кроки, щоб зробити цей переклад.

Отже ... перший крок - визначити, чи існує окрема бібліотека драйверів РК-дисплеїв для Mega2560.

Далі вивчіть, чи є у вашій бібліотеці код ініціалізації, який повинен визначати, на якій дошці вона працює (і чи включена ваша дошка?), Або вимагає встановити прапор, щоб повідомити, яка дошка використовується.

Якщо цього не зробити, ви можете створити безлад перемичок або іншу схему проводки для перемикання сигналів Mega ATMega2560, щоб його було підключено як Uno. Не ясно, що це можливо, оскільки частина порту D ATMega2560 навіть не підключена до заголовка.

Або ви можете подивитися вихідний код бібліотеки і побачити, що вона насправді робить, і що потрібно робити різним, щоб керувати штифтами ATMega 2560, до яких щит підключається.



0

Вам потрібно порівняти функції штифтів між вашою Мегою та Uno вашого друга. Тоді вам потрібно зробити ці електричні з'єднання. Про це я трохи розповідаю в розділі "контактні місця" моєї відповіді тут .

Для цього потрібно "злому". Щось потрібно зробити, щоб перегрупувати ті фізичні зв’язки. Я зазвичай використовую проміжний щит для перекладу шпильок у міру необхідності. Був щит, спеціально зроблений для цієї мети, але я не міг його знайти. Може, це спрацювало б ?


SPI не є проблемою, так як щит використовує D0-D7 картину . Які ще речі можуть вплинути на це?
Анонімний пінгвін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.