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

Thread: Teensy 3.6 + ILI9488

  1. #1
    Junior Member
    Join Date
    Jun 2019
    Posts
    18

    Teensy 3.6 + ILI9488

    I had this working using the 2x20 connector but I am trying to use the FFC now with no luck.

    I am using the attached wiring. The only difference from normal is that CS and DC are reversed.

    I tried using 3.3v just for the backlight but when connected to the screen, the pin is only showing 0.1V with a multimeter. Unconnected it shows 3.3v.

    The code I am using is below which is taken from the graphicstest9488 from the ILI9488_t3 library. The only difference is I have change the start a bit to swap pins 9 and 10 to fit my wiring and added an analogWrite for the backlight.

    Any help is much appreciated. Thank you.

    Code:
    /***************************************************
      This is our GFX example for the Adafruit ILI9488 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 "ILI9488_t3.h"
    //#define TEENSY64
    
    // For the Adafruit shield, these are the default.
    #if defined(__MK66FX1M0__) && !defined(TEENSY64)
    #define TFT_RST 255
    #define TFT_DC 10
    #define TFT_CS 9
    ILI9488_t3 tft = ILI9488_t3(&SPI, TFT_CS, TFT_DC, TFT_RST);
    #endif
    void setup() {
      analogWrite(16, 255);
      tft.begin();
      tft.fillScreen(ILI9488_BLACK);
      tft.setTextColor(ILI9488_YELLOW);
      tft.setTextSize(2);
      tft.println("Waiting for Arduino Serial Monitor...");
      tft.setOrigin(0,0);
      Serial.begin(9600);
      while (!Serial) ; // wait for Arduino Serial Monitor
      Serial.println("ILI9488 Test!"); 
    
      // read diagnostics (optional but can help debug problems)
      uint8_t x = tft.readcommand8(ILI9488_RDMODE);
      Serial.print("Display Power Mode: 0x"); Serial.println(x, HEX);
      x = tft.readcommand8(ILI9488_RDMADCTL);
      Serial.print("MADCTL Mode: 0x"); Serial.println(x, HEX);
      x = tft.readcommand8(ILI9488_RDPIXFMT);
      Serial.print("Pixel Format: 0x"); Serial.println(x, HEX);
      x = tft.readcommand8(ILI9488_RDIMGFMT);
      Serial.print("Image Format: 0x"); Serial.println(x, HEX);
      x = tft.readcommand8(ILI9488_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(ILI9488_CYAN));
      delay(500);
    
      Serial.print(F("Horiz/Vert Lines         "));
      Serial.println(testFastLines(ILI9488_RED, ILI9488_BLUE));
      delay(500);
    
      Serial.print(F("Rectangles (outline)     "));
      Serial.println(testRects(ILI9488_GREEN));
      delay(500);
    
      Serial.print(F("Rectangles (filled)      "));
      Serial.println(testFilledRects(ILI9488_YELLOW, ILI9488_MAGENTA));
      delay(500);
    
      Serial.print(F("Circles (filled)         "));
      Serial.println(testFilledCircles(10, ILI9488_MAGENTA));
    
      Serial.print(F("Circles (outline)        "));
      Serial.println(testCircles(10, ILI9488_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(ILI9488_BLACK);
      tft.fillScreen(ILI9488_RED);
      tft.fillScreen(ILI9488_GREEN);
      tft.fillScreen(ILI9488_BLUE);
      tft.fillScreen(ILI9488_BLACK);
      return micros() - start;
    }
    
    unsigned long testText() {
      tft.fillScreen(ILI9488_BLACK);
      unsigned long start = micros();
      tft.setCursor(0, 0);
      tft.setTextColor(ILI9488_WHITE);  tft.setTextSize(1);
      tft.println("Hello World!");
      tft.setTextColor(ILI9488_YELLOW); tft.setTextSize(2);
      tft.println(1234.56);
      tft.setTextColor(ILI9488_RED);    tft.setTextSize(3);
      tft.println(0xDEADBEEF, HEX);
      tft.println();
      tft.setTextColor(ILI9488_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(ILI9488_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(ILI9488_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(ILI9488_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(ILI9488_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(ILI9488_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(ILI9488_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(ILI9488_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(ILI9488_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(ILI9488_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(ILI9488_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(ILI9488_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(ILI9488_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;
    }
    Attached Thumbnails Attached Thumbnails Click image for larger version. 

Name:	screeninterface.jpg 
Views:	16 
Size:	98.8 KB 
ID:	18567  

  2. #2
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    7,685
    Maybe help to have a link to actual display which maybe has PDF? Guessing is this a BuyDisplay?

  3. #3
    Junior Member
    Join Date
    Jun 2019
    Posts
    18
    Quote Originally Posted by KurtE View Post
    Maybe help to have a link to actual display which maybe has PDF? Guessing is this a BuyDisplay?
    Yes. It is this one: https://www.buydisplay.com/lcd-3-5-i...breakout-board

  4. #4
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    7,685
    Again with BuyDisplay setups like this they can be ordered with many different options. When you say it worked with 2x20 connector is this the same one as the one not working with FFC?

    If not, I would do all of the typical things, like double check things like is it setup for 3.3v or 5v? (does it have the VR on board or the appropriate solder jumper?)

    Likewise does it have the appropriate solder jumpers for SPI 4 wire?

    Also with Back light like this. Not sure if you are having the Teensy IO pin trying to drive this directly through the analogWrites? Or do you have this going to something like a driver Transistor that drives the back light. I know some displays like some from Adafruit, have something like this built in, but others you might need to drive with more power than can come from the IO pin...

    Hopefully a less electrical design challenged person can answer this better than I can...

  5. #5
    Junior Member
    Join Date
    Jun 2019
    Posts
    18
    Thanks for the response KurtE.

    It is a new screen that I ordered. All the jumpers seems to be set correctly.

    I am just using AnalogWrite for the backlight. The old one worked like this so I would assume this one would too but I will see if that is causing issues.

    Thanks.

Posting Permissions

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