Vertical colored lines
Hi:
As a general question, what would be the reason to get vertical colored lines on a display? (see attached)
I am using NHD-5.7-320240WFB-ETXI #-T-1 with SSD1963 controller board.
Display is connected to the STM3221G-EVAL board from ST, FSMC 16-bit interface. I checked the connections and everything looks ok.
Thanks,
-
Other than electrical issues, I'd say it is a result of improper initialization. I've responded to your previous post with some example code; I've also included it below:
//---------------------------------------------------------
/*
NHD_5_7_320240WFB_mega.ino
Program for writing to Newhaven Display 5.7” TFT with NHD-5.7-320240WFB-20 Controller Board (SSD1963, 8-bit)
(c)2013 Michael LaVine - Newhaven Display International, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
*/
//---------------------------------------------------------
// The 8 bit data bus is connected to PORTA of the Arduino Mega2560
// 5V voltage regulator on Arduino Mega has been replaced with a 3.3V regulator to provide 3.3V logic
int RS = 30; // RS signal connected to Arduino digital pin 30
int WR = 31; // /WR signal connected to Arduino digital pin 31
int RD = 32; // /RD signal connected to Arduino digital pin 32
int RES = 33; // /RES signal connected to Arduino digital pin 33
// /CS signal tied to GND
//;******************************************************************************
void TFT_Write_Command(unsigned char command)
{
digitalWrite(RS, LOW);
PORTA = command;
digitalWrite(WR, LOW);
digitalWrite(WR, HIGH);
}
//;******************************************************************************
void TFT_Write_Data(unsigned char data)
{
//digitalWrite(RS, HIGH);
PORTA = data;
digitalWrite(WR, LOW);
digitalWrite(WR, HIGH);
}
//====================================================
void TFT_Command_Write(unsigned char REG,unsigned char VALUE)
{
TFT_Write_Command(REG);
digitalWrite(RS, HIGH);
TFT_Write_Data(VALUE);
}
//======================================================
void WindowSet(unsigned int s_x,unsigned int e_x,unsigned int s_y,unsigned int e_y)
{
TFT_Write_Command(0x2a); //SET column address
digitalWrite(RS, HIGH);
TFT_Write_Data((s_x)>>8); //SET start column address
TFT_Write_Data(s_x);
TFT_Write_Data((e_x)>>8); //SET end column address
TFT_Write_Data(e_x);
TFT_Write_Command(0x2b); //SET page address
digitalWrite(RS, HIGH);
TFT_Write_Data((s_y)>>8); //SET start page address
TFT_Write_Data(s_y);
TFT_Write_Data((e_y)>>8); //SET end page address
TFT_Write_Data(e_y);
}
void disp()
{
unsigned int i, j;
WindowSet(0,319,0,239); //set start/end column/page address (full screen)
TFT_Write_Command(0x2C); //command to begin writing to frame memory
digitalWrite(RS, HIGH);
for(i=0;i<240;i++) //fill screen with blue pixels
{
for(j=0;j<320;j++)
{
TFT_Write_Data(0xFF);
TFT_Write_Data(0x00);
TFT_Write_Data(0x00);
}
}
WindowSet(0,319,0,239); //set start/end column/page address (full screen)
TFT_Write_Command(0x2C); //command to begin writing to frame memory
digitalWrite(RS, HIGH);
for(i=0;i<240;i++) //fill screen with green pixels
{
for(j=0;j<320;j++)
{
TFT_Write_Data(0x00);
TFT_Write_Data(0xFF);
TFT_Write_Data(0x00);
}
}
WindowSet(0,319,0,239); //set start/end column/page address (full screen)
TFT_Write_Command(0x2C); //command to begin writing to frame memory
digitalWrite(RS, HIGH);
for(i=0;i<240;i++) //fill screen with red pixels
{
for(j=0;j<320;j++)
{
TFT_Write_Data(0x00);
TFT_Write_Data(0x00);
TFT_Write_Data(0xFF);
}
}
}
//======================================================
void setup()
{
DDRA = 0xFF;
PORTA = 0x00;
DDRC = 0xFF;
PORTC = 0x00;
digitalWrite(RD, HIGH);
digitalWrite(WR, LOW);
digitalWrite(RES, LOW);
delay(120);
digitalWrite(RES, HIGH);
delay(120);
TFT_Write_Command(0x01); //Software reset
delay(120);
TFT_Write_Command(0xe2); //set multiplier and divider of PLL
digitalWrite(RS, HIGH);
TFT_Write_Data(0x1d);
TFT_Write_Data(0x02);
TFT_Write_Data(0x04);
TFT_Command_Write(0xe0,0x01); //Enable PLL
delay(1);
TFT_Command_Write(0xe0,0x03); //Lock PLL
TFT_Write_Command(0x01); //Software reset
delay(120);
TFT_Write_Command(0xb0); //SET LCD MODE SET TFT 18Bits MODE
digitalWrite(RS, HIGH);
TFT_Write_Data(0x0c); //SET TFT MODE & hsync+Vsync+DEN MODE
TFT_Write_Data(0x80); //SET TFT MODE & hsync+Vsync+DEN MODE
TFT_Write_Data(0x01); //SET horizontal size=320-1 HightByte
TFT_Write_Data(0x3f); //SET horizontal size=320-1 LowByte
TFT_Write_Data(0x00); //SET vertical size=240-1 HightByte
TFT_Write_Data(0xef); //SET vertical size=240-1 LowByte
TFT_Write_Data(0x00); //SET even/odd line RGB seq.=RGB
TFT_Command_Write(0xf0,0x00); //SET pixel data I/F format=8bit
TFT_Command_Write(0x36,0x09); //SET address mode=flip vertical
TFT_Write_Command(0xe6); //SET PCLK freq
digitalWrite(RS, HIGH);
TFT_Write_Data(0x00);
TFT_Write_Data(0xe7);
TFT_Write_Data(0x4f);
TFT_Write_Command(0xb4); //SET HBP
digitalWrite(RS, HIGH);
TFT_Write_Data(0x01); //SET HSYNC Total=440
TFT_Write_Data(0xb8);
TFT_Write_Data(0x00); //SET HBP 68
TFT_Write_Data(0x44);
TFT_Write_Data(0x0f); //SET HSYNC Pulse Width=128=127pixels+1
TFT_Write_Data(0x00); //SET Hsync pulse start position
TFT_Write_Data(0x00);
TFT_Write_Data(0x00); //SET Hsync pulse subpixel start position
TFT_Write_Command(0xb6); //SET VBP
digitalWrite(RS, HIGH);
TFT_Write_Data(0x01); //SET Vsync total
TFT_Write_Data(0x08);
TFT_Write_Data(0x00); //SET VBP=19
TFT_Write_Data(0x13);
TFT_Write_Data(0x07); //SET VSYNC Pulse Width= 8=7lines+1
TFT_Write_Data(0x00); //SET Vsync pulse start position
TFT_Write_Data(0x00);
TFT_Write_Command(0x13); //SET display on
//TFT_Write_Command(0x38); //SET display on
TFT_Write_Command(0x29); //SET display on
delay(10);
}
void loop()
{
disp();
delay(1000);
}You will notice it is for the 8-bit interface, however, the initialization/sequence/timing will be the same because even in 16-bit mode the commands are sent using only 8-bits.
0 -
Thanks, it works now but still an issue during power on. Sometimes the display doesn't come up after a power cycle. I have to try several times either power cycling it or reset the board, for the display to come alive.
Is there any particular signal sequence during power on we need to consider?
Thanks,0 -
As long as you follow the sequence as provided in the example code it should work every time. Take special note of the RESET line being toggled in the beginning and also the delays around it (in ms).
0 -
How was the issue with the vertical lines resolved?
0 -
It was an initialization issue. Once the correct initialization code was set on place the display start working.
0 -
Awesome, specifically what what the initialization issue. I'm using the FT800 Eve gfx engine to drive my display and I have been able to eliminate the part as the problem. I've reduced the issue down to initialization but I'm not sure what aspect of initialization I have wrong.
What are the technical details of your initialization issue?
Thanks.0 -
Nothing in particular with the initialization code itself but where this code was place. I am using some ST code examples using the STemWin library and I was placing the initialization code in the wrong spot.
0
Please sign in to leave a comment.
Comments
7 comments