Cheap QVGA Display 2.2 TFT SPI 240×320

Hi every one !
As the subject suppose it i’m fighting with no success to make this screen work

http://www.ebay.com/itm/2-2-Serial-SPI-TFT-LCD-Display-Module-240x320-Chip-ILI9340C-PCB-Adapter-SD-Card-/131133739989?hash=item1e882e13d5:g:Om4AAOSw5ZBWPHtn

Wiring and sketches as in attachments pictures using

The sketche used is the graphictest example

As you can see in the drawing i’ve used divider to make tension ~3v on duino output pins and of course measured ~3.2 v

I’m starting to think that i’m completely dumb, so many people use it with success :frowning:

Some help we’ll be very appreciated !!! :slight_smile:

Thanx for all

You appear to have chosen CS=9, RST=7, DC=8.

I would be very surprised if the example sketches use this rather unusual choice of wiring.

If you are determined to use this wiring, make sure that you use the appropriate constructor().

It always seems wise to copy the example wiring. After all, they have probably tested this scheme in real life.

Untested. I am not at a PC.

David.

Thanx, i’ve changed the wiring according to the following code:
and still the same black blinking screen.

#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9340.h"

#if defined(__SAM3X8E__)
   #undef __FlashStringHelper::F(string_literal)
   #define F(string_literal) string_literal
#endif

// These are the pins used for the UNO
// for Due/Mega/Leonardo use the hardware SPI pins (which are different)
#define _sclk 13
#define _miso 12
#define _mosi 11
#define _cs 10
#define _dc 9
#define _rst 8

// Using software SPI is really not suggested, its incredibly slow
//Adafruit_ILI9340 tft = Adafruit_ILI9340(_cs, _dc, _mosi, _sclk, _rst, _miso);
// Use hardware SPI
Adafruit_ILI9340 tft = Adafruit_ILI9340(_cs, _dc, _rst);

void setup() {
 Serial.begin(9600);
 while (!Serial);
 
 Serial.println("Adafruit 2.2\" SPI TFT Test!"); 

 tft.begin();

 Serial.println(F("Benchmark                Time (microseconds)"));
 Serial.print(F("Screen fill              "));
 Serial.println(testFillScreen());
 delay(500);

 Serial.print(F("Text                     "));
 Serial.println(testText());
 delay(3000);

 Serial.print(F("Lines                    "));
 Serial.println(testLines(ILI9340_CYAN));
 delay(500);

 Serial.print(F("Horiz/Vert Lines         "));
 Serial.println(testFastLines(ILI9340_RED, ILI9340_BLUE));
 delay(500);

 Serial.print(F("Rectangles (outline)     "));
 Serial.println(testRects(ILI9340_GREEN));
 delay(500);

 Serial.print(F("Rectangles (filled)      "));
 Serial.println(testFilledRects(ILI9340_YELLOW, ILI9340_MAGENTA));
 delay(500);

 Serial.print(F("Circles (filled)         "));
 Serial.println(testFilledCircles(10, ILI9340_MAGENTA));

 Serial.print(F("Circles (outline)        "));
 Serial.println(testCircles(10, ILI9340_WHITE));
 delay(500);

 Serial.print(F("Triangles (outline)      "));
 Serial.println(testTriangles());
 delay(500);

 Serial.print(F("Triangles (filled)       "));
 Serial.println(testFilledTriangles());
 delay(500);

 Serial.print(F("Rounded rects (outline)  "));
 Serial.println(testRoundRects());
 delay(500);

 Serial.print(F("Rounded rects (filled)   "));
 Serial.println(testFilledRoundRects());
 delay(500);

 Serial.println(F("Done!"));
}

void loop(void) {
 for(uint8_t rotation=0; rotation<4; rotation++) {
   tft.setRotation(rotation);
   testText();
   delay(2000);
 }
}


unsigned long testFillScreen() {
 unsigned long start = micros();
 tft.fillScreen(ILI9340_BLACK);
 tft.fillScreen(ILI9340_RED);
 tft.fillScreen(ILI9340_GREEN);
 tft.fillScreen(ILI9340_BLUE);
 tft.fillScreen(ILI9340_BLACK);
 return micros() - start;
}

unsigned long testText() {
 tft.fillScreen(ILI9340_BLACK);
 unsigned long start = micros();
 tft.setCursor(0, 0);
 tft.setTextColor(ILI9340_WHITE);  tft.setTextSize(1);
 tft.println("Hello World!");
 tft.setTextColor(ILI9340_YELLOW); tft.setTextSize(2);
 tft.println(1234.56);
 tft.setTextColor(ILI9340_RED);    tft.setTextSize(3);
 tft.println(0xDEADBEEF, HEX);
 tft.println();
 tft.setTextColor(ILI9340_GREEN);
 tft.setTextSize(5);
 tft.println("Groop");
 tft.setTextSize(2);
 tft.println("I implore thee,");
 tft.setTextSize(1);
 tft.println("my foonting turlingdromes.");
 tft.println("And hooptiously drangle me");
 tft.println("with crinkly bindlewurdles,");
 tft.println("Or I will rend thee");
 tft.println("in the gobberwarts");
 tft.println("with my blurglecruncheon,");
 tft.println("see if I don't!");
 return micros() - start;
}

