Associate
June 10, 2016
Question
STM32F4 Discovery and SSD2119 LCD driver with the LCD_35T example
- June 10, 2016
- 1 reply
- 1511 views
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