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
Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT Fro
Moderators: adafruit_support_bill, adafruit
Please be positive and constructive with your questions and comments.
- Eric_Mai
- Posts: 33
- Joined: Sun May 11, 2014 3:18 pm
- Franklin97355
- Posts: 23912
- Joined: Mon Apr 21, 2008 2:33 pm
Re: Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT
Could you post clear pictures of both sides of your board showing any soldering you have done and the connections to it?
- Eric_Mai
- Posts: 33
- Joined: Sun May 11, 2014 3:18 pm
Re: Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT
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
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);
}
- Franklin97355
- Posts: 23912
- Joined: Mon Apr 21, 2008 2:33 pm
Re: Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT
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.
- adafruit_support_mike
- Posts: 67454
- Joined: Thu Feb 11, 2010 2:51 pm
Re: Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT
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.
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.
- Eric_Mai
- Posts: 33
- Joined: Sun May 11, 2014 3:18 pm
- Eric_Mai
- Posts: 33
- Joined: Sun May 11, 2014 3:18 pm
Re: Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT
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.
- adafruit_support_mike
- Posts: 67454
- Joined: Thu Feb 11, 2010 2:51 pm
Re: Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT
I know that situation well. ;-)
Feel free to pick up again when it's convenient for you, if it turns out to be necessary.
Feel free to pick up again when it's convenient for you, if it turns out to be necessary.
- Eric_Mai
- Posts: 33
- Joined: Sun May 11, 2014 3:18 pm
Re: Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT
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!)
- adafruit_support_mike
- Posts: 67454
- Joined: Thu Feb 11, 2010 2:51 pm
Re: Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT
I'm sorry to hear the Micro died, but glad that the display is working.
Happy hacking!
Happy hacking!
- Eric_Mai
- Posts: 33
- Joined: Sun May 11, 2014 3:18 pm
Re: Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT
Thanks but one thing, how do you display custom colors? (also a color chooser)
- adafruit_support_mike
- Posts: 67454
- Joined: Thu Feb 11, 2010 2:51 pm
Re: Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT
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.
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.
- Eric_Mai
- Posts: 33
- Joined: Sun May 11, 2014 3:18 pm
Re: Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT
Thanks but could you give an example? I don't really understand how to
- Franklin97355
- Posts: 23912
- Joined: Mon Apr 21, 2008 2:33 pm
Re: Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT
What is it you don't understand?I don't really understand how to
- Eric_Mai
- Posts: 33
- Joined: Sun May 11, 2014 3:18 pm
Re: Malfunctioning Arduino Micro Connected to a 1.8 Inch TFT
Nvm, my brother explained it
Please be positive and constructive with your questions and comments.