Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT Fro

Post here about your Arduino projects, get help - for Adafruit customers!

Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.
Locked
User avatar
Eric_Mai
 
Posts: 33
Joined: Sun May 11, 2014 3:18 pm

Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT Fro

Post by Eric_Mai »

I've been having some problems with my Arduino Micro to the 1.8 inch TFT (from Adafruit)
Sometimes, the TFT will work after a few minutes but after that the display works again. I'm guessing this is the Arduino micro crashing. Serial also sometimes works, sending back information usually whether or not the screen works. This happens most of the time, but sometimes it doesn't give serial output. I can tell you that the micro works with other sketches, and the TFT does sometimes work, so the thing isn't wired incorrectly.
If you can help me with this problem, you are awesome because I've had problems like this before.
Thanks,
-Eric

User avatar
Franklin97355
 
Posts: 23912
Joined: Mon Apr 21, 2008 2:33 pm

Re: Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT

Post by Franklin97355 »

Could you post clear pictures of both sides of your board showing any soldering you have done and the connections to it?

User avatar
Eric_Mai
 
Posts: 33
Joined: Sun May 11, 2014 3:18 pm

Re: Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT

Post by Eric_Mai »

Ok, and for some miraculous reason, the Micro is performing perfectly, and the huge problem now is the screen. After testing all of the connections to the board, everything is reaching the center IC but nothing is happening. I think the board broke. To be honest, I melted the plastic on the front and some of the soldered points are weird, but everything is reaching the TFT and its just not working.

Pictures:
https://www.dropbox.com/s/aof1r35hwdw27 ... 3.jpg?dl=0
https://www.dropbox.com/s/incwybpo4m3z2 ... 5.jpg?dl=0

This is the code I used. It's vanilla word by word, but I changed it to be the second option and pin 5 is outputting 5v for the backlight

Code: Select all

/***************************************************
  This is an example sketch for the Adafruit 1.8" SPI display.
  This library works with the Adafruit 1.8" TFT Breakout w/SD card
  ----> http://www.adafruit.com/products/358
  as well as Adafruit raw 1.8" TFT display
  ----> http://www.adafruit.com/products/618
 
  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
 ****************************************************/

// For the breakout, you can use any (4 or) 5 pins
//#define sclk 4
//#define mosi 5
//#define cs   6
//#define dc   7
//#define rst  8  // you can also connect this to the Arduino reset

//Use these pins for the shield!
#define sclk 13
#define mosi 11
#define cs   10
#define dc   8
#define rst  0  // you can also connect this to the Arduino reset

#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library
#include <SPI.h>

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

// Option 1: use any pins but a little slower
//Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, mosi, sclk, rst);

// Option 2: must use the hardware SPI pins
// (for UNO thats sclk = 13 and sid = 11) and pin 10 must be
// an output. This is much faster - also required if you want
// to use the microSD card (see the image drawing example)
Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst);
float p = 3.1415926;

 
#define Neutral 0
#define Press 1
#define Up 2
#define Down 3
#define Right 4
#define Left 5
 
// Check the joystick position
int CheckJoystick()
{
  int joystickState = analogRead(3);
  
  if (joystickState < 50) return Left;
  if (joystickState < 150) return Down;
  if (joystickState < 250) return Press;
  if (joystickState < 500) return Right;
  if (joystickState < 650) return Up;
  return Neutral;
}


void setup(void) {
  digitalWrite(5, HIGH);
  Serial.begin(9600);
  delay(1000);
  Serial.print("hello!");

  // Our supplier changed the 1.8" display slightly after Jan 10, 2012
  // so that the alignment of the TFT had to be shifted by a few pixels
  // this just means the init code is slightly different. Check the
  // color of the tab to see which init code to try. If the display is
  // cut off or has extra 'random' pixels on the top & left, try the
  // other option!
  // If you are seeing red and green color inversion, use Black Tab

  // If your TFT's plastic wrap has a Black Tab, use the following:
  //tft.initR(INITR_BLACKTAB);   // initialize a ST7735S chip, black tab
  // If your TFT's plastic wrap has a Red Tab, use the following:
  tft.initR(INITR_REDTAB);   // initialize a ST7735R chip, red tab
  // If your TFT's plastic wrap has a Green Tab, use the following:
  //tft.initR(INITR_GREENTAB); // initialize a ST7735R chip, green tab

  Serial.println("init");

  uint16_t time = millis();
  tft.fillScreen(ST7735_BLACK);
  time = millis() - time;

  Serial.println(time, DEC);
  delay(500);

  // large block of text
  tft.fillScreen(ST7735_BLACK);
  testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", ST7735_WHITE);
  delay(1000);

  // tft print function!
  tftPrintTest();
  delay(4000);

  // a single pixel
  tft.drawPixel(tft.width()/2, tft.height()/2, ST7735_GREEN);
  delay(500);

  // line draw test
  testlines(ST7735_YELLOW);
  delay(500);

  // optimized lines
  testfastlines(ST7735_RED, ST7735_BLUE);
  delay(500);

  testdrawrects(ST7735_GREEN);
  delay(500);

  testfillrects(ST7735_YELLOW, ST7735_MAGENTA);
  delay(500);

  tft.fillScreen(ST7735_BLACK);
  testfillcircles(10, ST7735_BLUE);
  testdrawcircles(10, ST7735_WHITE);
  delay(500);

  testroundrects();
  delay(500);

  testtriangles();
  delay(500);

  mediabuttons();
  delay(500);

  Serial.println("done");
  delay(1000);
}

