sainsmart tft LCD verpixelt

Hallo,

ich habe mir das Sainsmart tft LCD bestellt und habe es mit dem shield an meinen Mega angeschlossen.

Nachdem ich die Bilbiotheken eingebunden habe und die ersten Beispiele geladen habe, wie es in der Quickstart Doku beschrieben war, fiel mir auf, dass die ausgegebenen Zeichen und Bilder alle recht unscharf und verpixelt dargestellt sind. Hat jemand eine Idee woran es liegen könnte?

Vorab vielen Dank für eure Hilfe
towo94

links zum tft?
fotos?
sketch?

Link:

Sketch:

// ITDB02_Touch_ButtonTest (C)2010 Henning Karlsen
// web: http://www.henningkarlsen.com/electronics
//
// This program is a quick demo of how create and use buttons.
//
// This program requires the ITDB02_Graph library (8bit mode)
// or ITDB02_Graph16 (16bit mode).
//
// It is assumed that the ITDB02 module is connected to a
// ITDB02 Shield, a ITDB02 Mega Shield or that you know how 
// to change the pin numbers in the setup.
//

// Remember to change the next line if you are using as 16bit module!
#include <UTFT.h>
#include <ITDB02_Touch.h>

// Declare which fonts we will be using
extern uint8_t BigFont[];

// Uncomment the next two lines for the ITDB02 Shield
UTFT          myGLCD(SSD1289, 38, 39, 40, 41);
ITDB02_Touch  myTouch(6, 5, 4, 3, 2);

// Uncomment the next two lines for the ITDB02 Mega Shield
//ITDB02        myGLCD(38,39,40,41);   // Remember to add ASPECT_16x9 if you are using an ITDB02-3.2WC!
//ITDB02_Touch  myTouch(6,5,4,3,2);

int x, y;
char stCurrent[20]="";
int stCurrentLen=0;
char stLast[20]="";

void setup()
{
// Initial setup
  myGLCD.InitLCD(LANDSCAPE);
  myGLCD.clrScr();

  myTouch.InitTouch(LANDSCAPE);
  myTouch.setPrecision(PREC_MEDIUM);

  myGLCD.setFont(BigFont);
  myGLCD.setBackColor(0, 0, 255);
  
// Draw the upper row of buttons
  for (x=0; x<5; x++)
  {
    myGLCD.setColor(0, 0, 255);
    myGLCD.fillRoundRect (10+(x*60), 10, 60+(x*60), 60);
    myGLCD.setColor(255, 255, 255);
    myGLCD.drawRoundRect (10+(x*60), 10, 60+(x*60), 60);
    myGLCD.printNumI(x+1, 27+(x*60), 27);
  }
// Draw the center row of buttons
  for (x=0; x<5; x++)
  {
    myGLCD.setColor(0, 0, 255);
    myGLCD.fillRoundRect (10+(x*60), 70, 60+(x*60), 120);
    myGLCD.setColor(255, 255, 255);
    myGLCD.drawRoundRect (10+(x*60), 70, 60+(x*60), 120);
    if (x<4)
      myGLCD.printNumI(x+6, 27+(x*60), 87);
  }
  myGLCD.print("0", 267, 87);
// Draw the lower row of buttons
  myGLCD.setColor(0, 0, 255);
  myGLCD.fillRoundRect (10, 130, 150, 180);
  myGLCD.setColor(255, 255, 255);
  myGLCD.drawRoundRect (10, 130, 150, 180);
  myGLCD.print("Clear", 40, 147);
  myGLCD.setColor(0, 0, 255);
  myGLCD.fillRoundRect (160, 130, 300, 180);
  myGLCD.setColor(255, 255, 255);
  myGLCD.drawRoundRect (160, 130, 300, 180);
  myGLCD.print("Enter", 190, 147);
  myGLCD.setBackColor (0, 0, 0);
}

void updateStr(int val)
{
  if (stCurrentLen<20)
  {
    stCurrent[stCurrentLen]=val;
    stCurrent[stCurrentLen+1]='\0';
    stCurrentLen++;
    myGLCD.setColor(0, 255, 0);
    myGLCD.print(stCurrent, LEFT, 224);
  }
  else
  {
    myGLCD.setColor(255, 0, 0);
    myGLCD.print("BUFFER FULL!", CENTER, 192);
    delay(500);
    myGLCD.print("            ", CENTER, 192);
    delay(500);
    myGLCD.print("BUFFER FULL!", CENTER, 192);
    delay(500);
    myGLCD.print("            ", CENTER, 192);
    myGLCD.setColor(0, 255, 0);
  }
}

