Display bleibt weiss

Hallo zusammen

Ich wollte ein Display testen, dieses möchte ich einmal für eine Wetterstation verwenden.

Arduino UNO R3
Display Waveshare XPT2046 (320x480)

Anschluss
LCD_CS D10
LCD_DC D9|Data
LCD_RST D8|Reset
LCD_BL 5V
MOSI D11
MISO D12
SCLK D13
GND GND
5V 5V

#include <Arduino_GFX_Library.h>

#define TFT_CS 10
#define TFT_DC 9
#define TFT_RST 8

Arduino_DataBus *bus = new Arduino_HWSPI(TFT_DC, TFT_CS);
Arduino_GFX *gfx = new Arduino_ILI9486(bus, TFT_RST);

void setup() {
  gfx->begin();
  gfx->fillScreen(BLACK);
  gfx->setCursor(10, 10);
  gfx->setTextColor(WHITE);
  gfx->setTextSize(2);
  gfx->println("Hallo TFT!");
}

void loop() {
}

Das Display bleibt nur weiss, ohne Schrift

Was mache ich falsch?
Bibliotheke ist installiert

Danke für eure Hilfe

Dieses hier?

Wenn du das Display-Shield auf den Uno aufsteckst, stimmt das Pin-Mapping nicht so ganz mit den Vorgaben überein (z.B. ist TFT_DC auf 7 statt 9). Nur mal so eine erste Vermutung..

Waveshare hat auch seine eigene Bibliothek für ILI9486 (das ist der Display-Treiber, XPT2046 ist der Touch-Controller) mit Beispiel-Sketch. Vielleicht bringst du es damit zum Laufen?

Ich habe nun zum testen das Display direkt auf den UNO aufgesteckt.

Habe diverse kurzSketch probiert, das Display bleibt weiss

#include <Arduino_GFX_Library.h>

#define TFT_CS   10
#define TFT_DC    9
#define TFT_RST   8

Arduino_DataBus *bus = new Arduino_HWSPI(TFT_DC, TFT_CS);
Arduino_GFX *gfx = new Arduino_ILI9486(bus, TFT_RST);

void setup() {
  Serial.begin(115200);
  
  pinMode(7, OUTPUT);
  digitalWrite(7, HIGH); // Backlight an

  gfx->begin(0x9486);    // Manuelle ID

  gfx->fillScreen(BLACK);
  gfx->setTextColor(WHITE);
  gfx->setTextSize(2);
  gfx->setCursor(10, 10);
  gfx->println("Hallo TFT!");
  
  Serial.println("Setup fertig");
}

void loop() {}

Habe vor einiger Zeit auch andere Display versucht zum laufen zu bringen, leider ohne Erfolg.
Ist dies den so schwierig??

Bei Displays verwendet man eher print(), als println()

Gruß Tommy

#include <Arduino_GFX_Library.h>

// Pins definieren
#define TFT_CS 10
#define TFT_DC 9
#define TFT_RST 8

// SPI Bus und Display Objekt
Arduino_DataBus *bus = new Arduino_HWSPI(TFT_DC, TFT_CS);
Arduino_GFX *gfx = new Arduino_ILI9486(bus, TFT_RST);

void setup() {
  gfx->begin();
  gfx->fillScreen(0x0000); // Schwarz füllen
  gfx->setTextColor(0xFFFF); // Weißer Text
  gfx->setTextSize(2);

  // Cursor an Position setzen
  gfx->setCursor(10, 10);
  gfx->print("Hallo ");       // Text ausgeben ohne Zeilenumbruch
  gfx->print("TFT!");         // Weiteren Text anhängen
}

void loop() {
  // Keine Wiederholung nötig
}

so etwas?

Im seriellen Monitor heisst es "ID = 0x2828"

Mach mal Foto der Rückseite, so das man die Pinbezeichnug lesen kann.
Du hast so wie so ein kleines Problem, 320 x 480 also 3.5" oder 4" Display + Adafruit GFX verbrauch ziemlich viel Programmspeicher so wie RAM, viel übrig für denn rest bleibt nicht.
Vielleicht kann man dem mit ESP32 zum laufen bringen, deshalb will das Foto.

