Vertical colored lines

Comments

7 comments

  • Michael_L

    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
  • erps

    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
  • Michael_L

    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
  • rtilson

    How was the issue with the vertical lines resolved?

    0
  • erps

    It was an initialization issue. Once the correct initialization code was set on place the display start working.

    0
  • rtilson

    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
  • erps

    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.