unsigned long testLines(uint16_t color) {
 unsigned long start, t;
 int           x1, y1, x2, y2,
               w = tft.width(),
               h = tft.height();

 tft.fillScreen(ILI9340_BLACK);

 x1 = y1 = 0;
 y2    = h - 1;
 start = micros();
 for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
 x2    = w - 1;
 for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
 t     = micros() - start; // fillScreen doesn't count against timing

 tft.fillScreen(ILI9340_BLACK);

 x1    = w - 1;
 y1    = 0;
 y2    = h - 1;
 start = micros();
 for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
 x2    = 0;
 for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
 t    += micros() - start;

 tft.fillScreen(ILI9340_BLACK);

 x1    = 0;
 y1    = h - 1;
 y2    = 0;
 start = micros();
 for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
 x2    = w - 1;
 for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
 t    += micros() - start;

 tft.fillScreen(ILI9340_BLACK);

 x1    = w - 1;
 y1    = h - 1;
 y2    = 0;
 start = micros();
 for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
 x2    = 0;
 for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);

 return micros() - start;
}

unsigned long testFastLines(uint16_t color1, uint16_t color2) {
 unsigned long start;
 int           x, y, w = tft.width(), h = tft.height();

 tft.fillScreen(ILI9340_BLACK);
 start = micros();
 for(y=0; y<h; y+=5) tft.drawFastHLine(0, y, w, color1);
 for(x=0; x<w; x+=5) tft.drawFastVLine(x, 0, h, color2);

 return micros() - start;
}

unsigned long testRects(uint16_t color) {
 unsigned long start;
 int           n, i, i2,
               cx = tft.width()  / 2,
               cy = tft.height() / 2;

 tft.fillScreen(ILI9340_BLACK);
 n     = min(tft.width(), tft.height());
 start = micros();
 for(i=2; i<n; i+=6) {
   i2 = i / 2;
   tft.drawRect(cx-i2, cy-i2, i, i, color);
 }

 return micros() - start;
}

unsigned long testFilledRects(uint16_t color1, uint16_t color2) {
 unsigned long start, t = 0;
 int           n, i, i2,
               cx = tft.width()  / 2 - 1,
               cy = tft.height() / 2 - 1;

 tft.fillScreen(ILI9340_BLACK);
 n = min(tft.width(), tft.height());
 for(i=n; i>0; i-=6) {
   i2    = i / 2;
   start = micros();
   tft.fillRect(cx-i2, cy-i2, i, i, color1);
   t    += micros() - start;
   // Outlines are not included in timing results
   tft.drawRect(cx-i2, cy-i2, i, i, color2);
 }

 return t;
}

unsigned long testFilledCircles(uint8_t radius, uint16_t color) {
 unsigned long start;
 int x, y, w = tft.width(), h = tft.height(), r2 = radius * 2;

 tft.fillScreen(ILI9340_BLACK);
 start = micros();
 for(x=radius; x<w; x+=r2) {
   for(y=radius; y<h; y+=r2) {
     tft.fillCircle(x, y, radius, color);
   }
 }

 return micros() - start;
}

unsigned long testCircles(uint8_t radius, uint16_t color) {
 unsigned long start;
 int           x, y, r2 = radius * 2,
               w = tft.width()  + radius,
               h = tft.height() + radius;

 // Screen is not cleared for this one -- this is
 // intentional and does not affect the reported time.
 start = micros();
 for(x=0; x<w; x+=r2) {
   for(y=0; y<h; y+=r2) {
     tft.drawCircle(x, y, radius, color);
   }
 }

 return micros() - start;
}

unsigned long testTriangles() {
 unsigned long start;
 int           n, i, cx = tft.width()  / 2 - 1,
                     cy = tft.height() / 2 - 1;

 tft.fillScreen(ILI9340_BLACK);
 n     = min(cx, cy);
 start = micros();
 for(i=0; i<n; i+=5) {
   tft.drawTriangle(
     cx    , cy - i, // peak
     cx - i, cy + i, // bottom left
     cx + i, cy + i, // bottom right
     tft.Color565(0, 0, i));
 }

 return micros() - start;
}

unsigned long testFilledTriangles() {
 unsigned long start, t = 0;
 int           i, cx = tft.width()  / 2 - 1,
                  cy = tft.height() / 2 - 1;

 tft.fillScreen(ILI9340_BLACK);
 start = micros();
 for(i=min(cx,cy); i>10; i-=5) {
   start = micros();
   tft.fillTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i,
     tft.Color565(0, i, i));
   t += micros() - start;
   tft.drawTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i,
     tft.Color565(i, i, 0));
 }

 return t;
}