void loop() {
  tft.invertDisplay(true);
  delay(500);
  tft.invertDisplay(false);
  delay(500);
  int joy = CheckJoystick();
  switch (joy)
  {
    case Left:
      Serial.println("Left");
      break;
    case Right:
      Serial.println("Right");
      break;
    case Up:
      Serial.println("Up");
      break;
    case Down:
      Serial.println("Down");
      break;
    case Press:
      Serial.println("Press");
      break;
  }
}

void testlines(uint16_t color) {
  tft.fillScreen(ST7735_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawLine(0, 0, x, tft.height()-1, color);
  }
  for (int16_t y=0; y < tft.height(); y+=6) {
    tft.drawLine(0, 0, tft.width()-1, y, color);
  }

  tft.fillScreen(ST7735_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color);
  }
  for (int16_t y=0; y < tft.height(); y+=6) {
    tft.drawLine(tft.width()-1, 0, 0, y, color);
  }

  tft.fillScreen(ST7735_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawLine(0, tft.height()-1, x, 0, color);
  }
  for (int16_t y=0; y < tft.height(); y+=6) {
    tft.drawLine(0, tft.height()-1, tft.width()-1, y, color);
  }

  tft.fillScreen(ST7735_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color);
  }
  for (int16_t y=0; y < tft.height(); y+=6) {
    tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color);
  }
}

void testdrawtext(char *text, uint16_t color) {
  tft.setCursor(0, 0);
  tft.setTextColor(color);
  tft.setTextWrap(true);
  tft.print(text);
}

void testfastlines(uint16_t color1, uint16_t color2) {
  tft.fillScreen(ST7735_BLACK);
  for (int16_t y=0; y < tft.height(); y+=5) {
    tft.drawFastHLine(0, y, tft.width(), color1);
  }
  for (int16_t x=0; x < tft.width(); x+=5) {
    tft.drawFastVLine(x, 0, tft.height(), color2);
  }
}

void testdrawrects(uint16_t color) {
  tft.fillScreen(ST7735_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color);
  }
}

void testfillrects(uint16_t color1, uint16_t color2) {
  tft.fillScreen(ST7735_BLACK);
  for (int16_t x=tft.width()-1; x > 6; x-=6) {
    tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1);
    tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2);
  }
}

void testfillcircles(uint8_t radius, uint16_t color) {
  for (int16_t x=radius; x < tft.width(); x+=radius*2) {
    for (int16_t y=radius; y < tft.height(); y+=radius*2) {
      tft.fillCircle(x, y, radius, color);
    }
  }
}

void testdrawcircles(uint8_t radius, uint16_t color) {
  for (int16_t x=0; x < tft.width()+radius; x+=radius*2) {
    for (int16_t y=0; y < tft.height()+radius; y+=radius*2) {
      tft.drawCircle(x, y, radius, color);
    }
  }
}

void testtriangles() {
  tft.fillScreen(ST7735_BLACK);
  int color = 0xF800;
  int t;
  int w = 63;
  int x = 159;
  int y = 0;
  int z = 127;
  for(t = 0 ; t <= 15; t+=1) {
    tft.drawTriangle(w, y, y, x, z, x, color);
    x-=4;
    y+=4;
    z-=4;
    color+=100;
  }
}

void testroundrects() {
  tft.fillScreen(ST7735_BLACK);
  int color = 100;
  int i;
  int t;
  for(t = 0 ; t <= 4; t+=1) {
    int x = 0;
    int y = 0;
    int w = 127;
    int h = 159;
    for(i = 0 ; i <= 24; i+=1) {
      tft.drawRoundRect(x, y, w, h, 5, color);
      x+=2;
      y+=3;
      w-=4;
      h-=6;
      color+=1100;
    }
    color+=100;
  }
}

void tftPrintTest() {
  tft.setTextWrap(false);
  tft.fillScreen(ST7735_BLACK);
  tft.setCursor(0, 30);
  tft.setTextColor(ST7735_RED);
  tft.setTextSize(1);
  tft.println("Hello World!");
  tft.setTextColor(ST7735_YELLOW);
  tft.setTextSize(2);
  tft.println("Hello World!");
  tft.setTextColor(ST7735_GREEN);
  tft.setTextSize(3);
  tft.println("Hello World!");
  tft.setTextColor(ST7735_BLUE);
  tft.setTextSize(4);
  tft.print(1234.567);
  delay(1500);
  tft.setCursor(0, 0);
  tft.fillScreen(ST7735_BLACK);
  tft.setTextColor(ST7735_WHITE);
  tft.setTextSize(0);
  tft.println("Hello World!");
  tft.setTextSize(1);
  tft.setTextColor(ST7735_GREEN);
  tft.print(p, 6);
  tft.println(" Want pi?");
  tft.println(" ");
  tft.print(8675309, HEX); // print 8,675,309 out in HEX!
  tft.println(" Print HEX!");
  tft.println(" ");
  tft.setTextColor(ST7735_WHITE);
  tft.println("Sketch has been");
  tft.println("running for: ");
  tft.setTextColor(ST7735_MAGENTA);
  tft.print(millis() / 1000);
  tft.setTextColor(ST7735_WHITE);
  tft.print(" seconds.");
}

