Problem mit TFT Displays

Ich habe hier ein 80x160 TFT Display. Mit dem funktioniert die Programmierung mit der UTFT.h HERVORRAGEND. Jetzt nöchte ich aber ein etwas größeres Display verwenden und schon gehen die Probleme los. Es funktioniert nicht. Ich habe mehrere größere Displays ausprobiert. 128x128, 240x240, 128x160, überall das selbe Phenomen. Mit meiner Einstellung des 80x160 Displays wird etwas auf dem Display angezeigt, aber weisser Hintergrund, teils gepixelt und Schrift in falscher Farbe und Schriftart. Warum ist das so? Alle Displays sind ST7735S. Auch wenn ich im Sketch die Displaydefinition auf ST7735 oder ST7735S ändere funktioniert es nicht - dann kommt nur ein weisser Bildschirm. Ich habe schon alle möglichen Fehlermöglichkeiten die mir Google gelöiefert hat ausprobiert, aber nichts funktioniert. Kann mir bitte jemand helfen?

Das ist das Display mit dem es funktioniert:


Das ist das Display mit dem es nicht funktioniert:



Das ist meine UTFT Library:
TFT80160.zip (1,1 MB)

Und das ist mein Test-Sketch:

#include <UTFT.h>

// Declare which fonts we will be using
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
// Initialize display
//SDI=11 / SCL=12 / CS =10 / RST=8 / D/C=9 / +3,3V / GND
UTFT myGLCD(ST7735S_4L_80160, 11, 12, 10, 8, 9);

void setup() {

  // Setup the LCD
  myGLCD.InitLCD();
  myGLCD.clrScr();
  myGLCD.setFont(SmallFont);
  myGLCD.setColor(255, 255, 255);

}

void loop() {

  myGLCD.print("HELLO WORLD", CENTER, 40);

} 

Das muss nicht die Ursache sein, aber Du solltest die Lötstellen im 1. Bild dringend mit gut Flussmittel nachlöten.

Gruß Tommy

Was für eine ?
Der ST7753S kann nur Max 132RGB x 162 Pixel ansteuern, also 240 x240 geht nicht. Dass größte was ich kenne, und auch funktioniert bei mir ist ein 1,8"
Zeige mal links zu deinen Displays.
Nur zu Info die nächste Größe für gängige Displays ist 2,2", jedoch die haben ein ILI9341, ST7789 und Treiber IC

Bei der Einstellung zeigt das das was es soll 80 x 160 :wink:

Das hat ja bei mir funktioniert
nur deine Pins eintragen

#include <UTFT.h>
#include <SPI.h> // not necessary if Arduino IDE version >=1.6.6

// Declare which fonts we will be using
extern uint8_t SmallFont[];
uint8_t bl = 46;
//                     SDI,SCL, CS, RST, D/C 
 UTFT myGLCD ( ST7735 ,11,12,  15, 2, 4 );
//UTFT myGLCD(ST7735_4L_80160,11,12,10,8,9);
void setup (  ) {
  randomSeed ( analogRead ( 0 ) );
  pinMode (bl, OUTPUT);
  digitalWrite(bl, HIGH);
  // Setup the LCD
  myGLCD.InitLCD ();
  myGLCD.setFont ( SmallFont );
}