// Draw a red frame while a button is touched
void waitForIt(int x1, int y1, int x2, int y2)
{
  myGLCD.setColor(255, 0, 0);
  myGLCD.drawRoundRect (x1, y1, x2, y2);
  while (myTouch.dataAvailable())
    myTouch.read();
  myGLCD.setColor(255, 255, 255);
  myGLCD.drawRoundRect (x1, y1, x2, y2);
}

void loop()
{
  while (true)
  {
    if (myTouch.dataAvailable())
    {
      myTouch.read();
      x=myTouch.getX();
      y=myTouch.getY();
      
      if ((y>=10) && (y<=60))  // Upper row
      {
        if ((x>=10) && (x<=60))  // Button: 1
        {
          waitForIt(10, 10, 60, 60);
          updateStr('1');
        }
        if ((x>=70) && (x<=120))  // Button: 2
        {
          waitForIt(70, 10, 120, 60);
          updateStr('2');
        }
        if ((x>=130) && (x<=180))  // Button: 3
        {
          waitForIt(130, 10, 180, 60);
          updateStr('3');
        }
        if ((x>=190) && (x<=240))  // Button: 4
        {
          waitForIt(190, 10, 240, 60);
          updateStr('4');
        }
        if ((x>=250) && (x<=300))  // Button: 5
        {
          waitForIt(250, 10, 300, 60);
          updateStr('5');
        }
      }

      if ((y>=70) && (y<=120))  // Center row
      {
        if ((x>=10) && (x<=60))  // Button: 6
        {
          waitForIt(10, 70, 60, 120);
          updateStr('6');
        }
        if ((x>=70) && (x<=120))  // Button: 7
        {
          waitForIt(70, 70, 120, 120);
          updateStr('7');
        }
        if ((x>=130) && (x<=180))  // Button: 8
        {
          waitForIt(130, 70, 180, 120);
          updateStr('8');
        }
        if ((x>=190) && (x<=240))  // Button: 9
        {
          waitForIt(190, 70, 240, 120);
          updateStr('9');
        }
        if ((x>=250) && (x<=300))  // Button: 0
        {
          waitForIt(250, 70, 300, 120);
          updateStr('0');
        }
      }

      if ((y>=130) && (y<=180))  // Upper row
      {
        if ((x>=10) && (x<=150))  // Button: Clear
        {
          waitForIt(10, 130, 150, 180);
          stCurrent[0]='\0';
          stCurrentLen=0;
          myGLCD.setColor(0, 0, 0);
          myGLCD.fillRect(0, 224, 319, 239);
        }
        if ((x>=160) && (x<=300))  // Button: Enter
        {
          waitForIt(160, 130, 300, 180);
          if (stCurrentLen>0)
          {
            for (x=0; x<stCurrentLen+1; x++)
            {
              stLast[x]=stCurrent[x];
            }
            stCurrent[0]='\0';
            stCurrentLen=0;
            myGLCD.setColor(0, 0, 0);
            myGLCD.fillRect(0, 208, 319, 239);
            myGLCD.setColor(0, 255, 0);
            myGLCD.print(stLast, LEFT, 208);
          }
          else
          {
            myGLCD.setColor(255, 0, 0);
            myGLCD.print("BUFFER EMPTY", CENTER, 192);
            delay(500);
            myGLCD.print("            ", CENTER, 192);
            delay(500);
            myGLCD.print("BUFFER EMPTY", CENTER, 192);
            delay(500);
            myGLCD.print("            ", CENTER, 192);
            myGLCD.setColor(0, 255, 0);
          }
        }
      }
    }
  }
}

Bild vom Aufbau?

Mit wieviel Volt versorgst du das Display? sieht mir nach einem 3.3V Display aus

In der PDF ist ziemlich genau der Aufbau beschrieben, den ich auch nutze.

Anbei noch ein Bild von dem Display mit ein paar Zahlen drauf

vielleicht ist es auch nur kaputt. Amazon hat da einen recht guten Service

Das habe ich mir auch schon gedacht..

Wollte aber erst sicher gehen, dass es kein Fehler von meiner Seite ist.

Und ich ein intaktes Display zurücksende

bist du noch in der Frist vom Rückgaberecht ?

hi,

ja war ich heute ist ein Neues angekommen. Leider gibt es immer noch das gleiche Problem...
ich habe den Hersteller angeschrieben aber leider noch keine Antwort bekommen

towo94:
hi,

ja war ich heute ist ein Neues angekommen. Leider gibt es immer noch das gleiche Problem...
ich habe den Hersteller angeschrieben aber leider noch keine Antwort bekommen

Was hast du für ein Netzteil an deinem Aufbau.
Ich vermute die Spannung ist nicht stabil oder ein hoher Brummanteil.
Kannst du die Spannung mit einem Oszilloskop messen?

