Maveryck.G
New member
Hi everyone !
Thanks you to take the time to read me.
This is my first post, I came here in hope to get some help..
As the title suggests, I'm having some pain to get a working display, using the GDSTx lib.
I'm using the Teensy4.1 board, with a 4.3" Gen4-FT813-43CTP-CLB from 4DSystems. See the datasheet linked below :
Datasheet 4DSystem GEN4-FT813-43CTP-CLB
So here is the problem :
First time I'm calling a "draw loop/draw call" (I don't know how to call this) in the setup(), everything works fine.
But as soon as I want to display anything else from the loop() (like code from the examples), I can only get "tearing" or "blurry" image, displaying badly, or even don't displaying at all, and after a time, i get a "nuke" screen : Invalid Operation...
I know this specific screen is currently not fully supported by the library (its not in the "SizeEVE" list of display, in the config.h file), but I manage to get a "Hello World" working by using the "SizeEVE == 43" setting. Witch should correspond to the NHD FT813 4.3" if I recall correctly.
So,I'm thinking of a timing issue, or something like this. Unfortunaly, the manufacturer does not provide a "Timing table" nor the specifics values for the timing registers REG_HSYNC, REG_HOFFSET, REG_VSYNC, etc...
Timing information are provided.. But I'm unable to understand how to use them.. According to FTDI Documentation, i've understood that register value are related to wich is shown in the datasheet, But I don't understand precisly how to set them up.. Like why is there "minium/maximum/typical".. I'm kind of lost...
Anyway, if someone has some clue, I'll be glad to read !!
So, Let me show you the details :
Here is the situation where everything is ok :
Here is the result : So far everything is fine.

But here is the problem when I call something from the loop.
The "HelloWorld" screen is still showing fine, but as soon as drawTest() is called here is what i get :

This kind of "tearing" made me think of a timing issue.. But 'im really not sure.. As I manage to have a first screen looking fine, It make me confuse..
Maybe i'm just dumb and I don't understand how the lib is working ?...
If someone can land some help, I'll be very very happy !
Btw, @TFTLCDCyg, I think i've read on the forum that you are involved in the lib maintenance.. If i can help by adding support for this display, or something, i'll be glad too !
Thank you all in advance for you help !!
Thanks you to take the time to read me.
This is my first post, I came here in hope to get some help..
As the title suggests, I'm having some pain to get a working display, using the GDSTx lib.
I'm using the Teensy4.1 board, with a 4.3" Gen4-FT813-43CTP-CLB from 4DSystems. See the datasheet linked below :
Datasheet 4DSystem GEN4-FT813-43CTP-CLB
So here is the problem :
First time I'm calling a "draw loop/draw call" (I don't know how to call this) in the setup(), everything works fine.
But as soon as I want to display anything else from the loop() (like code from the examples), I can only get "tearing" or "blurry" image, displaying badly, or even don't displaying at all, and after a time, i get a "nuke" screen : Invalid Operation...
I know this specific screen is currently not fully supported by the library (its not in the "SizeEVE" list of display, in the config.h file), but I manage to get a "Hello World" working by using the "SizeEVE == 43" setting. Witch should correspond to the NHD FT813 4.3" if I recall correctly.
So,I'm thinking of a timing issue, or something like this. Unfortunaly, the manufacturer does not provide a "Timing table" nor the specifics values for the timing registers REG_HSYNC, REG_HOFFSET, REG_VSYNC, etc...
Timing information are provided.. But I'm unable to understand how to use them.. According to FTDI Documentation, i've understood that register value are related to wich is shown in the datasheet, But I don't understand precisly how to set them up.. Like why is there "minium/maximum/typical".. I'm kind of lost...
Anyway, if someone has some clue, I'll be glad to read !!
So, Let me show you the details :
Here is the situation where everything is ok :
C++:
void setup() {
Serial.begin(115200);
delay(100);
D_LOGLN("*** Entering Setup Sequence ***")
// Configure Pinmode
// Digital Outputs
pinMode(FT813_CS_PIN, OUTPUT);
pinMode(FT813_PD_PIN, OUTPUT);
pinMode(FT813_INT_PIN, INPUT);
digitalWrite(FT813_PD_PIN, HIGH);
digitalWrite(FT813_INT_PIN, HIGH);
// Init SPI
SPI.begin();
// Init Display
initUi();
delay(1000);
}
// Copy/pasted from example file
void initUi()
{
GD.begin();
GD.ClearColorRGB(0,0,0);
GD.Clear();
GD.cmd_text(GD.w/2, GD.h/2, 30, OPT_CENTER, "Hello world");
// Added my owm rect.
GD.Rect_Empty(
16, 16,
GD.w-32, GD.h-32,
UI_COLOR_3
);
GD.Begin(LINES);
GD.ColorRGB(UI_COLOR_1);
GD.Vertex2f(0*16, 0*16);
GD.Vertex2f((GD.w)*16, 0*16); //Superior
GD.Vertex2f(0*16, (GD.h-1)*16);
GD.Vertex2f((GD.w)*16, (GD.h-1)*16); //inferior
GD.Vertex2f(0*16, 0*16);
GD.Vertex2f(0*16, (GD.h-1)*16); //izquierda
GD.Vertex2f((GD.w-1)*16, 0*16);
GD.Vertex2f((GD.w-1)*16, (GD.h-1)*16); //derecha
GD.swap();
}
Here is the result : So far everything is fine.

