cancel
Showing results for 
Search instead for 
Did you mean: 

STM32F4 Discovery and SSD2119 LCD driver with the LCD_35T example

gvolpi
Associate
Posted on June 10, 2016 at 15:27

I'm trying to loading the LCD_35T example on an STM32F4 Discovery connected to a 320x240 TFT LCD with the SSD2119 driver (connected like in the expansion board).

What I get is that I'm not able to write on all the pixels of the display. I suppose it is a problem of register initialization:


LCD_WriteReg(SSD2119_SLEEP_MODE_1_REG, 0x0001);

// Set initial power parameters.

LCD_WriteReg(SSD2119_PWR_CTRL_5_REG, 0x002B);

LCD_WriteReg(SSD2119_VCOM_OTP_1_REG, 0x0006);

// Start the oscillator.

LCD_WriteReg(SSD2119_OSC_START_REG, 0x0001);

// Set pixel format and basic display orientation (scanning direction).

LCD_WriteReg(SSD2119_OUTPUT_CTRL_REG, 0x72EF); 
//72-30EF

LCD_WriteReg(SSD2119_LCD_DRIVE_AC_CTRL_REG, 0x0600);

// Exit sleep mode.

LCD_WriteReg(SSD2119_SLEEP_MODE_1_REG, 0x0000);

_delay_(5);

// Configure pixel color format and MCU interface parameters.

LCD_WriteReg(SSD2119_ENTRY_MODE_REG, ENTRY_MODE_DEFAULT);

// Set analog parameters

LCD_WriteReg(SSD2119_SLEEP_MODE_2_REG, 0x0999);

LCD_WriteReg(SSD2119_ANALOG_SET_REG, 0x3800);

// Enable the display

LCD_WriteReg(SSD2119_DISPLAY_CTRL_REG, 0x0033);

// Set VCIX2 voltage to 6.1V.

LCD_WriteReg(SSD2119_PWR_CTRL_2_REG, 0x0005);

// Configure gamma correction.

LCD_WriteReg(SSD2119_GAMMA_CTRL_1_REG, 0x0000);

LCD_WriteReg(SSD2119_GAMMA_CTRL_2_REG, 0x0303);

LCD_WriteReg(SSD2119_GAMMA_CTRL_3_REG, 0x0407);

LCD_WriteReg(SSD2119_GAMMA_CTRL_4_REG, 0x0301);

LCD_WriteReg(SSD2119_GAMMA_CTRL_5_REG, 0x0301);

LCD_WriteReg(SSD2119_GAMMA_CTRL_6_REG, 0x0403);

LCD_WriteReg(SSD2119_GAMMA_CTRL_7_REG, 0x0707);

LCD_WriteReg(SSD2119_GAMMA_CTRL_8_REG, 0x0400);

LCD_WriteReg(SSD2119_GAMMA_CTRL_9_REG, 0x0A00);

LCD_WriteReg(SSD2119_GAMMA_CTRL_10_REG, 0x1000);

// Configure Vlcd63 and VCOMl

LCD_WriteReg(SSD2119_PWR_CTRL_3_REG, 0x000A);

LCD_WriteReg(SSD2119_PWR_CTRL_4_REG, 0x2E00);

LCD_WriteReg(SSD2119_GATE_SCAN_START_REG, 0x0001); 
// Vertical offset

// Set the display size and ensure that the GRAM window is set to allow

// access to the full display buffer.

LCD_WriteReg(SSD2119_V_RAM_POS_REG, (LCD_PIXEL_HEIGHT-1) << 8);

LCD_WriteReg(SSD2119_H_RAM_START_REG, 0x0000);

LCD_WriteReg(SSD2119_H_RAM_END_REG, LCD_PIXEL_WIDTH-1);

//LCD_WriteReg(SSD2119_H_PORCH, 0x001D);

//LCD_WriteReg(SSD2119_V_PORCH, 0x0003);

//LCD_WriteReg(SSD2119_FW_START, 0x0000);

//LCD_WriteReg(SSD2119_FW_END, 0x00EF);

//LCD_WriteReg(SSD2119_SW_START, 0x0000);

//LCD_WriteReg(SSD2119_SW_END, 0x00EF);

LCD_WriteReg(SSD2119_X_RAM_ADDR_REG, 0x00);

