KD0RC
Well-known member
Hi Kurt E, I have a Teensy 4.1/Adafruit HX8357 project that uses your excellent HX8357_t3n.h library. My project is nearly done and working well (I'm at the code clean-up and documentation phase...). A couple of days ago, the display would occasionally fail to start properly, then the problem got progressively worse until it almost never starts. I have to unplug and very quickly re-plug it in to get it to work. I noticed that re-loading the firmware to the Teensy always started the display properly and so suspected that power was not settled. I tried a 5 second delay at the start of setup(), but it had no effect.
I then poked around in HX8357_t3n.cpp and found the reset code in the begin() routine. I copied it and pasted it into the beginning of my setup(), and it fixed the problem! Not sure if this is a one-off kind of problem or something that regularly happens, so I thought I would post these results. If this is a common problem, a tft.reset() function might be one solution or two resets back-to-back in the .cpp file might be another (or perhaps the time that the reset pin is pulled low?). I will experiment with the reset timing to see if that makes a difference, or if it just needs two resets.
I am also not sure if this issue is a symptom of pulling too much power from the Teensy. I am powering the display, STMPE-610 touch controller, two 16 channel MUX boards and two rotary encoders from the 3.3 v rail on the Teensy. I am afraid to power the display from 5 v as I don't know if the SPI and reset signals would go to 5 v. I have other Adafruit boards that allow 3 or 5 v operation and they must be powered by 3 v with the Teensy as Vcc determines signal voltage. I would be interested if you have any insight on using the display with 5 v.
Thanks for this great display library, I could not have done this project without it.
Len
I then poked around in HX8357_t3n.cpp and found the reset code in the begin() routine. I copied it and pasted it into the beginning of my setup(), and it fixed the problem! Not sure if this is a one-off kind of problem or something that regularly happens, so I thought I would post these results. If this is a common problem, a tft.reset() function might be one solution or two resets back-to-back in the .cpp file might be another (or perhaps the time that the reset pin is pulled low?). I will experiment with the reset timing to see if that makes a difference, or if it just needs two resets.
I am also not sure if this issue is a symptom of pulling too much power from the Teensy. I am powering the display, STMPE-610 touch controller, two 16 channel MUX boards and two rotary encoders from the 3.3 v rail on the Teensy. I am afraid to power the display from 5 v as I don't know if the SPI and reset signals would go to 5 v. I have other Adafruit boards that allow 3 or 5 v operation and they must be powered by 3 v with the Teensy as Vcc determines signal voltage. I would be interested if you have any insight on using the display with 5 v.
Thanks for this great display library, I could not have done this project without it.
Len
Code:
#include <SPI.h>
#include "HX8357_t3n.h"
#include "ili9341_t3n_font_Arial.h" // for the HX8357, not ili9341
#include "ili9341_t3n_font_ArialBold.h" // for the HX8357, not ili9341
#include <ILI9341_t3n_font_ComicSansMS.h> // for the HX8357, not ili9341
#include <SD.h>
#include "NativeEthernet.h"
#include <FlexRigTeensy.h>
#include "Encoder.h"
void setup()
{
// Reset tft display. This is the same code in HX8357_t3n.cpp and is executed in tft.begin().
// Added here to take care of flakey tft start up when the USB is plugged in. Delay at the
// beginning of setup did not help.
pinMode(TFT_RST, OUTPUT);
digitalWrite(TFT_RST, HIGH);
delay(5);
digitalWrite(TFT_RST, LOW);
delay(20);
digitalWrite(TFT_RST, HIGH);
delay(150);
// tft.println("Waiting for serial port monitor...");
Serial.begin(BAUD_RATE);
while (!Serial) // wait for Serial Monitor
{
if(millis() > 2000) // Don't wait too long...
{
break;
}
}
tft.begin();
tft.setRotation(3);
tft.fillScreen(HX8357_NAVY);
tft.setTextColor(HX8357_YELLOW);
tft.setCursor(0, 100);
tft.setFont(Arial_28_Bold);
tft.print("KD0RC ");
tft.setFont(ComicSansMS_28);
tft.println("TeensyMaestro");
tft.setFont(Arial_20_Bold);
tft.println();
tft.println("A Teensy based controller for");
tft.println("Flex 6000 Signature series radios.");