FTDI Community

Please login or register.

Login with username, password and session length.
Advanced Search  

News:

Welcome to the FTDI Community!

Please read our Welcome Note

Technical Support enquires
please contact the team
@ FTDI Support


New Bridgetek Community is now open

Please note that we have created the Bridgetek Community to discuss all Bridgetek products e.g. EVE, MCU.

Please follow this link and create a new user account to get started.

Bridgetek Community

Show Posts

You can view here all posts made by this member. Note that you can only see posts made in areas to which you currently have access.

Messages - SpicyChef

Pages: [1]
1
Discussion - Software / Re: FT813 initialization
« on: May 22, 2020, 02:47:36 PM »
Rudolph,

Thanks to your code I was able to find the problem in mine.

2
Discussion - Software / Re: FT813 initialization
« on: May 18, 2020, 04:20:23 PM »
Unfortunately still doesn't work, all I can see is the back light turning on.
I'm not sure where I'm going wrong with the code, since the logic reading seems to be good.

If you could look at the logic reading and help me, it would be greatly appreciated.

3
Discussion - Software / Re: FT813 initialization
« on: May 17, 2020, 10:36:51 PM »
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);

}

4
Discussion - Software / Re: FT813 initialization
« on: May 12, 2020, 06:29:00 AM »
I adjusted the code to focus on reading REG_ID like you suggested but all I'm able to read is ones.

Here is my code
Code: [Select]
#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



digitalWrite(PD_N, LOW);
delay(20);
digitalWrite(PD_N, HIGH);
delay(20);

SPI.setClockDivider(SPI_CLOCK_DIV4);
host_command(ACTIVE);
delay(500);
rd8(0x302000);




}

/*
void initialize(){
SPI.setClockDivider(SPI_CLOCK_DIV2);
host_command(CLKEXT);
host_command(ACTIVE);
delay(300);

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, 480);
wr16(REG_VSIZE, 800);

//CMD_DLSTART;      //Set display list address to 0
   
    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_GPIO_DIR,0x80);
    wr8(REG_GPIO,0x80);
    wr8(REG_PCLK,5);
   
}
*/

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;
}
*/

   // CMD_DLSTART;      //Set display list address to 0
   
   // 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, 0x00);
 
}

Attached is the header file and logic waveform.

5
Discussion - Software / FT813 initialization
« on: May 08, 2020, 03:06:57 PM »
Hello.
I'm a total beginner here. I'm trying to initialize a 4.3" display using FT813 and an Arduino uno.
I have a shield and all the connections are good.

When I upload the code, all I can see is the backlight turning on. My goal here is to make the display bright blue "CLEAR_COLOR_RGB(0,0,255)"

Here is the code, can you tell me what is wrong and provide an example where you can? (The header file was attached)

Code: [Select]
#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(){
SPI.setClockDivider(SPI_CLOCK_DIV2);
host_command(CLKEXT);
host_command(ACTIVE);
delay(300);

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, 480);
wr16(REG_VSIZE, 800);

//CMD_DLSTART;      //Set display list address to 0
   
    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_GPIO_DIR,0x80);
    wr8(REG_GPIO,0x80);
    wr8(REG_PCLK,5);

   
   
}

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;
}


    CMD_DLSTART;      //Set display list address to 0
   
    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, 0x00);
 
}

Pages: [1]