LCD_WriteReg(SSD2119_Y_RAM_ADDR_REG, 0x00);

// clear the lcd

LCD_WriteReg(SSD2119_RAM_DATA_REG, 0x0000);

The strange thing is that if I configure the SSD2119_H_RAM_END_REG [0x46] to be between 0 and 255 the display becomes wider but the last 65 pixels (320-255) are overwritten in the first pixels, like in the first two images. If I configure the same register to be greater than 255 (up to 320) the display shows just the last 65 pixels leaving undefined the rest of the display area.

The two situations can be seen in the attached figures #ssd2119 #lcd #stm32f4discovery
1 REPLY 1
gvolpi
Associate
Posted on June 14, 2016 at 09:36

SOLVED!,

the problem both in the registry setting and in the default font.

  1.   LCD_WriteReg(

    0x0028

    ,

    0x0006

    );    

    // VCOM OTP

      

  2.   LCD_WriteReg(

    0x0000

    ,

    0x0001

    );    

    // start Oscillator

      

  3.   LCD_WriteReg(

    0x0010

    ,

    0x0000

    );    

    // Sleep mode

      

  4.   LCD_WriteReg(

    0x0001

    ,

    0x72EF

    );    

    // Driver Output Control

      

  5.   LCD_WriteReg(

    0x0002

    ,

    0x0600

    );    

    // LCD Driving Waveform Control

      

  6.   LCD_WriteReg(

    0x0003

    ,

    0x6A38

    );    

    // Power Control 1

      

  7.   LCD_WriteReg(

    0x0011

    ,

    0x6270

    );    

    // Entry Mode Horizontal screen mode 320*240 65k colour

      

  8.   LCD_WriteReg(

    0X000F

    ,

    0x0000

    );    

    // Gate Scan Position

      

  9.   LCD_WriteReg(

    0X000B

    ,

    0x5308

    );    

    // Frame Cycle Control

      

  10.   LCD_WriteReg(

    0x000C

    ,

    0x0003

    );    

    // Power Control 2

      

  11.   LCD_WriteReg(

    0x000D

    ,

    0x000A

    );    

    // Power Control 3

      

  12.   LCD_WriteReg(

    0x000E

    ,

    0x2E00

    );    

    // Power Control 4

      

  13.   LCD_WriteReg(

    0x001E

    ,

    0x00BE

    );    

    // Power Control 5

      

  14.   LCD_WriteReg(

    0x0025

    ,

    0x8000

    );    

    // Frame Frequency Control

      

  15.   LCD_WriteReg(

    0x0026

    ,

    0x7800

    );    

    // Analog setting

      

  16.   LCD_WriteReg(

    0x004E

    ,

    0x0000

    );    

    // Ram Address Set

      

  17.   LCD_WriteReg(

    0x004F

    ,

    0x0000

    );    

    // Ram Address Set

      

  18.   LCD_WriteReg(

    0x0012

    ,

    0x08D9

    );    

    // Sleep mode

      

  19.   LCD_WriteReg(

    0x0030

    ,

    0x0000

    ); 

    // Gamma Control (R30h to R3Bh)

      

  20.   LCD_WriteReg(

    0x0031

    ,

    0x0104

    );  

  21.   LCD_WriteReg(

    0x0032

    ,

    0x0100

    );  

  22.   LCD_WriteReg(

    0x0033

    ,

    0x0305

    );  

  23.   LCD_WriteReg(

    0x0034

    ,

    0x0505

    );  

  24.   LCD_WriteReg(

    0x0035

    ,

    0x0305

    );  

  25.   LCD_WriteReg(

    0x0036

    ,

    0x0707

    );  

  26.   LCD_WriteReg(

    0x0037

    ,

    0x0300

    );  

  27.   LCD_WriteReg(

    0x003A

    ,

    0x1200

    );  

  28.   LCD_WriteReg(

    0x003B

    ,

    0x0800

    );  

  29.   LCD_WriteReg(

    0x0007

    ,

    0x0033

    );    

    // Display Control

      

  30.   LCD_WriteReg(

    0x0022

    ,

    0x0000

    );   

    // RAM data write/read */

      

After this setting if I set the font to a smaller size like Font12x12 instead of Font16x24 it works. Keeping the Font16x24 is able to clear all the display, removing the undefined area, but the problem in the string overwriting still exists.