void loop (  ) {
  int buf[158];
  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, 159, 13 );
  myGLCD.setColor ( 64, 64, 64 );
  myGLCD.fillRect ( 0, 114, 159, 127 );
  myGLCD.setColor ( 255, 255, 255 );
  myGLCD.setBackColor ( 255, 0, 0 );
  myGLCD.print ( String("Universal TFT Lib."), CENTER, 1 );
  myGLCD.setBackColor ( 64, 64, 64 );
  myGLCD.setColor ( 255, 255, 0 );
  myGLCD.print ( String("H.Karlsen"), LEFT, 114 );
  myGLCD.print ( String("(C)2015"), RIGHT, 114 );

  myGLCD.setColor ( 0, 0, 255 );
  myGLCD.drawRect ( 0, 13, 159, 113 );

  // Draw crosshairs
  myGLCD.setColor ( 0, 0, 255 );
  myGLCD.setBackColor ( 0, 0, 0 );
  myGLCD.drawLine ( 79, 14, 79, 113 );
  myGLCD.drawLine ( 1, 63, 158, 63 );

  for ( int i = 9; i < 150; i += 10 )
    myGLCD.drawLine ( i, 61, i, 65 );
  for ( int i = 19; i < 110; i += 10 )
    myGLCD.drawLine ( 77, i, 81, i );

  yield (  );

  // Draw sin-, cos- and tan-lines
  myGLCD.setColor ( 0, 255, 255 );
  myGLCD.print ( String("Sin"), 5, 15 );
  for ( int i = 1; i < 158; i++ ) {
    myGLCD.drawPixel ( i, 63 + ( sin ( ( ( i * 2.27 ) * 3.14 ) / 180 ) * 40 ) );
  }

  yield (  );

  myGLCD.setColor ( 255, 0, 0 );
  myGLCD.print ( String("Cos"), 5, 27 );
  for ( int i = 1; i < 158; i++ ) {
    myGLCD.drawPixel ( i, 63 + ( cos ( ( ( i * 2.27 ) * 3.14 ) / 180 ) * 40 ) );
  }

  yield (  );

  myGLCD.setColor ( 255, 255, 0 );
  myGLCD.print ( String("Tan"), 5, 39 );
  for ( int i = 1; i < 158; i++ ) {
    myGLCD.drawPixel ( i, 63 + ( tan ( ( ( i * 2.27 ) * 3.14 ) / 180 ) ) );
  }

  delay ( 2000 );

  myGLCD.setColor ( 0, 0, 0 );
  myGLCD.fillRect ( 1, 14, 158, 113 );
  myGLCD.setColor ( 0, 0, 255 );
  myGLCD.setBackColor ( 0, 0, 0 );
  myGLCD.drawLine ( 79, 14, 79, 113 );
  myGLCD.drawLine ( 1, 63, 158, 63 );

  // Draw a moving sinewave
  x = 1;
  for ( int i = 1; i < ( 158 * 20 ); i++ ) {
    x++;
    if ( x == 159 )
      x = 1;
    if ( i > 159 ) {
      if ( ( x == 79 ) || ( buf[x - 1] == 63 ) )
        myGLCD.setColor ( 0, 0, 255 );
      else
        myGLCD.setColor ( 0, 0, 0 );
      myGLCD.drawPixel ( x, buf[x - 1] );
    }
    myGLCD.setColor ( 0, 255, 255 );
    y = 63 + ( sin ( ( ( i * 2.5 ) * 3.14 ) / 180 ) * ( 40 - ( i / 100 ) ) );
    myGLCD.drawPixel ( x, y );
    buf[x - 1] = y;

    yield (  );
  }

  delay ( 2000 );

  myGLCD.setColor ( 0, 0, 0 );
  myGLCD.fillRect ( 1, 14, 158, 113 );

  // 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 ( 39 + ( i * 10 ), 23 + ( i * 10 ), 59 + ( i * 10 ), 43 + ( i * 10 ) );
  }

  delay ( 2000 );

  myGLCD.setColor ( 0, 0, 0 );
  myGLCD.fillRect ( 1, 14, 158, 113 );

  // 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 ( 99 - ( i * 10 ), 23 + ( i * 10 ), 119 - ( i * 10 ), 43 + ( i * 10 ) );
  }

  delay ( 2000 );

  myGLCD.setColor ( 0, 0, 0 );
  myGLCD.fillRect ( 1, 14, 158, 113 );

  // 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 ( 49 + ( i * 10 ), 33 + ( i * 10 ), 15 );
  }

  delay ( 2000 );

  myGLCD.setColor ( 0, 0, 0 );
  myGLCD.fillRect ( 1, 14, 158, 113 );

  // Draw some lines in a pattern
  myGLCD.setColor ( 255, 0, 0 );
  for ( int i = 14; i < 113; i += 5 ) {
    myGLCD.drawLine ( 1, i, ( i * 1.44 ) - 10, 112 );
  }
  yield (  );

  myGLCD.setColor ( 255, 0, 0 );
  for ( int i = 112; i > 15; i -= 5 ) {
    myGLCD.drawLine ( 158, i, ( i * 1.44 ) - 12, 14 );
  }
  yield (  );

  myGLCD.setColor ( 0, 255, 255 );
  for ( int i = 112; i > 15; i -= 5 ) {
    myGLCD.drawLine ( 1, i, 172 - ( i * 1.44 ), 14 );
  }
  yield (  );

  myGLCD.setColor ( 0, 255, 255 );
  for ( int i = 15; i < 112; i += 5 ) {
    myGLCD.drawLine ( 158, i, 171 - ( i * 1.44 ), 112 );
  }

  delay ( 2000 );

  myGLCD.setColor ( 0, 0, 0 );
  myGLCD.fillRect ( 1, 14, 158, 113 );

  // Draw some random circles
  for ( int i = 0; i < 100; i++ ) {
    myGLCD.setColor ( random ( 255 ), random ( 255 ), random ( 255 ) );
    x = 22 + random ( 116 );
    y = 35 + random ( 57 );
    r = random ( 20 );
    myGLCD.drawCircle ( x, y, r );
  }

  delay ( 2000 );

  myGLCD.setColor ( 0, 0, 0 );
  myGLCD.fillRect ( 1, 14, 158, 113 );

  // Draw some random rectangles
  for ( int i = 0; i < 100; i++ ) {
    myGLCD.setColor ( random ( 255 ), random ( 255 ), random ( 255 ) );
    x = 2 + random ( 156 );
    y = 16 + random ( 95 );
    x2 = 2 + random ( 156 );
    y2 = 16 + random ( 95 );
    myGLCD.drawRect ( x, y, x2, y2 );
  }

  delay ( 2000 );

  myGLCD.setColor ( 0, 0, 0 );
  myGLCD.fillRect ( 1, 14, 158, 113 );

  // Draw some random rounded rectangles
  for ( int i = 0; i < 100; i++ ) {
    myGLCD.setColor ( random ( 255 ), random ( 255 ), random ( 255 ) );
    x = 2 + random ( 156 );
    y = 16 + random ( 95 );
    x2 = 2 + random ( 156 );
    y2 = 16 + random ( 95 );
    myGLCD.drawRoundRect ( x, y, x2, y2 );
  }

  delay ( 2000 );

  myGLCD.setColor ( 0, 0, 0 );
  myGLCD.fillRect ( 1, 14, 158, 113 );

  for ( int i = 0; i < 100; i++ ) {
    myGLCD.setColor ( random ( 255 ), random ( 255 ), random ( 255 ) );
    x = 2 + random ( 156 );
    y = 16 + random ( 95 );
    x2 = 2 + random ( 156 );
    y2 = 16 + random ( 95 );
    myGLCD.drawLine ( x, y, x2, y2 );
  }

  delay ( 2000 );

  myGLCD.setColor ( 0, 0, 0 );
  myGLCD.fillRect ( 1, 14, 158, 113 );

  for ( int i = 0; i < 5000; i++ ) {
    myGLCD.setColor ( random ( 255 ), random ( 255 ), random ( 255 ) );
    myGLCD.drawPixel ( 2 + random ( 156 ), 16 + random ( 95 ) );
    yield (  );
  }

  delay ( 2000 );

  myGLCD.fillScr ( 0, 0, 255 );
  myGLCD.setColor ( 255, 0, 0 );
  myGLCD.fillRoundRect ( 10, 17, 149, 72 );

  myGLCD.setColor ( 255, 255, 255 );
  myGLCD.setBackColor ( 255, 0, 0 );
  myGLCD.print ( String("That's it!"), CENTER, 20 );
  myGLCD.print ( String("Restarting in a"), CENTER, 45 );
  myGLCD.print ( String("few seconds..."), CENTER, 57 );

  myGLCD.setColor ( 0, 255, 0 );
  myGLCD.setBackColor ( 0, 0, 255 );
  myGLCD.print ( String("Runtime: (msecs)"), CENTER, 103 );
  myGLCD.printNumI ( millis (  ), CENTER, 115 );

  delay ( 10000 );
}

