I am trying to evaluate this display to possibly go into our product. But I am having trouble reading the Chip ID. It returns a zero. I am using a PIC24 in an Explorer 16/32 to drive the display with the SPI in master mode. Shouldn't I connect the SDO pin of the PIC to the SDI pin of the display? I don't see data being returned on the SDI pin of the PIC. I read one post say to slow the SPI clock down to below 1Mhz. I did this and it didn't help. Below is my Start up sequence. I copied this from the FT81x Simple PIC Application. BTW, the FT813 is used on this display.
void APP_Init(void) {
// ----------------------- Cycle PD pin to reset device --------------------
MCU_PDlow(); // PD low to reset device
MCU_Delay_20ms();
MCU_PDhigh(); // PD high again
MCU_Delay_20ms();
// ---------------------- Delay to allow start-up --------------------
EVE_CmdWrite(0x44, 0x00); // 0x44 = HostCMD_CLKEXT
EVE_CmdWrite(FT81x_ACTIVE, 0x00); // Sends 00 00 00 to wake FT8xx
MCU_Delay_500ms(); // 500ms delay (EVE requires at least 300ms here))
// FT80x_selection - Uncomment these four lines below if using FT800 e.g. VM800B
// EVE_CmdWrite(0x44, 0x00); // 0x44 = HostCMD_CLKEXT
// EVE_CmdWrite(0x62, 0x00); // 0x64 = HostCMD_CLK48M
// EVE_CmdWrite(0x68, 0x00); // 0x68 = HostCMD_CORE RESET
// EVE_CmdWrite(0x40, 0x00); // 0x40 = HostCMD_GPUACTIVE
// --------------- Check that FT8xx ready and SPI comms OK -----------------
while (EVE_MemRead8(REG_ID) != 0x7C) // Read REG_ID register (0x302000) until reads 0x7C
{
}
while (EVE_MemRead8(REG_CPURESET) != 0x00) // Ensure CPUreset register reads 0 and so FT8xx is ready
{
}
// ------------------------- Display settings ------------------------------
// display parameters
lcdWidth = 320; // Active width of LCD display
lcdHeight = 240; // Active height of LCD display
lcdHcycle = 408; // Total number of clocks per line
lcdHoffset = 70; // Start of active line
lcdHsync0 = 0; // Start of horizontal sync pulse
lcdHsync1 = 10; // End of horizontal sync pulse
lcdVcycle = 263; // Total number of lines per screen
lcdVoffset = 13; // Start of active screen
lcdVsync0 = 0; // Start of vertical sync pulse
lcdVsync1 = 2; // End of vertical sync pulse
lcdPclk = 6; // Pixel Clock
lcdSwizzle = 2; // Define RGB output pins
lcdPclkpol = 1; // Define active edge of PCLK
EVE_MemWrite16(REG_HSIZE, lcdWidth);
EVE_MemWrite16(REG_HCYCLE, lcdHcycle);
EVE_MemWrite16(REG_HOFFSET, lcdHoffset);
EVE_MemWrite16(REG_HSYNC0, lcdHsync0);
EVE_MemWrite16(REG_HSYNC1, lcdHsync1);
EVE_MemWrite16(REG_VSIZE, lcdHeight);
EVE_MemWrite16(REG_VCYCLE, lcdVcycle);
EVE_MemWrite16(REG_VOFFSET, lcdVoffset);
EVE_MemWrite16(REG_VSYNC0, lcdVsync0);
EVE_MemWrite16(REG_VSYNC1, lcdVsync1);
EVE_MemWrite8(REG_SWIZZLE, lcdSwizzle);
EVE_MemWrite8(REG_PCLK_POL, lcdPclkpol);
FT81x_GPIO = EVE_MemRead8(REG_GPIO); // Read the FT800 GPIO register for a read/modify/write operation
FT81x_GPIO = FT81x_GPIO | 0x80; // set bit 7 of FT800 GPIO register (DISP) - others are inputs
EVE_MemWrite8(REG_GPIO, FT81x_GPIO); // Enable the DISP signal to the LCD panel
// Can move these 2 lines to after the first display list to make the start-up appear cleaner to the user
EVE_MemWrite8(REG_PCLK, lcdPclk); // Now start clocking data to the LCD panel
EVE_MemWrite8(REG_PWM_DUTY, 127);
// ---------------------- Touch and Audio settings -------------------------
EVE_MemWrite16(REG_TOUCH_RZTHRESH, 1200); // Eliminate any false touches
EVE_MemWrite8(REG_VOL_PB, ZERO); // turn recorded audio volume down
EVE_MemWrite8(REG_VOL_SOUND, ZERO); // turn synthesizer volume down
EVE_MemWrite16(REG_SOUND, 0x6000); // set synthesizer to mute
// -------- Initial display list to begin with blank screen ----------------
ramDisplayList = RAM_DL; // start of Display List
EVE_MemWrite32(ramDisplayList, 0x02000000); // Clear Color RGB sets the colour to clear screen to
ramDisplayList += 4; // point to next location
EVE_MemWrite32(ramDisplayList, (0x26000000 | 0x00000007)); // Clear 00100110 -------- -------- -----CST (C/S/T define which parameters to clear)
ramDisplayList += 4; // point to next location
EVE_MemWrite32(ramDisplayList, 0x00000000); // DISPLAY command 00000000 00000000 00000000 00000000 (end of display list)
EVE_MemWrite32(REG_DLSWAP, DLSWAP_FRAME); // Swap display list to make the edited one active
}