Hello,
So I got the FT813 to communicate back correctly. I'm still having trouble making the display show what I want, in this case a blue screen. I followed the code you recommended but no luck.
In the zip file attached is my code and logic analyzer file along with a screenshot showing the correct communication.
Here is the code
#include <SPI.h>
#include "functions.h"
void setup() {
// put your setup code here, to run once:
pinMode(ChipSelectPin, OUTPUT);
pinMode(INT_N, OUTPUT);
pinMode(PD_N, OUTPUT);
digitalWrite(ChipSelectPin, HIGH); //When ChipSelectPin is high you can't communicate with FT81X
digitalWrite(INT_N, HIGH); //deactivate interrupt to host
digitalWrite(PD_N, HIGH); //deactivate Chip power down mode
Serial.begin(9600);
//initialise SPI
SPI.begin();
SPI.setBitOrder(MSBFIRST); //Not strictly needed but just to be sure
SPI.setDataMode(SPI_MODE0); //Not stirctly needed but just to be sure
}
void initialize(){
digitalWrite(PD_N, LOW); //PD low to reset the device
delay(20);
digitalWrite(PD_N, HIGH); //PD high again
delay(20);
host_command(ACTIVE); //Send ACTIVE (0x00) to wake the FT81X
delay(300);
rd8(REG_ID); //Read the chip's ID
rd8(REG_CPURESET); //Ensure CPURESET register reads 0 and FT81X is ready $$
wr16(REG_HCYCLE, 928);
wr16(REG_HOFFSET, 88);
wr16(REG_HSYNC0, 0);
wr16(REG_HSYNC1, 48);
wr16(REG_VCYCLE, 525);
wr16(REG_VOFFSET, 32);
wr16(REG_VSYNC0, 0);
wr16(REG_VSYNC1, 3);
wr8(REG_SWIZZLE, 0);
wr8(REG_PCLK_POL, 1);
//wr8(REG_CSPREAD, 0);
wr16(REG_HSIZE, 800);
wr16(REG_VSIZE, 480);
byte FT81X_GPIO;
FT81X_GPIO=rd8(REG_GPIO);
bitSet(FT81X_GPIO,7);
wr8(REG_GPIO, FT81X_GPIO);
wr32(RAM_DL + 0, CLEAR_COLOR_RGB(0,0,0)); //CLEAR_COLOR_RGB0,0,0
wr32(RAM_DL + 4, CLEAR(1,1,1));
wr32(RAM_DL + 8, DISPLAY); //DISPLAY
wr8(REG_DLSWAP,0x02); //Send 0x02 because the programming guide says 10 (0x02) is recommended in most cases. Go to REG_DLSWAP for more info.
wr8(REG_PCLK,2);
wr8(REG_PWM_DUTY, 127);
}
bool InitializeTrigger = true; //To trigger initialization once in the beginning
void loop() {
// put your main code here, to run repeatedly:
if( InitializeTrigger == true){
initialize();
InitializeTrigger = false;
}
wr32(RAM_DL + 0, CLEAR_COLOR_RGB(0,0,255)); //CLEAR_COLOR_RGB0,0,0
wr32(RAM_DL + 4, CLEAR(1,1,1));
wr32(RAM_DL + 8, DISPLAY);
}