Màn hình LCD LCD 2.4 "không hoạt động trên Arduino Mega


9

Ngay cả trên trang web của ebay cũng có đề cập rằng tôi không thể sử dụng màn hình LCD LCD 2,4 inch gắn trên Arduino Mega. Vấn đề là tôi đã mua chiếc khiên này do nhầm lẫn. Tôi muốn đặt chiếc khiên này lên Arduino Mega 2560. Cách kết hợp Mega và 2.4 "Display Shield?

lưu ý: Tôi đã thử trên Arduino Uno của bạn tôi. Shield đang hoạt động rất tốt.

lưu ý: Ảnh dưới đây đang xác định câu hỏi của tôi. Màn hình không chạy mã Arduino của tôi. Nó chỉ chạy đèn LED của nó.

nhập mô tả hình ảnh ở đây

    // 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
Quảng cáo eBay có tuyên bố vô nghĩa này: "Chiếc khiên này KHÔNG hoạt động với Mega Arduinos nhưng nó sẽ chỉ bằng một nửa tốc độ của các bảng loại Uno vì cách Mega sắp xếp lại tất cả các chân (không có cách nào để di chuyển này!) "Làm thế nào nó có thể đồng thời không hoạt động, và được một nửa tốc độ?
gwideman

Bạn đang sử dụng phiên bản 8 bit hay 16 bit?
LoneWolf

Mã của bạn nói rằng sử dụng các chân 38-41 trong khi nhìn vào hình ảnh, khiên thậm chí không kết nối với các chân 38-41. Bạn cũng đang xác định một mô hình LCD khác cho Mega so với UNO. Hãy thử sử dụng cùng mã với uno; vì vậyUTFT myGLCD(UNO_24,A2,A1,A3,A4);
Gerben

Nhìn vào từ ngữ, có vẻ như nó không hoạt động, nhưng cuối cùng họ sẽ có một thư viện chậm hơn để làm cho nó hoạt động.

Câu trả lời:


7

Tôi mới tình cờ mua cùng một LCD Shields vài ngày trước, tìm kiếm một thư viện để sử dụng nó với bảng MEGA 2560 tôi đã tìm thấy https://github.com/Smoke-And-Wires/TFT-Shield-Example-Code mà hỗ trợ cả bảng UNOMEGA .

Cách sử dụng rất, đơn giản nếu chúng ta muốn sử dụng nó cho MEGA, chúng ta nên thay đổi tiêu đề #include "uno_24_shield.h"trong SWTFT.cpp thành#include "mega_24_shield.h"

Mô tả (hữu ích để thêm suppport cho lá chắn trong các thư viện khác):

Tính không tương thích đến từ các ánh xạ cổng khác nhau cho việc kết nối Arduino giữa Mega và UNO.

trong UNO LCD khiên sẽ được kết nối thông qua:

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

trong MEGA, nó sẽ được kết nối thông qua:

+---------------+-----+-----+-----+-----+-----+-----+-----+-----+
| 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
ÔI CHÚA ƠI!! NÓ ĐANG LÀM VIỆC: D Trước tiên tôi tải xuống Bản phát hành nâng cao Arduino 1.0.5 từ đây: forum.arduino.cc/index.php/topic,118440.0.html Sau đó tôi mở mã GitHub của bạn sau đó tải xuống. Tôi mở swtft.cpp thông qua chương trình DevC / C ++ mà tôi đã tải xuống trước đó. Tôi thay đổi các dòng uno bằng các dòng sau: #include "mega_24_shield.h" sau đó tôi tải mã lên Mega và nó đã hoạt động. Tôi chỉ đặt màn hình LCD LCD 2,4 "lên MEGA, tôi không kết nối gì thêm. Chỉ cần tôi đặt tấm chắn lên Mega: D Chúa cứu bạn: D Rất cảm ơn bạn. Lỗi vẫn còn 6 tháng. Cảm ơn.
Bay

4

Một cách để tiến hành là tạo một bảng tính hiển thị các vị trí pin được sử dụng bởi bảng này và tín hiệu lá chắn Arduino mà chúng cắm vào. Bên cạnh những thứ này, bạn cần các cột hiển thị các tín hiệu thực tế trên ATMega2560 (đối với Mega2560) và ATMega328 (đối với Uno) mà các chân khiên này gắn vào. Bạn có thể lấy thông tin này từ bản vẽ sơ đồ Uno và Mega2560.

Nhìn nhanh, có vẻ như tên pin của khiên Arduino cho Uno và Mega giống nhau: ví dụ: pin khiên '0' (số 0) ở cùng một vị trí trên cả hai bảng và tương tự cho các chân khác.

Tuy nhiên, trên Uno kỹ thuật số-0 gắn với ATMega328 Cổng D bit 0, trong khi trên Mega2560, nó gắn với ATMega2560 Cổng E bit 0. Và mọi thứ trở nên khó hiểu hơn với kỹ thuật số 2..7.

Bây giờ, khi xoay các bit riêng lẻ bằng cách sử dụng digitalWrite (pin, value), thư viện Arduino chắc chắn sẽ quan tâm đến việc dịch sang cổng / bit thích hợp cần được đặt cho chip ATMega và bo mạch Arduino đang sử dụng. Tuy nhiên, các thư viện sử dụng các hàm cấp thấp hơn (đặc biệt là nếu họ cần ghi toàn bộ byte vào các cổng, vì có thể thư viện LCD nhanh) sẽ cần thực hiện các bước riêng để thực hiện bản dịch này.

Vì vậy, ... bước đầu tiên là xác định xem có thư viện trình điều khiển LCD riêng cho Mega2560 hay không.

Tiếp theo, điều tra xem thư viện bạn có mã khởi tạo được cho là để xác định bảng nào nó đang chạy (và bảng của bạn có bao gồm không?) Hoặc yêu cầu bạn đặt một số cờ để cho biết bảng nào đang được sử dụng.

Không làm được điều đó, bạn có thể tạo ra một mớ hỗn độn của các bộ nhảy hoặc một số sơ đồ nối dây khác để nhảy các tín hiệu ATMega2560 của Mega để nó được nối lên như một Uno. Không rõ ràng rằng điều này là có thể, vì một số Cổng D của ATMega2560 thậm chí không được nối với tiêu đề.

Hoặc bạn có thể xem mã nguồn của thư viện và xem những gì nó thực sự đang làm, và những gì nó cần phải làm khác nhau để vận hành các chân ATMega 2560 mà lá chắn kết nối với.


2

Bạn đã kiểm tra trang chủ Thư viện? Trang thư viện của Henning Karlsen

Ông đã làm một hướng dẫn sử dụng cho thư viện. Ngoài ra còn có một tài liệu tham khảo về những gì pin đi đâu trong tài liệu yêu cầu.


0

Bạn cần so sánh các chức năng của các chân giữa Mega và Uno của bạn bè. Sau đó, bạn cần phải làm cho những kết nối điện xảy ra. Tôi nói về điều này một chút trong phần "vị trí pin" trong câu trả lời của tôi ở đây .

Điều này đòi hỏi "hack". Một cái gì đó cần phải được thực hiện để định tuyến lại các kết nối vật lý. Tôi thường sử dụng một lá chắn trung gian để dịch chân khi cần thiết. Có một chiếc khiên được chế tạo riêng cho mục đích này nhưng tôi không thể tìm thấy nó. Có lẽ cái này sẽ làm việc ?


SPI không phải là vấn đề, vì tấm khiên đang sử dụng hình ảnh D0-D7 . Những thứ khác có thể ảnh hưởng đến điều này?
Chim cánh cụt vô danh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.