But here is the problem when I call something from the loop.
C++:
void setup() {
Serial.begin(115200);
delay(100);
D_LOGLN("*** Entering Setup Sequence ***")
// Configure Pinmode
// Digital Outputs
pinMode(FT813_CS_PIN, OUTPUT);
pinMode(FT813_PD_PIN, OUTPUT);
pinMode(FT813_INT_PIN, INPUT);
digitalWrite(FT813_PD_PIN, HIGH);
digitalWrite(FT813_INT_PIN, HIGH);
// Init SPI
SPI.begin();
// Init Display
initUi();
delay(1000);
}
void loop()
{
drawTest();
delay(1000);
}
// Copy/pasted from example file
void initUi()
{
GD.begin();
GD.ClearColorRGB(0,0,0);
GD.Clear();
GD.cmd_text(GD.w/2, GD.h/2, 30, OPT_CENTER, "Hello world");
// Added my owm rect.
GD.Rect_Empty(
16, 16,
GD.w-32, GD.h-32,
UI_COLOR_3
);
GD.Begin(LINES);
GD.ColorRGB(UI_COLOR_1);
GD.Vertex2f(0*16, 0*16);
GD.Vertex2f((GD.w)*16, 0*16); //Superior
GD.Vertex2f(0*16, (GD.h-1)*16);
GD.Vertex2f((GD.w)*16, (GD.h-1)*16); //inferior
GD.Vertex2f(0*16, 0*16);
GD.Vertex2f(0*16, (GD.h-1)*16); //izquierda
GD.Vertex2f((GD.w-1)*16, 0*16);
GD.Vertex2f((GD.w-1)*16, (GD.h-1)*16); //derecha
GD.swap();
}
void drawTest()
{
GD.ClearColorRGB(0x000055);
GD.Clear();
GD.finish();
GD.SaveContext();
GD.cmd_text(16, 16, 22, OPT_CENTER, "Test");
GD.RestoreContext();
GD.swap();
}
The "HelloWorld" screen is still showing fine, but as soon as drawTest() is called here is what i get :

This kind of "tearing" made me think of a timing issue.. But 'im really not sure.. As I manage to have a first screen looking fine, It make me confuse..
Maybe i'm just dumb and I don't understand how the lib is working ?...
If someone can land some help, I'll be very very happy !
Btw, @TFTLCDCyg, I think i've read on the forum that you are involved in the lib maintenance.. If i can help by adding support for this display, or something, i'll be glad too !
Thank you all in advance for you help !!