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.