2.4 "TFT LCD शील्ड Arduino मेगा पर काम नहीं कर रहा है


9

यहां तक ​​कि eBay की वेबसाइट पर यह उल्लेख किया गया है कि मैं Arduino Mega के अटैचमेंट पर 2.4 "TFT LCD शील्ड डिस्प्ले का उपयोग नहीं कर सकता। समस्या यह है कि मैंने गलती से यह शील्ड खरीदी है। मैं इस शील्ड को Arduino Mega 2560 पर रखना चाहता हूं। क्या यह है। मेगा और 2.4 को मिलाने का तरीका "डिस्प्ले शील्ड?

नोट: मैंने अपने दोस्त के Arduino Uno पर कोशिश की। शील्ड बहुत अच्छा काम कर रही है।

नोट: नीचे दिया गया फोटो मेरे प्रश्न का निर्धारण कर रहा है। प्रदर्शन मेरे Arduino के कोड को नहीं चलाता है। यह केवल अपनी एलईडी चलाता है।

यहां छवि विवरण दर्ज करें

    // 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
ईबे विज्ञापन में यह निरर्थक कथन है: "यह ढाल मेगा Arduinos के साथ काम नहीं करता है, लेकिन इसकी वजह से यू-टाइप बोर्डों की आधी गति हो जाती है क्योंकि मेगा सभी पिनों को पुनर्व्यवस्थित करता है (चारों ओर पाने का कोई रास्ता नहीं है) यह!) "यह एक साथ कैसे काम नहीं कर सकता है, और आधी गति हो सकती है?"
gwideman

क्या आप 8bit या 16bit संस्करण का उपयोग कर रहे हैं?
लोनवुल्फ

आप कोड 38-41 पिन का उपयोग करने के लिए कहते हैं, जबकि तस्वीर को देखते हुए ढाल भी 38-41 पिन से कनेक्ट नहीं होता है। आप संयुक्त राष्ट्र संघ की तुलना में मेगा के लिए एक अलग एलसीडी-मॉडल को परिभाषित कर रहे हैं। यूनो के समान कोड का उपयोग करने का प्रयास करें; इसलिएUTFT myGLCD(UNO_24,A2,A1,A3,A4);
गेरबेन

शब्दांकन को देखते हुए, ऐसा लगता है कि यह काम नहीं करता है, लेकिन अंततः इसे काम करने के लिए एक धीमी पुस्तकालय होगा।

जवाबों:


7

मैं अभी कुछ दिन पहले उसी एलसीडी शील्ड्स को खरीदने के लिए हुआ था, एक MEGA 2560 बोर्ड के साथ इसका उपयोग करने के लिए एक पुस्तकालय की तलाश में था जो मुझे मिला https://github.com/Smoke-And-Wires/TFT-Shield-Example-Code जो UNO और MEGA दोनों बोर्डों का समर्थन करता है ।

प्रयोग, बहुत है सरल हम के लिए इसका उपयोग करना चाहते है, तो मेगा हम हैडर बदलना चाहिए #include "uno_24_shield.h"में SWTFT.cpp को#include "mega_24_shield.h"

विवरण (अन्य पुस्तकालयों में ढाल के लिए सपोर्ट जोड़ने के लिए उपयोगी):

मेगा और UNO के बीच Arduino पिन-आउट के लिए विभिन्न पोर्ट मैपिंग से असंगति आती है।

में संयुक्त राष्ट्र संघ एलसीडी ढाल के माध्यम से जोड़ा जाएगा:

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

में मेगा इसके माध्यम से जोड़ा जाएगा:

+---------------+-----+-----+-----+-----+-----+-----+-----+-----+
| 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
हे भगवान!! IT IS WORKING: D सबसे पहले मैं Arduino एन्हांस्ड रिलीज़ 1.0.5 यहाँ से डाउनलोड करता हूँ: forum.arduino.cc/index.php/topic,118440.0.html फिर मैंने आपका GitHub कोड खोला, फिर इसे डाउनलोड करें। मैं swtft.cpp को DevC / C ++ प्रोग्राम के माध्यम से खोलता हूं जिसे मैंने पहले डाउनलोड किया था। मैं इनके साथ यूनो लाइनें बदलता हूं: #include "Mega_24_shield.h" तब मैं कोड को मेगा में अपलोड करता हूं और यह काम करता है। मैंने केवल 2.4 "TFT LCD को MEGA पर रखा, मैंने अधिक कुछ भी कनेक्शन नहीं बनाया। बस मैंने मेगा पर शील्ड लगाई: D भगवान आपको बचाता है: D बहुत विशेष धन्यवाद। त्रुटि अभी भी 6 महीने से है। धन्यवाद
बे

4