WAS ist sehr Wichtig du musst die Originale UTFT nehmen !!! nicht die TFT80160, schade habe mein 1,8" abgebaut .

Also das ist jetzt wirklich nicht das Problem!
Daß das nicht schön gelötet ist weiß ich selber (ich hab das schliesslich mal gelernt).
Ist nur ein Provisorium und funktioniert trotz der gekleckerten Lötstelle.
Falls du noch einen sachlich hilfreichen Beitrag leisten kannst, höre ich gerne zu.

Da kommt bei mir wieder nur ein weisser Bildschirm...

mit der UTFT-EESSP?
UTFT-ESP-master.zip (2.6 MB)

Du musst dir oder 3 Portable IDE bauen oder die anderen Bibliotheken löschen, sonst hast 3X UTFT.h und welsche wird gerade genutzt ist andere Frage.

Was mich wundert der BLK Pin ist nicht belegt trotz dem leuchtet das Display.


und wenn das ein anderes Projekt ist nimm eine vernünftige Bibliothek, nicht die uralte Dinger :joy:

Dann sind die Lötstellen noch beschämender.
Nein, bei Deiner Einstellung zu Kritik habe ich nichts weiter zu Deinen Beiträgen beizutragen.
Und Tschüß.

Gruß Tommy

Armes Deutschland! Sich mit so einem nebensächlichen Quatsch aufzuhalten... Was an PROVISORIUM war nicht verständlich? Kann echt nur den Kopf schütteln!