aktuell hängt das an dem USB ausgang meines Rechners.
Leider kein Oszi zur Hand.

towo94:
aktuell hängt das an dem USB ausgang meines Rechners.
Leider kein Oszi zur Hand.

Kannst du die 5 Volt des Arduino mit einem Digital-Multimeter messen?

Hängt der direkt an USB oder über einen USB-Hub?

Hängt direkt dran..

Und ich messe auch 5Volt...

Rezension bezieht sich auf: SainSmart 3.2" TFT LCD Display + TFT LCD Shield for Arduino Mega 2560 UNO R3 Nano Robot (Elektronik)
Das Display-Board hatte einen Kratzer auf der Paltinenunterseite. Der Isolationslack ist an der Stelle nicht mehr vorhanden. Eine Leiterbahn scheint nicht durchtrennt zu sein.

Die auf der Internetseite von SainSmart empfohlene Bibliothek für das Display führt zu keiner sauberen Darstellungen. Kleiner Text ist damit nicht lesbar. Nach langem Suchen konnte im Internet eine Lösung gefunden werden.

Mit der auf der Internetseite von SainSmart empfohlenen Bibliothek für das Touch funktioniert dieses nicht richtig. Eine Verbesserung konnte mit Tipps aus dem Internet erreicht werden. Zufriedenstellend funktioniert es aber auch damit noch nicht.

Wenn ich erst viele Stunden damit verbringen muss, um ein Display mit Touch einigermaßen zum Laufen zu bringen, kann ich nur 2 Sterne (Mangelhaft) vergeben. Wenn es mich noch weiter ärgert, geht es zurück!

Das ist die Rezession eines anderen Kunden auf Amazon. Der scheint das gleiche Problem gelöst zu haben. Nur leider schreibt er nicht wie

Ok, dann scheint es nicht an der Spannung zu liegen.

Sieht für mich aus, als ob Bildspeichergröße und Hardwareauflösung nicht ganz zusammenpassen.

Ich tippe darauf, dass die Hardwareauflösung vom LCD der Lib nicht korrekt mitgeteilt wurde.

Gruß, H.

Das schon mal probiert?

// Remember to add ASPECT_16x9 if you are using an ITDB02-3.2WC!

Hallo,

ich habe das Problem mit Hilfe eines Amazon- Kundens gelöst.
Er hat mir folgende Anleitung geschickt, verstanden habe ich es aber nicht.

In der UTFT-Library befindet sich im Ordner tft_drivers\ssd1289 die Datei initlcd.h. Deren Inhalt must Du durch folgenden Inhalt ersetzen:

case SSD1289:
case SSD1289LATCHED:
LCD_Write_COM_DATA(0x00,0x0001); delay(1);
LCD_Write_COM_DATA(0x01,0x3B3F); delay(1);
LCD_Write_COM_DATA(0x02,0x0600); delay(1);
LCD_Write_COM_DATA(0x0C,0x0007); delay(1);
LCD_Write_COM_DATA(0x0D,0x0006); delay(1);
LCD_Write_COM_DATA(0x0E,0x3200); delay(1);
LCD_Write_COM_DATA(0x1E,0x00BB); delay(1);
LCD_Write_COM_DATA(0x03,0x6A64); delay(1);
LCD_Write_COM_DATA(0x0F,0x0000); delay(1);
LCD_Write_COM_DATA(0x44,0xEF00); delay(1);
LCD_Write_COM_DATA(0x45,0x0000); delay(1);
LCD_Write_COM_DATA(0x46,0x013F); delay(1);

LCD_Write_COM_DATA(0x30, 0x0000); delay(1);
LCD_Write_COM_DATA(0x31, 0x0706); delay(1);
LCD_Write_COM_DATA(0x32, 0x0206); delay(1);
LCD_Write_COM_DATA(0x33, 0x0300); delay(1);
LCD_Write_COM_DATA(0x34, 0x0002); delay(1);
LCD_Write_COM_DATA(0x35, 0x0000); delay(1);
LCD_Write_COM_DATA(0x36, 0x0707); delay(1);
LCD_Write_COM_DATA(0x37, 0x0200); delay(1);
LCD_Write_COM_DATA(0x3A, 0x0908); delay(1);
LCD_Write_COM_DATA(0x3B, 0x0F0D); delay(1);

LCD_Write_COM_DATA(0x28,0x0006); delay(1);
LCD_Write_COM_DATA(0x10,0x0000); delay(50);
LCD_Write_COM_DATA(0x11,0x6070); delay(1);
LCD_Write_COM_DATA(0x07,0x0033); delay(100);
break;

Gruß
towo