unsigned long testRoundRects() {
 unsigned long start;
 int           w, i, i2,
               cx = tft.width()  / 2 - 1,
               cy = tft.height() / 2 - 1;

 tft.fillScreen(ILI9340_BLACK);
 w     = min(tft.width(), tft.height());
 start = micros();
 for(i=0; i<w; i+=6) {
   i2 = i / 2;
   tft.drawRoundRect(cx-i2, cy-i2, i, i, i/8, tft.Color565(i, 0, 0));
 }

 return micros() - start;
}

unsigned long testFilledRoundRects() {
 unsigned long start;
 int           i, i2,
               cx = tft.width()  / 2 - 1,
               cy = tft.height() / 2 - 1;

 tft.fillScreen(ILI9340_BLACK);
 start = micros();
 for(i=min(tft.width(), tft.height()); i>20; i-=6) {
   i2 = i / 2;
   tft.fillRoundRect(cx-i2, cy-i2, i, i, i/8, tft.Color565(0, i, 0));
 }

 return micros() - start;
}

It looks pretty much like the standard example.
Please use CODE tags. i.e. edit your post. Select all the code and click on the code icon. (the first icon on the left)

Quite honestly, the example code will run perfectly if you get the wiring correct.
Please post your new wiring scheme. Or better still, a real photo as well.

David.

By following this link you'll find how the wiring is done (pic 01 to 11)
Pics 01 to 11

And the monitoring logs:

Adafruit 2.2" SPI TFT Test!
Benchmark                Time (microseconds)
Screen fill              2102300
Text                     250512
Lines                    2383188
Horiz/Vert Lines         179360
Rectangles (outline)     119064
Rectangles (filled)      4367216
Circles (filled)         915768
Circles (outline)        1037860
Triangles (outline)      755996
Triangles (filled)       1835964
Rounded rects (outline)  391324
Rounded rects (filled)   4861828
Done!

Many Thanx to tell if i'm wrong.

i’ve added some debug to the setup function

uint8_t x = tft.readcommand8(ILI9340_RDMODE);
  Serial.print("Display Power Mode: 0x"); Serial.println(x, HEX);
  x = tft.readcommand8(ILI9340_RDMADCTL);
  Serial.print("MADCTL Mode: 0x"); Serial.println(x, HEX);
  x = tft.readcommand8(ILI9340_RDPIXFMT);
  Serial.print("Pixel Format: 0x"); Serial.println(x, HEX);
  x = tft.readcommand8(ILI9340_RDIMGFMT);
  Serial.print("Image Format: 0x"); Serial.println(x, HEX);
  x = tft.readcommand8(ILI9340_RDSELFDIAG);
  Serial.print("Self Diagnostic: 0x"); Serial.println(x, HEX);

and the resulting logs are this

Adafruit 2.2" SPI TFT Test!
Display Power Mode: 0xFF
MADCTL Mode: 0xFF
Pixel Format: 0xFF
Image Format: 0xFF
Self Diagnostic: 0xFF
Benchmark                Time (microseconds)
Screen fill              2102308
Text                     250520
Lines                    2383180
Horiz/Vert Lines         179356
Rectangles (outline)     119076
Rectangles (filled)      4367204
Circles (filled)         915728
Circles (outline)        1037852
Triangles (outline)      756004
Triangles (filled)       1835948
Rounded rects (outline)  391328
Rounded rects (filled)   4861804
Done!

I’m not sure that FF is a good news ! no ?

I tried to see your JPEGs on a Tablet and it was not very satisfactory.

I just tried on the PC. This is easier to manage. However, I can NOT read the colour bands on the resistors. One thing is certain. You do NOT have the 4k7 and 2k2 values from the Fritzing diagram.

Yes, your JPEG sequence is an excellent way for you to trace your wiring steps.

From our point of view, one single photo with coloured wires that match your Fritzing colours.
Or with the wires clearly arranged so we can see the complete routing. i.e. bend all the wires to keep in full view. Much like you lay out the Fritzing for clarity.

Anyway, your steps look 100%. Please identify the resistor values. Please test all your jumper wires for continuity with a DMM.

David.

Many Thanx ! Sorry for the delay !

I've rewired with one color for each arduino port
You can now see PICS 12 to 16
There, are also my resistors measurements, and still the same black blinking screen. I have two of this TFT screen, i've tried the other with the same punishment !!!

really sorry to be that dumb !

thanx for help

You appear to have wired everything correctly. I do not believe that the resistors are the same in pic #1 and pic #12, but your current values are fine.

Have you checked the continuity of the power bus bars in your breadboard?
Many of them have a break between row #31 and row #33. I would expect a broken red line and broken blue line.

Otherwise, I can't think of anything else. Unless your display is broken.

David.