Vielleicht ein brauchbarer Tip ! Ich schau mal durch ob ich mehrere Bibiliotheken rumliegen habe. BLK Pin ist beim 90x160 Display auch nicht angeschlossen und funktioniert einwandfrei. DAS kann nicht das Problem sein...

BLK, BL, LED Bedeutet Hintergrund Beleuchtung, normal ohne Spannung drauf sollte das Display dunkel bleiben.
Das sind die ersten Displays was werden mit LOW gesteuert was ich kenne.

Bibliotheken was funktionieren mit fast alle MCU :
Adafruit_ ST7735 funktioniert auch mit anderen Displays ST7789, und ST7796, einfach zu handhaben
TFT_eSPI. User_Setup.h muss angepasst werden
Arduino GFX ungewöhnliche Ansteuerung.
LVGL Garnichts für Anfänger, habe nicht getestet.

@stefan-007 man sollte eigene alte Beiträge lesen.

TFT_eSPI Beispiel, sogar mit der User_Setup.h habe auch geliefert.
Wenn mal jedoch nichts neues lernen will musst mall auf Git die Lib Ersteller anschreiben die solle das alte zeug auf Vordermann bringen.
Ich werde mich nicht mehr widerholen, habe genug gezeigt.

Na Hauptsache der fällt dabei nicht ab. :sweat_smile:
Bedenke, auch bei einem Provisorium können schlechte Lötstellen Fehler verursachen. Somit ist eine Bereinigung dieser erstmal besser als hier so arrogant aufzutreten.
Zudem ist es immer besser Helfer nicht so anzugehen.
Und jetzt darfst du deinen "Shitstorm" raushauen.

Moin @stefan-007 ,