आगे बढ़ने का एक तरीका एक स्प्रेडशीट बनाना है जो इस बोर्ड द्वारा उपयोग किए जाने वाले पिन पदों को दिखाता है, और Arduino कवच संकेतों को वे प्लग इन करते हैं। इनके आगे, आपको ATMega2560 (Mega2560 के लिए) और ATMega328 (Uno के लिए) पर वास्तविक सिग्नल दिखाने वाले कॉलम चाहिए, जो ये शील्ड पिंस संलग्न करते हैं। आप इस जानकारी को Uno और Mega2560 योजनाबद्ध चित्रों से प्राप्त कर सकते हैं।

त्वरित रूप से, ऐसा लगता है कि Uno और Mega के लिए Arduino शील्ड पिन नाम समान हैं: उदाहरण के लिए, दोनों पिनों पर शील्ड पिन '0' (डिजिटल शून्य) एक ही स्थान पर है, और इसी तरह अन्य पिनों के लिए भी है।

हालाँकि, Uno digital-0 पर ATMega328 पोर्ट D बिट 0 से जुड़ता है, जबकि Mega2560 पर, यह ATMega2560 Port E बिट 0. से जुड़ता है और चीजें डिजिटल 2..7 के साथ अधिक obtuse प्राप्त करती हैं।

अब, जब डिजिटल बिट (पिन, मान) का उपयोग करके बिट्स को अलग-अलग घुमाया जाता है, तो Arduino लाइब्रेरी को कोई संदेह नहीं है कि उपयुक्त पोर्ट / बिट्स का अनुवाद करने के लिए ध्यान दें जो ATMega चिप और Arduino बोर्ड के लिए सेट होने की आवश्यकता है। हालाँकि, निम्न-स्तरीय फ़ंक्शंस का उपयोग करने वाले पुस्तकालयों (विशेष रूप से यदि उन्हें पोर्ट के लिए संपूर्ण बाइट्स लिखने की आवश्यकता होती है, जैसा कि एक तेज एलसीडी लाइब्रेरी हो सकती है) को इस अनुवाद को बनाने के लिए अपने स्वयं के कदम उठाने की आवश्यकता होगी।

इसलिए ... पहला कदम यह निर्धारित करना है कि मेगा2560 के लिए एक अलग एलसीडी ड्राइवर लाइब्रेरी है या नहीं।

इसके बाद, जांच करें कि आपके पास जो लाइब्रेरी है, उसमें इनिशियलाइज़ेशन कोड है जो यह निर्धारित करता है कि यह किस बोर्ड पर चल रहा है (और क्या आपका बोर्ड इसमें शामिल है?), या आपको यह बताने के लिए कुछ ध्वज सेट करने की आवश्यकता है कि बोर्ड किस उपयोग में है।

असफल होने पर, आप मेगा के ATMega2560 के संकेतों को कूदने के लिए जंपर्स या किसी अन्य वायरिंग योजना की गड़बड़ी पैदा कर सकते हैं ताकि यह एक ऊनो की तरह वायर्ड हो जाए। यह स्पष्ट नहीं है कि यह संभव है, क्योंकि ATMega2560 के पोर्ट डी में से कुछ को हेडर से वायर्ड भी नहीं किया जाता है।

या आप पुस्तकालय के लिए स्रोत कोड को देख सकते हैं और देख सकते हैं कि यह वास्तव में क्या कर रहा है, और यह एटीएमईगा 2560 पिन को संचालित करने के लिए अलग करने की आवश्यकता होगी जो ढाल से जुड़ता है।


2

क्या आपने लाइब्रेरी का मुखपृष्ठ देखा है? हेनिंग कार्लसन का पुस्तकालय पृष्ठ

उन्होंने पुस्तकालय के लिए एक उपयोगकर्ता पुस्तिका बनाई है। आवश्यकताओं के दस्तावेज़ में पिन कहाँ जाता है, इसका संदर्भ भी है।


0

आपको अपने मेगा और अपने मित्र के यूनो के बीच पिन के कार्यों की तुलना करने की आवश्यकता है। फिर आपको उन विद्युत कनेक्शनों को बनाने की आवश्यकता है। मैं अपने उत्तर के "पिन स्थानों" अनुभाग में इसके बारे में थोड़ी बात करता हूं ।

इसके लिए "हैकिंग" की आवश्यकता होती है। उन शारीरिक संबंधों को फिर से तैयार करने के लिए कुछ किया जाना चाहिए। मैं आमतौर पर आवश्यकतानुसार पिंस का अनुवाद करने के लिए एक मध्यवर्ती ढाल का उपयोग करता हूं। इस उद्देश्य के लिए विशेष रूप से एक ढाल बनाया गया था, लेकिन मुझे यह नहीं मिला। शायद यह एक काम करेगा ?


SPI कोई समस्या नहीं है, क्योंकि ढाल D0-D7 चित्र का उपयोग कर रहा है । इससे और क्या चीजें प्रभावित हो सकती हैं?
बेनामी पेंगुइन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.