2.4 "TFT LCD Shield Arduino Mega üzerinde çalışmıyor


9

Ebay'ın web sitesinde bile, Arduino Mega'ya bağlı 2.4 "TFT LCD Kalkan ekranını kullanamayacağımdan bahsediliyor. Sorun, bu kalkanı yanlışlıkla satın almam. Bu kalkanı Arduino Mega 2560 üzerine koymak istiyorum. ve 2.4 "Ekran Kalkanı birleştirmek için nasıl bir yol?

not: Arkadaşımın Arduino Uno'unu denedim. Kalkan çok iyi çalışıyor.

not: Aşağıdaki fotoğraf sorumu belirliyor. Ekran Arduino kodumu çalıştırmıyor. Sadece LED'ini çalıştırıyor.

resim açıklamasını buraya girin

    // 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 reklamının saçma sapan ifadesi şu şekildedir: "Bu kalkan Mega Arduinos ile çalışmaz, ancak Mega'nun tüm pinleri yeniden düzenlemesi nedeniyle Uno tipi panoların yarısı kadar olacak (dolaşmanın bir yolu yok) this!) "Aynı anda nasıl çalışamaz ve yarı hız olabilir?
gwideman

8bit veya 16bit sürümünü mü kullanıyorsunuz?
LoneWolf

Kod, resme bakarken 38-41 pinlerini kullandığını söyler, kalkan 38-41 pinlerine bile bağlanmaz. Mega için UNO'dan farklı bir lcd modeli de tanımlıyorsunuz. Uno ile aynı kodu kullanmayı deneyin; yaniUTFT myGLCD(UNO_24,A2,A1,A3,A4);
Gerben

İfadeye bakıldığında, işe yaramaz gibi görünüyor, ancak sonunda çalışmasını sağlamak için daha yavaş bir kütüphaneye sahip olacaklar.

Yanıtlar:


7

Ben sadece bir MEGA 2560 buldum kurulu ile kullanmak için bir kütüphaneye arayan birkaç gün önce aynı LCD Shields satın oldu https://github.com/Smoke-And-Wires/TFT-Shield-Example-Code hangi destekler UNO ve MEGA panoları.

Kullanımı biz bunu kullanmak istiyorsanız basit, çok olan MEGA biz başlığını değiştirmek gerekir #include "uno_24_shield.h"içinde SWTFT.cpp için#include "mega_24_shield.h"

Açıklama (diğer kütüphanelerde kalkan için destek eklemek için yararlıdır):

Mega ve UNO arasında Arduino pin çıkışı için farklı Port eşlemelerinden uyumsuzluk geliyor.

içinde UNO LCD kalkan ile bağlanmış olacaktır:

+---------------+-----+-----+-----+-----+-----+-----+-----+-----+
| 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 |
+---------------+-----+-----+-----+-----+-----+-----+-----+-----+

içinde MEGA o ile bağlanmış olacaktır:

+---------------+-----+-----+-----+-----+-----+-----+-----+-----+
| 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
AMAN TANRIM!! ÇALIŞIYOR: D Önce Arduino Enhanced Release 1.0.5'i buradan indiriyorum : forum.arduino.cc/index.php/topic,118440.0.html Sonra GitHub kodunuzu açtım ve indirin. Daha önce indirdiğim DevC / C ++ programı ile swtft.cpp dosyasını açtım. Bu uno satırları değiştirmek: #include "mega_24_shield.h" sonra kodu Mega içine yükleyin ve çalıştı. Ben sadece 2.4 "TFT LCD'yi MEGA üzerine koydum, daha fazla bağlantı yapmadım. Kalkanı Mega üzerine koydum: D Tanrı sizi kurtarıyor: D Çok özel teşekkürler. Hata 6 aydır hala. Teşekkürler.
Bay

4

Devam etmenin bir yolu, bu kart tarafından kullanılan pin konumlarını ve taktıkları Arduino kalkan sinyallerini gösteren bir e-tablo oluşturmaktır. Bunların yanında, bu kalkan pimlerinin takıldığı ATMega2560 (Mega2560 için) ve ATMega328 (Uno için) üzerindeki gerçek sinyalleri gösteren sütunlara ihtiyacınız vardır. Bu bilgiyi Uno ve Mega2560 şematik çizimlerinden alabilirsiniz.

Hızlı bir bakışta, Uno ve Mega için Arduino kalkan pimi adlarının aynı olduğu görülüyor: örneğin, kalkan pimi '0' (dijital sıfır) her iki kartta da aynı konumda ve aynı şekilde diğer pimler için.

Bununla birlikte, Uno digital-0'da ATMega328 Port D bit 0'a bağlanırken, Mega2560'ta ATMega2560 Port E bit 0'a bağlanır. Ve işler dijital 2..7 ile daha geniş hale gelir.

Şimdi, digitalWrite (pin, değer) kullanarak bitleri ayrı ayrı döndürürken, Arduino kütüphanesi şüphesiz kullanılan ATMega yongası ve Arduino kartı için ayarlanması gereken uygun port / bitlere çevirmeye özen gösterir. Bununla birlikte, daha düşük düzey işlevler kullanan kitaplıkların (özellikle hızlı bir LCD kitaplığının olabileceği gibi bağlantı noktalarına tüm baytları yazmaları gerekiyorsa) bu çeviriyi yapmak için kendi adımlarını atmaları gerekir.

Yani ... ilk adım Mega2560 için ayrı bir LCD sürücü kütüphanesi olup olmadığını belirlemektir.

Daha sonra, sahip olduğunuz kütüphanenin hangi kartta çalıştığını belirlemesi gereken başlatma koduna sahip olup olmadığını araştırın (ve kartınız dahil mi?) Veya hangi kartın kullanımda olduğunu söylemek için bazı bayraklar ayarlamanızı gerektirir.

Bu gerçekleşmediği takdirde sen olabilir olurdu bir Uno gibi şebeke kurmuş, böylece Mega en ATMega2560 sinyallerini jumper jumper bir karmaşa ya da başka bir kablolama şeması oluşturun. Bunun mümkün olmadığı açık değildir, çünkü ATMega2560'ın bazı Port D'si bir başlığa bile bağlanmamıştır.

Veya kütüphanenin kaynak koduna bakabilir ve gerçekte ne yaptığını ve kalkanın bağlandığı ATMega 2560 pinlerini çalıştırmak için neyin farklı yapılması gerektiğini görebilirsiniz.



0

Mega'nuzun ve arkadaşınızın Uno'su arasındaki pinlerin işlevlerini karşılaştırmanız gerekir. O zaman bu elektrik bağlantılarını yapmanız gerekir. Bu konudaki cevabımın "pin lokasyonları" bölümünde biraz konuşuyorum .

Bu "hackleme" gerektirir. Bu fiziksel bağlantıları yeniden yönlendirmek için bir şeyler yapılmalıdır. Normalde pimleri gerektiği gibi çevirmek için bir ara kalkan kullanırım. Bu amaç için özel olarak yapılmış bir kalkan vardı ama bulamadım. Belki bu işe yarar.


SPI bir sorun değil, çünkü kalkan D0-D7 resmi kullanıyor . Bunu başka ne etkileyebilir?
Anonim Penguen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.