2,8 TFT Display von True Components funktioniert nicht auf Arduino MEGA

#include <Adafruit_ILI9341.h>

#include <Adafruit_TFTLCD.h>
#include <Adafruit_GFX.h>
#include <Fonts/FreeMonoBold24pt7b.h>

#include <TouchScreen.h>

#define LCD_CS A3     //A0-A4 Display //A5 Taster
#define LCD_CD A2     //10-13 frei
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4

#define TS_MINX 122
#define TS_MINY 113
#define TS_MAXX 942
#define TS_MAXY 907

#define YP A2
#define XM A3
#define YM 8
#define XP 9

#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
#define ORANGE tft.color565(255, 200, 0)
#define GREY tft.color565(240, 240, 240)
#define DARK_GREY tft.color565(150, 150, 150)
#define HELL_BLUE tft.color565(0, 240, 255)

bool touchstate, ptouchstate, b;
int x, y, TouchDisplayswitch, Matrix;

double voltage_setting = 24.00, current_setting = 10, voltage_messaure = 24.00, current_messaure = 10;
int voltagevorkomma = 24 , voltagenachkomma = 20;

Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

unsigned long nmillis, pmillis;

uint16_t icr = 0xffff;

void setup() {
  Serial.begin(115200);
  Serial.print("Starting...");
    
  tft.reset();
  tft.begin(0x9341);
  tft.setRotation(0);
  
  tft.fillScreen(BLACK);
  tft.setRotation(3);
  tft.setFont(&FreeMonoBold24pt7b);
  tft.setTextSize(1);

  setupPWM16();
  analogWrite16(10, 0); //16 bit PWM 0-65535
  StartMenu();

  
  
  
}

void loop() {
   
    //Serial.println("Zyklus");
    /*extrem wichtig sonst funkioniert display und touch nicht zusammen #tft.print*/
    // if sharing pins, you'll need to fix the directions of the touchscreen pins
    //pinMode(XP, OUTPUT);
    pinMode(XM, OUTPUT);      
    pinMode(YP, OUTPUT);
    //pinMode(YM, OUTPUT);
    /*extrem wichtig sonst funkioniert display und touch nicht zusammen #tft.print*/ 
     
    /*Displayausgabe muss vor p Touch sein und nach XM YP*/
     nmillis = millis() - pmillis;
     pmillis = millis();
     //Serial.print("Zykluszeit ");Serial.print(nmillis);Serial.println("ms");
      
    /*Displayausgabe muss vor p Touch sein und nach XM YP*/ 
      
      TSPoint p = ts.getPoint(); 
      
      /*Serial.print("touchstate= ");Serial.print(touchstate);
      Serial.print("ptouchstate= ");Serial.println(ptouchstate);*/
    
    if (p.z > ts.pressureThreshhold)
      touchstate = 1;
      else
        touchstate = 0;
    
    if(touchstate != ptouchstate && touchstate == 1) {
     x = map(p.x, TS_MINX, TS_MAXX, tft.height(), 0);
     y = map(p.y, TS_MINY, TS_MAXY, tft.width(), 0);
     Serial.print("X = "); Serial.print(x);
     Serial.print("\tY = "); Serial.print(y);
     Serial.print("p.X = "); Serial.print(p.x);
     Serial.print("\tp.Y = "); Serial.print(p.y);
     Serial.print("\tPressure = "); Serial.println(p.z);    

     //analogWrite16(10, 30000); //16 bit PWM 0-65535
     //delay(2);
    }
}
void StartMenu(){
  tft.setTextSize(2);
  tft.setCursor(10,60); tft.print(voltage_messaure,1);tft.print("V");
}

void setupPWM16() {
  DDRB  |= _BV(PB1) | _BV(PB2);       /* set pins as outputs */
  TCCR1A = _BV(COM1A1) | _BV(COM1B1)  /* non-inverting PWM */
        | _BV(WGM11);                 /* mode 14: fast PWM, TOP=ICR1 */
  TCCR1B = _BV(WGM13) | _BV(WGM12)
        | _BV(CS10);                  /* prescaler 1 */
  ICR1 = icr;                         /* TOP counter value (freeing OCR1A*/
}

void analogWrite16(uint8_t pin, uint16_t val)
{
  switch (pin) {
    case  9: OCR1A = val; break;
    case 10: OCR1B = val; break;
  }
}

Das Programm funktioniert einwandfrei auf dem Arduino Uno. Aber auf dem MEGA bleibt das Display weiß. Ich habe schon nach der Ursache gesucht bei anderen Displays kann man Lötverbindungen setzen bzw. entfernen ich kann das jedoch bei dem Display nicht.
Habt ihr eine Idee wie man das Programm mit dem Display auf dem MEGA zum laufen bringt?