wenn man die Ausgaben auf beiden Displays vergleicht, lässt sich zum 128x160er Folgendes sagen:

  • Die Pixel werden nicht korrekt addressiert:
    • Der obere und untere "bunte" Streifen ist augenscheinlich nicht auf Hintergrundfarbe gesetzt.
    • Der weiße Block entspricht in seiner Abmessung ziemlich gut zu 80x160, beginnt aber nicht bei der Bildschirmadresse 0,0 sondern mit einem vertikalen Versatz.
    • Der Text innerhalb des Blocks entspricht bzgl. Zeichen und Position dem, was auf dem 80er Display erscheint.
    • Hinter- und Vordergrundfarben sind invertiert.

Warum so ausführlich, obwohl es jeder sehen kann?

Weil die o.a. Beobachtungen insgesamt auf einen nicht an das Display angepassten Treiber schließen lassen:

  • Der falsche Beginn (und das falsche Ende) der Adressierung des Pixelspeichers sprechen dafür.
  • Ebenso die "Falschfarben"-Darstellung
  • Dass überhaupt etwas und dazu noch lesbar dargestellt wird, spricht dafür, dass die Controller der Displays ähnliche oder gar identische Kommandos verarbeiten, so dass "nur" die spezifischen Parameter anzupassen sein sollten.

Im günstigsten Fall liegt es nur am korrekten Parameter beim Instanziieren des Display-Objektes ...

Der Parameter ST7735S_4L_80160 ist speziell; er wird (vermutlich nur?) in dieser Lib verwendet:

https://github.com/nyh-workshop/esp8266-UTFT-ST7735S-Library/blob/master/UTFT.h

Das solltest Du unbedingt prüfen, denn die Ursache liegt mit hoher Sicherheit an der verwendeten Library.

Vielleicht versuchst Du es erstmal mit der von @fony vorgeschlagenen Library von Adafruit; läuft eine Beispielanwendung auf Deinem Display erfolgreich, ist die UTFT-Initialisierung als Ursache sicher.

Viel Erfolg!
ec2021

Für Display mit 80 x 160 vorgesehen, alle andere Auflösungene werden falsch dargestellt, man kann jedoch die lib nutzen nur mit ST7735 ohne den zusatz, jedoch hat bei mir alles falsch dargest auch mit einem 80 x 160 Pixel Display.
So am Rande ehnlichen Display wie im ersten Bild habe zurück geschickt, fehlerhaft.
Nicht um sonst hat Bodmer in der TFT_eSPI unzählige Möglichkeiten zu Ansteuerung für den ST7735 in seiner Lib.

Daaaanke an alle !
Ich habe mir jetzt die TFT.h von Henning Karlsen geholt und damit funktioniert das Display (fast). Farben stimmen nicht. Gibt es da eine generelle Anpassung bei diesen Phenomen? Wenn ja was muß ich wo umstellen? Werte in der UTFT-h ?

myGLCD.setColor(0, 0, 255); sollte BLAU sein, wird aber ROT ausgegeben.
myGLCD.setColor(255, 0, 0); sollte ROT sein, wird aber BLAU ausgegeben.
myGLCD.setColor(0, 255, 0); GRÜN passt

UTFT.zip (2,5 MB)

[code]
#include <UTFT.h>

// Declare which fonts we will be using
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
// Initialize display
//SDI=11 / SCL=12 / CS =10 / RST=8 / D/C=9 / +3,3V / GND
UTFT myGLCD(ST7735, 11, 12, 10, 8, 9);

void setup() {

  // Setup the LCD
  myGLCD.InitLCD();
  myGLCD.clrScr();
  myGLCD.setFont(SmallFont);
  myGLCD.setColor(0, 255, 0);

}

void loop() {

  myGLCD.print("HELLO WORLD", CENTER, 40);

} 
[/code]

Die TFT.h basiert auf Adafruit ST7735 und ist nicht vom Karlsen nur Adafruit, die gezeigte UTFT so wie dein Beispiel aber schon.
Die UTFT kann nicht BGR zu RGB tauschen, jedoch die TFT_eSPI vom Bodmer schon.
Noch was, jede Grafik Lib kann Print, SetCursor, so wie Schrift skalieren