void mediabuttons() {
  // play
  tft.fillScreen(ST7735_BLACK);
  tft.fillRoundRect(25, 10, 78, 60, 8, ST7735_WHITE);
  tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_RED);
  delay(500);
  // pause
  tft.fillRoundRect(25, 90, 78, 60, 8, ST7735_WHITE);
  tft.fillRoundRect(39, 98, 20, 45, 5, ST7735_GREEN);
  tft.fillRoundRect(69, 98, 20, 45, 5, ST7735_GREEN);
  delay(500);
  // play color
  tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_BLUE);
  delay(50);
  // pause color
  tft.fillRoundRect(39, 98, 20, 45, 5, ST7735_RED);
  tft.fillRoundRect(69, 98, 20, 45, 5, ST7735_RED);
  // play color
  tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_GREEN);
}

User avatar
Franklin97355
 
Posts: 23912
Joined: Mon Apr 21, 2008 2:33 pm

Re: Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT

Post by Franklin97355 »

Have you wired the display and run the code in it's unaltered form? I can't tell from the pictures what is going on because all the wires are the same color and cross over each other, sorry.

User avatar
adafruit_support_mike
 
Posts: 67454
Joined: Thu Feb 11, 2010 2:51 pm

Re: Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT

Post by adafruit_support_mike »

Is the underside of the Micro making contact with the SD card holder on the TFT breakout?

If so, you're probably seeing random grounding errors. Try putting a piece of cardboard between the two boards and see if that helps.

Also, it couldn't hurt to tighten up the wiring. Fast-moving signals are sensitive to parasitic inductance and capacitance, so neatness counts.

User avatar
Eric_Mai
 
Posts: 33
Joined: Sun May 11, 2014 3:18 pm

Re: Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT

Post by Eric_Mai »

Ok

User avatar
Eric_Mai
 
Posts: 33
Joined: Sun May 11, 2014 3:18 pm

Re: Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT

Post by Eric_Mai »

Sorry, there's a delay because some important soldering gear is being bought. I only had a soldering iron and some solder for years, so I'm getting some other necessities.

User avatar
adafruit_support_mike
 
Posts: 67454
Joined: Thu Feb 11, 2010 2:51 pm

Re: Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT

Post by adafruit_support_mike »

I know that situation well. ;-)

Feel free to pick up again when it's convenient for you, if it turns out to be necessary.

User avatar
Eric_Mai
 
Posts: 33
Joined: Sun May 11, 2014 3:18 pm

Re: Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT

Post by Eric_Mai »

Turns out, my Arduino Micro was being a assho*e and had died. I hooked the screen up to a Arduino Uno (I just got one, don't know why I didn't in the first place!) and the screen worked. RIP Arduino Micro! (I think I killed it!)

User avatar
adafruit_support_mike
 
Posts: 67454
Joined: Thu Feb 11, 2010 2:51 pm

Re: Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT

Post by adafruit_support_mike »

I'm sorry to hear the Micro died, but glad that the display is working.

Happy hacking!

User avatar
Eric_Mai
 
Posts: 33
Joined: Sun May 11, 2014 3:18 pm

Re: Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT

Post by Eric_Mai »

Thanks but one thing, how do you display custom colors? (also a color chooser)

User avatar
adafruit_support_mike
 
Posts: 67454
Joined: Thu Feb 11, 2010 2:51 pm

Re: Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT

Post by adafruit_support_mike »

That LCD uses 16-bit integers to describe colors, using a 5-6-5 pattern: 5 bits of red, 6 bits of green, and 5 bits of blue.

You can define your colors directly that way, or use the TFT library's 'Color565(r,g,b)' method. Just feed it three integers and it will give you the corresponding 16-bit color.

Creating a color picker would be a full-scale programming exercise, depending on how you want to display the colors and how you want to handle the problem of selecting one. That TFT doesn't have a touchscreen, so you'd have to use some other kind of input device.

User avatar
Eric_Mai
 
Posts: 33
Joined: Sun May 11, 2014 3:18 pm

Re: Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT

Post by Eric_Mai »

Thanks but could you give an example? I don't really understand how to

User avatar
Franklin97355
 
Posts: 23912
Joined: Mon Apr 21, 2008 2:33 pm

Re: Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT

Post by Franklin97355 »

I don't really understand how to
What is it you don't understand?

User avatar
Eric_Mai
 
Posts: 33
Joined: Sun May 11, 2014 3:18 pm

Re: Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT

Post by Eric_Mai »

Nvm, my brother explained it

Locked
Please be positive and constructive with your questions and comments.

Return to “Arduino”