Da scheinen die Pins A2,A3 doppelt belegt zu sein. Muss das so sein?

Gruß Tommy

Bei den Adafruit-Displays und Examples teilen sich der Touch und der Display die Leitungen im SPI-Mode: Resistive Touchscreen | Adafruit 2.8" and 3.2" Color TFT Touchscreen Breakout v2 | Adafruit Learning System
Nu ist das wahrscheinlich ein Display wie beim Conrad....

Vermutlich wird das TFT per SPI gesteuert und beim Mega sind die SPI-Pins auf auf anderen Pins gelegt.
Schau die das Pinout von beiden Boards an und beachte die Unterschiede.
Ein Link von deinem Display wäre auch angebracht.

Wen das ein Steckbares für Uno ist versuchen mit
Adafruit_ILI_9341_8bit_AS
oder vom Oli Kraus
U8g2
Ich habe einen 2,4" mit ILI9341 hat mit der Adafruit_ILI_9341_8bit_AS so einiger maßen funktioniert = nach 10 min wahren Aussetzer
Mit der Lib vom Oli alles 1A

Hier ein Link vom Display

Die Pins 10-13 sind aber für die SD Karten ansteuerung belegt. Und da ich diese nicht verwende sollte es dann da doch keine Probleme geben. bezüglich SPI

Das Display wird mit einer parallel Schnittstelle angesprochen, nicht per SPI.
Da es ein parallel Anschluss ist, muss ich hier passen.

Hast du dir die Doku dazu durchgelesen ?

Bei Mega liegt SPI an der Seitlicher Leiste schau auf das Pinout vom Mega. Funktioniert das Display mit der Lib vom Oli?

@fony
Seitlich ist hier der falsche Ausdruck, die Leiste befindet sich an einer Stirnseite sollte es besser heißen. Aber sicher ist, nicht auf Pin 10 - 13. Sondern Pin 50 - 53.

Hast du die Kommentare auf der Conrad-Website gelesen?
Unter anderem:

Individualist schreibt:
...
Die Beschreibung ist dürftig, der Link zu Makerfactory nicht zielführend. Die Libraries sind vorwiegend auf SPI/I²C Kommunikation ausgelegt. Das Produkt ist jedoch ähnlich dem Velleman VMA412, dort findet man einen Download. Ich habe aus früheren Projekten die Lib MCUFRIENDS_kbv, die funktioniert, in jedem Fall braucht man die Lib Adafruit_GFX, die kann man hier mittlerweile nur verwenden, wenn man die beiden Dateien Adafruit_MonoOLED.h und Adafruit_MonoOLED.cpp entfernt. Es gibt kein Schaltbild, bei der Touch-Funktion tappt man völlig im Dunkeln. Obwohl eigentlich schon alle GPIOs mit dem Display belegt sind, kann man letztlich trotzdem die Adafruit TouchScreen - Library verwenden, wenn man die Zuordnung XP=8, XM=A2, YP=A3, YM=9 verwendet und Kalibrier-Werte anpasst, wie etwa : TS_LEFT=910, TS_RT=120, TS_TOP=90, TS_BOT=910.
...
Und nicht zu vergessen: beim Arduino UNO gibt es so gut wie keine freien GPIOs, ev. 10-13 statt dem SD-Interface und i²C, wenn man SCL und SDA am Arduino lötet - oder man nimmt besser den MEGA2560.

und

nhbn schreibt:
Ohne den Kommentar von Nutzer "Individualist" hätte ich vermutlich recht lange rumgefummelt bis ich es zum Laufen bekommen hätte (Arduino).
...
Auch die Adafruit Libs zum Touchscreen/ILI9341 führen nicht zum Erfolg. Die Libraries zum "Velleman VMA412" haben letztendlich zum Erfolg geführt - für eine schnelle Inbetriebnahme.

True Components ist eigen (überteuerte) Marke vom großen C.
Das Display selbst ist ein LCDWicki Display
http://www.lcdwiki.com/2.8inch_Arduino_Display
Die schreiben auch "Kompatiebel mit Mega" aber Software ist für Uno
2.8inch Arduino Display - LCD wiki.
Grundsätzlich machen Displays für Uno auf Mega probleme bei Anfänger.
Meiner 2,2" lag lange in der Kiste, und habe nur SPI Displays gekauft

Danke mit der MCUFRIENDS_kbv libary funktioniert das Display jetzt auf dem MEGA
Dankeschön

Dann markier doch bitte den Beitrag von @uxomm als Lösung. Freut sich auch die Nachwelt mit der Suchfunktion.

Super, dass es funktioniert.
Danke für die Rückmeldung.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.