Forum Rule: Always post complete source code & details to reproduce any issue!
Results 1 to 8 of 8

Thread: problems HX8357

  1. #1
    Senior Member
    Join Date
    Sep 2016
    Posts
    106

    problems HX8357

    Hi currently I would like to use the teensy3.6 with the HX8357_t3 featherwing 3.5 inch, and started reading on the forum here.

    so I tried:

    • changing the DC, and CS as proposed by one of the chats here.
      changing the ILI9341_T3 library and changed the size of the screen in the ILI9341_T3.h library.
      changing the speed to max 16MHz and 24MHz by SPIsettings start and endtransaction at void setup and void loop
      adding delays between the tft.begin() and tft_fillScreen 10, 100ms.


    the displays flashes in various light strengths, so I know it is communicating the teensy3.6. Originally I would like to use the teensy4.1 accordingly. but have the teensy3.6 on my breadboard at the moment.

    I double checked the connections and placed the gnd and 3.3V pin to the other side:
    https://learn.adafruit.com/adafruit-...erwing/pinouts
    https://forum.pjrc.com/threads/54982...ntroller-issue
    the 3.3V and gnd pins are on the other side?, this does not seem to work for me and doesnt allow the display to be powered.

    what I get on my screen if I use the graphicstest from the ILI9341 example is:

    Code:
    ILI9341 Test!
    
    Display Power Mode: 0xFF
    
    MADCTL Mode: 0xFF
    
    Pixel Format: 0xFF
    
    Image Format: 0xFF
    
    Self Diagnostic: 0xFF
    
    Benchmark                Time (microseconds)
    
    Screen fill              449773
    
    Text                     10691
    
    Proportional Text        10384
    
    Lines                    116843
    
    Horiz/Vert Lines         36337
    
    Rectangles (outline)     20162
    
    Rectangles (filled)      1088456
    
    Circles (filled)         138226
    
    Circles (outline)        95759
    
    Triangles (outline)      25293
    
    Triangles (filled)       351669
    
    Rounded rects (outline)  33136
    
    Rounded rects (filled)   1182429
    
    Done!
    from the HX8357 Example graphicstest Serialmonitor:
    Code:
    _t3n::begin - completed
    
    HX8357 Test!
    
    Display Power Mode: 0xFF
    
    MADCTL Mode: 0xFF
    
    Pixel Format: 0xFF
    
    Image Format: 0xFF
    
    Self Diagnostic: 0xFF
    
    Benchmark                Time (microseconds)
    
    Screen fill              641001
    
    Text                     128352
    
    Lines                    165269
    
    Horiz/Vert Lines         51872
    
    Rectangles (outline)     28788
    
    Rectangles (filled)      1549397
    
    Circles (filled)         196521
    
    Circles (outline)        135875
    
    Triangles (outline)      35788
    
    Triangles (filled)       500166
    
    Rounded rects (outline)  64300
    
    Rounded rects (filled)   1683341
    
    Done!


    Code:
    /***************************************************
      This is our GFX example for the Adafruit HX8357 Breakout and Shield
      ----> http://www.adafruit.com/products/1651
    
      Check out the links above for our tutorials and wiring diagrams
      These displays use SPI to communicate, 4 or 5 pins are required to
      interface (RST is optional)
      Adafruit invests time and resources providing this open source code,
      please support Adafruit and open-source hardware by purchasing
      products from Adafruit!
    
      Written by Limor Fried/Ladyada for Adafruit Industries.
      MIT license, all text above must be included in any redistribution
     ****************************************************/
    
    
    #include "SPI.h"
    #include "HX8357_t3n.h"
    
    // For the Adafruit shield, these are the default.
    #define TFT_DC  10
    #define TFT_CS 9
    #define TFT_RST -1
    
    // Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
    HX8357_t3n tft = HX8357_t3n(TFT_CS, TFT_DC, TFT_RST);
    
    void setup() {
      tft.begin();
      delay(100);
      tft.fillScreen(HX8357_BLACK);
      tft.setTextColor(HX8357_YELLOW);
      tft.setTextSize(2);
      tft.println("Waiting for Arduino Serial Monitor...");
    
      Serial.begin(9600);
      while (!Serial) ; // wait for Arduino Serial Monitor
      Serial.println("HX8357 Test!"); 
    
      // read diagnostics (optional but can help debug problems)
      uint8_t x = tft.readcommand8(HX8357_RDMODE);
      Serial.print("Display Power Mode: 0x"); Serial.println(x, HEX);
      x = tft.readcommand8(HX8357_RDMADCTL);
      Serial.print("MADCTL Mode: 0x"); Serial.println(x, HEX);
      x = tft.readcommand8(HX8357_RDPIXFMT);
      Serial.print("Pixel Format: 0x"); Serial.println(x, HEX);
      x = tft.readcommand8(HX8357_RDIMGFMT);
      Serial.print("Image Format: 0x"); Serial.println(x, HEX);
      x = tft.readcommand8(HX8357_RDSELFDIAG);
      Serial.print("Self Diagnostic: 0x"); Serial.println(x, HEX); 
      
      Serial.println(F("Benchmark                Time (microseconds)"));
    
      Serial.print(F("Screen fill              "));
      Serial.println(testFillScreen());
      delay(200);
    
      Serial.print(F("Text                     "));
      Serial.println(testText());
      delay(600);
    
      Serial.print(F("Lines                    "));
      Serial.println(testLines(HX8357_CYAN));
      delay(200);
    
      Serial.print(F("Horiz/Vert Lines         "));
      Serial.println(testFastLines(HX8357_RED, HX8357_BLUE));
      delay(200);
    
      Serial.print(F("Rectangles (outline)     "));
      Serial.println(testRects(HX8357_GREEN));
      delay(200);
    
      Serial.print(F("Rectangles (filled)      "));
      Serial.println(testFilledRects(HX8357_YELLOW, HX8357_MAGENTA));
      delay(200);
    
      Serial.print(F("Circles (filled)         "));
      Serial.println(testFilledCircles(10, HX8357_MAGENTA));
    
      Serial.print(F("Circles (outline)        "));
      Serial.println(testCircles(10, HX8357_WHITE));
      delay(200);
    
      Serial.print(F("Triangles (outline)      "));
      Serial.println(testTriangles());
      delay(200);
    
      Serial.print(F("Triangles (filled)       "));
      Serial.println(testFilledTriangles());
      delay(200);
    
      Serial.print(F("Rounded rects (outline)  "));
      Serial.println(testRoundRects());
      delay(200);
    
      Serial.print(F("Rounded rects (filled)   "));
      Serial.println(testFilledRoundRects());
      delay(200);
    
      Serial.println(F("Done!"));
    
    }
    
    
    void loop(void) {
      for(uint8_t rotation=0; rotation<4; rotation++) {
        tft.setRotation(rotation);
        testText();
        delay(1000);
      }
    }
    
    unsigned long testFillScreen() {
      unsigned long start = micros();
      tft.fillScreen(HX8357_BLACK);
      tft.fillScreen(HX8357_RED);
      tft.fillScreen(HX8357_GREEN);
      tft.fillScreen(HX8357_BLUE);
      tft.fillScreen(HX8357_BLACK);
      return micros() - start;
    }
    
    unsigned long testText() {
      tft.fillScreen(HX8357_BLACK);
      unsigned long start = micros();
      tft.setCursor(0, 0);
      tft.setTextColor(HX8357_WHITE);  tft.setTextSize(1);
      tft.println("Hello World!");
      tft.setTextColor(HX8357_YELLOW); tft.setTextSize(2);
      tft.println(1234.56);
      tft.setTextColor(HX8357_RED);    tft.setTextSize(3);
      tft.println(0xDEADBEEF, HEX);
      tft.println();
      tft.setTextColor(HX8357_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!");
    
      tft.setTextColor(HX8357_WHITE);
      tft.println(F("Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do: once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it, 'and what is the use of a book,' thought Alice 'without pictures or conversations?'"));
    
      tft.println(F("So she was considering in her own mind (as well as she could, for the hot day made her feel very sleepy and stupid), whether the pleasure of making a daisy-chain would be worth the trouble of getting up and picking the daisies, when suddenly a White Rabbit with pink eyes ran close by her."));
    
      tft.println(F("There was nothing so very remarkable in that; nor did Alice think it so very much out of the way to hear the Rabbit say to itself, 'Oh dear! Oh dear! I shall be late!' (when she thought it over afterwards, it occurred to her that she ought to have wondered at this, but at the time it all seemed quite natural); but when the Rabbit actually took a watch out of its waistcoat-pocket, and looked at it, and then hurried on, Alice started to her feet, for it flashed across her mind that she had never before seen a rabbit with either a waistcoat-pocket, or a watch to take out of it, and burning with curiosity, she ran across the field after it, and fortunately was just in time to see it pop down a large rabbit-hole under the hedge."));
    
      tft.println(F("In another moment down went Alice after it, never once considering how in the world she was to get out again."));
    
      tft.println(F("The rabbit-hole went straight on like a tunnel for some way, and then dipped suddenly down, so suddenly that Alice had not a moment to think about stopping herself before she found herself falling down a very deep well."));
    
      tft.println(F("Either the well was very deep, or she fell very slowly, for she had plenty of time as she went down to look about her and to wonder what was going to happen next. First, she tried to look down and make out what she was coming to, but it was too dark to see anything; then she looked at the sides of the well, and noticed that they were filled with cupboards and book-shelves; here and there she saw maps and pictures hung upon pegs. She took down a jar from one of the shelves as she passed; it was labelled 'ORANGE MARMALADE', but to her great disappointment it was empty: she did not like to drop the jar for fear of killing somebody, so managed to put it into one of the cupboards as she fell past it."));
      
      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(HX8357_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(HX8357_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(HX8357_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(HX8357_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(HX8357_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(HX8357_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(HX8357_BLACK);
      n = min(tft.width(), tft.height()) - 1;
      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(HX8357_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(HX8357_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(HX8357_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(HX8357_BLACK);
      w     = min(tft.width(), tft.height()) - 1;
      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(HX8357_BLACK);
      start = micros();
      for(i=min(tft.width(), tft.height()) - 1; i>20; i-=6) {
        i2 = i / 2;
        tft.fillRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(0, i2, 0));
      }
    
      return micros() - start;
    }
    graphicstest ILI9341
    Code:
    /***************************************************
      This is our GFX example for the Adafruit ILI9341 Breakout and Shield
      ----> http://www.adafruit.com/products/1651
    
      Check out the links above for our tutorials and wiring diagrams
      These displays use SPI to communicate, 4 or 5 pins are required to
      interface (RST is optional)
      Adafruit invests time and resources providing this open source code,
      please support Adafruit and open-source hardware by purchasing
      products from Adafruit!
    
      Written by Limor Fried/Ladyada for Adafruit Industries.
      MIT license, all text above must be included in any redistribution
     ****************************************************/
    
    
    #include "SPI.h"
    #include "ILI9341_t3.h"
    #include "font_Arial.h"
    
    // For the Adafruit shield, these are the default.
    #define TFT_DC  10
    #define TFT_CS 9
    
    // Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
    ILI9341_t3 tft = ILI9341_t3(TFT_CS, TFT_DC);
    
    void setup() {
      tft.begin();
    // Note: you can now set the SPI speed to any value
    // the default value is 30Mhz, but most ILI9341 displays
    // can handle at least 60Mhz and as much as 100Mhz
      //tft.setClock(60000000);
      delay(10);
      tft.fillScreen(ILI9341_BLACK);
      tft.setTextColor(ILI9341_YELLOW);
      tft.setTextSize(2);
      tft.println("Waiting for Arduino Serial Monitor...");
    
      Serial.begin(9600);
      while (!Serial) ; // wait for Arduino Serial Monitor
      Serial.println("ILI9341 Test!"); 
    
      // read diagnostics (optional but can help debug problems)
      uint8_t x = tft.readcommand8(ILI9341_RDMODE);
      Serial.print("Display Power Mode: 0x"); Serial.println(x, HEX);
      x = tft.readcommand8(ILI9341_RDMADCTL);
      Serial.print("MADCTL Mode: 0x"); Serial.println(x, HEX);
      x = tft.readcommand8(ILI9341_RDPIXFMT);
      Serial.print("Pixel Format: 0x"); Serial.println(x, HEX);
      x = tft.readcommand8(ILI9341_RDIMGFMT);
      Serial.print("Image Format: 0x"); Serial.println(x, HEX);
      x = tft.readcommand8(ILI9341_RDSELFDIAG);
      Serial.print("Self Diagnostic: 0x"); Serial.println(x, HEX); 
      
      Serial.println(F("Benchmark                Time (microseconds)"));
    
      Serial.print(F("Screen fill              "));
      Serial.println(testFillScreen());
      delay(200);
    
      Serial.print(F("Text                     "));
      Serial.println(testText());
      delay(600);
    
      Serial.print(F("Proportional Text        "));
      Serial.println(testProportionalText());
      delay(600);
    
      Serial.print(F("Lines                    "));
      Serial.println(testLines(ILI9341_CYAN));
      delay(200);
    
      Serial.print(F("Horiz/Vert Lines         "));
      Serial.println(testFastLines(ILI9341_RED, ILI9341_BLUE));
      delay(200);
    
      Serial.print(F("Rectangles (outline)     "));
      Serial.println(testRects(ILI9341_GREEN));
      delay(200);
    
      Serial.print(F("Rectangles (filled)      "));
      Serial.println(testFilledRects(ILI9341_YELLOW, ILI9341_MAGENTA));
      delay(200);
    
      Serial.print(F("Circles (filled)         "));
      Serial.println(testFilledCircles(10, ILI9341_MAGENTA));
    
      Serial.print(F("Circles (outline)        "));
      Serial.println(testCircles(10, ILI9341_WHITE));
      delay(200);
    
      Serial.print(F("Triangles (outline)      "));
      Serial.println(testTriangles());
      delay(200);
    
      Serial.print(F("Triangles (filled)       "));
      Serial.println(testFilledTriangles());
      delay(200);
    
      Serial.print(F("Rounded rects (outline)  "));
      Serial.println(testRoundRects());
      delay(200);
    
      Serial.print(F("Rounded rects (filled)   "));
      Serial.println(testFilledRoundRects());
      delay(200);
    
      Serial.println(F("Done!"));
    
    }
    
    
    void loop(void) {
      for(uint8_t rotation=0; rotation<4; rotation++) {
        tft.setRotation(rotation);
        testText();
        delay(1000);
      }
    }
    
    unsigned long testFillScreen() {
      unsigned long start = micros();
      tft.fillScreen(ILI9341_BLACK);
      tft.fillScreen(ILI9341_RED);
      tft.fillScreen(ILI9341_GREEN);
      tft.fillScreen(ILI9341_BLUE);
      tft.fillScreen(ILI9341_BLACK);
      return micros() - start;
    }
    
    unsigned long testText() {
      tft.fillScreen(ILI9341_BLACK);
      unsigned long start = micros();
      tft.setCursor(0, 0);
      tft.setTextColor(ILI9341_WHITE);  tft.setTextSize(1);
      tft.println("Hello World!");
      tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(2);
      tft.println(1234.56);
      tft.setTextColor(ILI9341_RED);    tft.setTextSize(3);
      tft.println(0xDEADBEEF, HEX);
      tft.println();
      tft.setTextColor(ILI9341_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 testProportionalText() {
      tft.fillScreen(ILI9341_BLACK);
      unsigned long start = micros();
      tft.setCursor(0, 0);
      tft.setTextColor(ILI9341_WHITE);  tft.setFont(Arial_10);
      tft.println("Hello World!");
      tft.setTextColor(ILI9341_YELLOW); tft.setFont(Arial_16);
      tft.println(1234.56);
      tft.setTextColor(ILI9341_RED);    tft.setFont(Arial_24);
      tft.println(0xDEADBEEF, HEX);
      tft.println();
      tft.setTextColor(ILI9341_GREEN);
      tft.setFont(Arial_40);
      tft.println("Groop");
      tft.setFont(Arial_16);
      tft.println("I implore thee,");
      tft.setFont(Arial_10);
      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!");
      tft.setFontAdafruit();
      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(ILI9341_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(ILI9341_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(ILI9341_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(ILI9341_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(ILI9341_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(ILI9341_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(ILI9341_BLACK);
      n = min(tft.width(), tft.height()) - 1;
      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(ILI9341_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(ILI9341_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(ILI9341_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(ILI9341_BLACK);
      w     = min(tft.width(), tft.height()) - 1;
      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(ILI9341_BLACK);
      start = micros();
      for(i=min(tft.width(), tft.height()) - 1; 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;
    }
    best

    Bastiaan
    Last edited by Bastiaan; 07-15-2020 at 09:07 AM.

  2. #2
    Senior Member
    Join Date
    Jul 2020
    Posts
    318
    Have you soldered a blob on the SPI enable jumper pads on the HX8357D pcb? The silk screen says "Close IM2 for SPI" next to these pads.
    By default its configured for parallel, not SPI.

    There's also an Adafruit HX8357 library.

  3. #3
    Senior Member
    Join Date
    Sep 2016
    Posts
    106
    Hi Mark, thanks for the fast reply,

    The hx8357 with the featherwing 3.5 inch is being used.

    I tried also the HX8357 library from adafruit.
    Attached Thumbnails Attached Thumbnails Click image for larger version. 

Name:	screen flashes.png 
Views:	2 
Size:	494.3 KB 
ID:	20970   Click image for larger version. 

Name:	3_5inch tft featherwing backside connections.jpg 
Views:	6 
Size:	86.1 KB 
ID:	20971  


  4. #4
    Senior Member
    Join Date
    Jul 2020
    Posts
    318
    You've connected the power wrongly I think.

    pin 2 - 3.3V
    pin 4 - gnd
    pin 26 - Vusb = 5V
    pin 28 - Vbat = 3.7V

    You need 3.3V power to pins 2/4, and 5V to either pin 26 or 28. You've got the backlight driven via protection diodes
    at the moment I think.

  5. #5
    Senior Member
    Join Date
    Sep 2016
    Posts
    106
    thanks. that solved the problem. i needed also a 5V for the USB part. ok! many thanks! now I can combineit with the CN0391! thanks!

  6. #6
    Senior Member
    Join Date
    Jul 2020
    Posts
    318
    Quote Originally Posted by Bastiaan View Post
    thanks. that solved the problem. i needed also a 5V for the USB part. ok! many thanks! now I can combineit with the CN0391! thanks!
    I confess it took me way too long with the generic Adafruit HX8357 board to actually read their docs about the link I had to solder for SPI!

  7. #7
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    7,422
    Yep - Been there
    Instructions on SPI is at: https://learn.adafruit.com/adafruit-...iring-and-test

    Quick FYI - I few of us worked on a faster version of the library that has most everything we put into some of the others like: ili9341_t3n, ILI9488_t3, ST7735_t3(ST7789_t3).

    I don't believe it is part of Teensyduino(yet) - But I think our most updated version is up at: https://github.com/mjs513/HX8357_t3n

  8. #8
    I use nearly the same display a HX8357 3.5" from Adafruit and currently I use the ILI9341_t3 lib--and it's works like a million bucks. As you found just need to change the display size in the .h file to 480 x 320.

    I will look at the HX8357_t3 lib--knowing KurtE and Co. it will sing.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •