I have a 2.8" Color TFT Touchscreen from Adafruit, and I'm currently trying to set it up. I've been following this guide to set up the screen. The screen powers on when connected to power, but it's not displaying what the example says it should. I can't tell if it's the code of our the hardware that's the issue, but since the hardware setup is pretty straightforward on the site, my guess is it's the code.

The guide says to check the serial console, and that the configuration bytes should be similar. Here's the example's configuration bytes:

Configuration bytes from the example

Versus what my serial console is displaying

Configuration bytes from my console

I should note that I am using a Nano every instead of an Uno, but looking up the SPI pins for the Nano Every, I found that they should be the same as for the Uno. But if anyone can confirm that, much appreciated. That could definitely be the problem if I'm wrong.

Finally, I'm including the code that I am currently using below. There are no issues with uploading, and I've triple checked that I have the right libraries downloaded, and am using the correct board and port. I'm thinking the everything before the setup is what might be causing the issue, but I've included the entirety of the setup as well.

  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 "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"

// For the Adafruit shield, these are the default.
#define TFT_DC 9
#define TFT_CS 10
#define TFT_CLK 13
#define TFT_MISO 12
#define TFT_MOSI 11

// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
// Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
// If using the breakout, change pins as desired
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_CLK, TFT_MISO, TFT_MOSI);

void setup() {
  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.print(F("Text                     "));

  Serial.print(F("Lines                    "));

  Serial.print(F("Horiz/Vert Lines         "));
  Serial.println(testFastLines(ILI9341_RED, ILI9341_BLUE));

  Serial.print(F("Rectangles (outline)     "));

  Serial.print(F("Rectangles (filled)      "));
  Serial.println(testFilledRects(ILI9341_YELLOW, ILI9341_MAGENTA));

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

  Serial.print(F("Circles (outline)        "));
  Serial.println(testCircles(10, ILI9341_WHITE));

  Serial.print(F("Triangles (outline)      "));

  Serial.print(F("Triangles (filled)       "));

  Serial.print(F("Rounded rects (outline)  "));

  Serial.print(F("Rounded rects (filled)   "));



  • One difference between Uno and Nano Every is that the SPI on Nano Every could operate at higher SPI data rate. Do you use a level shifter between the display and the Nano Every? Some of the level shifter couldn't handle the higher SPI well. One thing you could try is to change the tft.begin() to tft.begin(3000000);, this set the hardware SPI to 3MHz, and should be able to be handed by the library and whatever level shifter you are using.
    – hcheung
    Jul 21 '21 at 6:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.