Ist ein Display, das man auf das Arduino UNO R3 aufstecken kan, dann sollte die PIN-Belegung ja stimmen

Mit dem solte tun, dort ist auch demo PRG
https://www.waveshare.com/wiki/3.5inch_TFT_Touch_Shield.
Steht zwar 3.5 macht aber nix.
Das Display mit ESP32 befeuern ist kritisch wegen den 5V, esp ist ein 3,5V System

Du solltest besser die Library von Waveshare (Link von @fony) verwenden.
Da wird die SPI.h-Library eingebunden, die ich in deinem Beispiel vermisse. Ohne die geht nix.
Zudem werden in der Library auch alle Pins des Uno richtig angesprochen.

Nur wenn die im Sketch auch richtig bedient werden. Das sehe ich bei dir nicht.

mit Waveshare geht es, danke

Jetzt habe ich das Display ja auf dem UNO aufgesteckt, nun kann ich kein Temperatursensor oder Empfänger anschliessen!!
Was kann ich da machen?

Du musst herausfinden / messen, welche Pins vom Display nicht genutzt werden und kannst diese durch anlöten von Drähten auf dem Uno danach nutzen.
Zumindest ist das die beste und sicherste Möglichkeit.

Edit:
So wie ich das erkennen kann, sind die analogen Pins ungenutzt.
Da ich das Display nicht nutze, ist das eine Vermutung.
Diese Pins kannst du auch als digitale Pins nutzen.
Beachte dabei, A4 und A5 können auch für I2C verwendet werden, falls du den I2C-Bus nutzen möchtest.

Für Uno gibt es so was

Somit hast zugang zu allen Pins.

@fony
Nutzt du das Teil selbst ?
Ich würde das nicht empfehlen, da das eine recht wackelige Angelegenheit ist. Ein Bekannter von mir nutzt es und nimmt das nur zur Programmierzeit. Im Betrieb ist ihm das zu unsicher, da schon mehrfach ausgefallen. Bei ihm geben die Stifte im Uno keinen richtigen Kontakt.
Und für einen Dauerbetrieb würde ich 3 - 4 Kabel anlöten.

Ja, wenn das Display drauf ist gecht es noch, es wird ja über alle Pins gehalten.

Gibt es auch als einzelnes "Arduino Screw Shield"-Board

Ich war zuerst skeptisch, ob der ICSP-Anschluss dafür auch verlängert werden müsste, aber auf dem Waveshare Display gibt es DIP-Schalter, die den SPI-Anschluss auf die äußeren Pins 11 bis 13 legen.

Das sieht mir auch stabiler aus.
Ein Link könnte dem TO besser helfen.
Wenn es dann lieferbar ist, was das andere nicht ist. :wink:

Abgeleitet von der Beschriftung des Displays kannst Du folgende Pins nutzen:

  • 2 Wenn ich richtig gezählt habe, ist der frei.
  • A0 bis A5 als analoge oder digitale IOs, A4 und A5 auch als I²C-Bus, für den es viele Sensoren gibt.
  • 11 bis 13 sind mit dem SPI-Bus für SD-, Display- und Touch-IC belegt, weitere Teilnehmer am SPI-Bus wären möglich. Jeder Sensor benötigt dann einen CS-Pin zusätzlich.

Die Teilnehmer am I²C-Bus werden durch Adressen unterschieden, benötigen daher keine weiteren Pins.

Für I²C und SPI gibt es auch Portexpander, sollten Dir IOs fehlen.

Für Wetterstation empfehle ich dem BME280 den git es auch in 5V Ausführung, es ist ein I2C Sensor was zeigt an Temperatur, Luftdruck, und Relative Feuchtigkeit.

3.3 Volt.

Du magst ja DETAILS. :wink:

Dumme Frage an alle.

Wieso steht im Script. " gfx->begin();

und nicht gfx.begin();

Und noch ein Tipp. Es mag zwar seltsam klingen aber ändere mal Testweise die TextColor auf BLACK. Nicht das nur der Hintergrund weiß ist, von Natur aus :wink:

Gruß

Pucki