ADRIAN BARRANCO
New member
Hello, I have a CFAF240400D-030T-CB, I tried to use the demostration code that comes with the product, but I cant see anything in the display, I´m using a freescale demoqe128 microcontroller. I read that the "IM0" "IM1" and "IM2" for the 8, 9, 16 and 18 bit mode pins are wrong in the datasheet.
I´m using PTFD for one data bus, and for the other PTAD (bits 1,2,3,6,7) and PTBD (bits 0,4,5).
This is the code that Im using:
Put code formatting in: Moderator
I´m using PTFD for one data bus, and for the other PTAD (bits 1,2,3,6,7) and PTBD (bits 0,4,5).
This is the code that Im using:
Code:
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
#include "stdint.h"
void LCD_test();
void delay(unsigned int t);
void write_command(unsigned int command);
void write_data(unsigned int data);
void initialization();
void Display_Home();
void display_rgb(unsigned int data);
void ini_port(void);
#define CLR_CD PTCD &= ~PTCD_PTCD7_MASK;
#define SET_CD PTCD |= PTCD_PTCD7_MASK;
#define CLR_CS PTCD &= ~PTCD_PTCD4_MASK;
#define SET_CS PTCD |= PTCD_PTCD4_MASK;
#define CLR_RESET PTCD &= ~PTCD_PTCD2_MASK;
#define SET_RESET PTCD |= PTCD_PTCD2_MASK;
#define CLR_WR PTCD &= ~PTCD_PTCD6_MASK;
#define SET_WR PTCD |= PTCD_PTCD6_MASK;
#define CLR_RD PTCD &= ~PTCD_PTCD5_MASK;
#define SET_RD PTCD |= PTCD_PTCD5_MASK;
// color definitions
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
//#define uint8 unsigned char
//#define uint16 unsigned int
//#define uint32 unsigned long
//uint8_t datoA = 0xCE; //%11001110
//uint8_t datoB = 0x31; //%00110001
/*************************************************/
void main()
{
EnableInterrupts;
ini_port();
// Initialize the display
initialization();
while(1)
{
__RESET_WATCHDOG(); /* feeds the dog */
/*if(PTDD_PTDD3 == 0)
{
PTAD = 0x55;
PTBD = 0x55;
PTFD = 0x55;
PTCD = ;
}
else
{
PTAD = 0xAA;
PTBD = 0xAA;
PTFD = 0xAA;
PTCD = ;
}*/
LCD_test();
} /* loop forever */
/* please make sure that you never leave main */
}
/*************************************************/
void delay(unsigned int t)
{
while(t > 0)
{
__RESET_WATCHDOG();
t--;
}
}
/*************************************************/
void write_command(unsigned int command)
{
CLR_CS;
CLR_CD;
SET_RD;
SET_WR;
PTAD = (unsigned char)command;
//PTAD = ((unsigned char)command)&&datoA;
PTBD = (unsigned char)command;
//PTBD = ((unsigned char)command)&&datoB;
PTFD = (unsigned char)command>>8;
CLR_WR;
SET_WR;
SET_CS;
}
/*************************************************/
void write_data(unsigned int data)
{
CLR_CS;
SET_CD;
SET_RD;
SET_WR;
PTAD = (unsigned char)data;
//PTAD = ((unsigned char)data)&&datoA;
PTBD = (unsigned char)data;
//PTBD = ((unsigned char)data)&&datoB;
PTFD = (unsigned char)data >>8;
CLR_WR;
SET_WR;
SET_CS;
// keeps the display from going wonky -- don't know why this is.
PTAD = (unsigned char)0xFFFF;
//PTAD = ((unsigned char)0xFFFF)&&datoA;
PTBD = (unsigned char)0xFFFF;
//PTBD = ((unsigned char)0xFFFF)&&datoB;
PTFD = (unsigned char)0xFFFF;
}
/*************************************************/
void initialization()
{
SET_RD;
SET_WR;
SET_CS;
SET_CD;
PTAD = 0x00;
PTBD = 0x00;
PTFD = 0x00;
CLR_RESET;
delay(10000);
delay(10000);
SET_RESET;
delay(500);
write_command(0x0606); // Pin Control (R606h)
write_data(0x0000); // Page 41 of SPFD5420A Datasheet
delay(50);
write_command(0x0007); // Display Control 1 (R007h)
write_data(0x0001); // Page 16 of SPFD5420A Datasheet
delay(50);
write_command(0x0110); // Power Control 6(R110h)
write_data(0x0001); // Page 30 of SPFD5420A Datasheet
delay(50);
write_command(0x0100); // Power Control 1 (R100h)
write_data(0x17B0); // Page 26 of SPFD5420A Datasheet
write_command(0x0101); // Power Control 2 (R101h)
write_data(0x0147); // Page 27 of SPFD5420A Datasheet
write_command(0x0102); // Power Control 3 (R102h)
write_data(0x019D); // Page 28 of SPFD5420A Datasheet
write_command(0x0103); // Power Control 4 (R103h)
write_data(0x3600); // Page 29 of SPFD5420A Datasheet
write_command(0x0281); // NVM read data 2 (R281h)
write_data(0x0010); // Page 34 of SPFD5420A Datasheet
delay(50);
write_command(0x0102); // Power Control 3 (R102h)
write_data(0x01BD); // Page 28 of SPFD5420A Datasheet
delay(50);
//--------------- Power control 1~6 ---------------//
write_command(0x0100); // Power Control 1 (R100h)
write_data(0x16B0); // Page 26 of SPFD5420A Datasheet
write_command(0x0101); // Power Control 2 (R101h)
write_data(0x0147); // Page 27 of SPFD5420A Datasheet
write_command(0x0102); // Power Control 3 (R102h)
write_data(0x01BD); // Page 28 of SPFD5420A Datasheet
write_command(0x0103); // Power Control 4 (R103h)
write_data(0x2d00); // Page 29 of SPFD5420A Datasheet
write_command(0x0107); // Power Control 5 (R107h)
write_data(0x0000); // Page 30 of SPFD5420A Datasheet
write_command(0x0110); // Power Control 6(R110h)
write_data(0x0001); // Page 30 of SPFD5420A Datasheet
write_command(0x0280); // NVM read data 1 (R280h)
write_data(0x0000); // Page 33 of SPFD5420A Datasheet
write_command(0x0281); // NVM read data 2 (R281h)
write_data(0x0006); // Page 34 of SPFD5420A Datasheet
write_command(0x0282); // NVM read data 3 (R282h)
write_data(0x0000); // Page 34 of SPFD5420A Datasheet
//------- Gamma 2.2 control (R300h to R30Fh) ------//
write_command(0x0300);
write_data(0x0101);
write_command(0x0301);
write_data(0x0b27);
write_command(0x0302);
write_data(0x132a);
write_command(0x0303);
write_data(0x2a13);
write_command(0x0304);
write_data(0x270b);
write_command(0x0305);
write_data(0x0101);
write_command(0x0306);
write_data(0x1205);
write_command(0x0307);
write_data(0x0512);
write_command(0x0308);
write_data(0x0005);
write_command(0x0309);
write_data(0x0003);
write_command(0x030A);
write_data(0x0f04);
write_command(0x030B);
write_data(0x0f00);
write_command(0x030C);
write_data(0x000f);
write_command(0x030D);
write_data(0x040f);
write_command(0x030E);
write_data(0x0300);
write_command(0x030F);
write_data(0x0500);
write_command(0x0400); // Base Image Number of Line (R400h)
write_data(0x3500); // Page 36 of SPFD5420A Datasheet
write_command(0x0401); // Base Image Display Control (R401h)
write_data(0x0001); // Page 39 of SPFD5420A Datasheet
write_command(0x0404); // Based Image Vertical Scroll Control (R404h)
write_data(0x0000); // Page 40 of SPFD5420A Datasheet
//--------------- Normal set ---------------//
write_command(0x0000); // ID Read Register (R000h)
write_data(0x0000); // Page 13 of SPFD5420A Datasheet
write_command(0x0001); // Driver Output Control Register (R001h)
write_data(0x0100); // Page 14 of SPFD5420A Datasheet
write_command(0x0002); // LCD Driving Waveform Control (R002h)
write_data(0x0100); // Page 14 of SPFD5420A Datasheet
write_command(0x0003); // Entry Mode (R003h)
write_data(0x1030); // Page 15 of SPFD5420A Datasheet
write_command(0x0006); // Display Control 1 (R007h)
write_data(0x0000); // Page 16 of SPFD5420A Datasheet
write_command(0x0008); // Display Control 2 (R008h)
write_data(0x0808); // Page 17 of SPFD5420A Datasheet
write_command(0x0009); // Display Control 3 (R009h)
write_data(0x0001); // Page 18 of SPFD5420A Datasheet
write_command(0x000B); // Low Power Control (R00Bh)
write_data(0x0010); // Page 19 of SPFD5420A Datasheet
write_command(0x000C); // External Display Interface Control 1 (R00Ch)
write_data(0x0000); // Page 19 of SPFD5420A Datasheet
write_command(0x000F); // External Display Interface Control 2 (R00Fh)
write_data(0x0000); // Page 20 of SPFD5420A Datasheet
write_command(0x0007); // Display Control 1 (R007h)
write_data(0x0001); // Page 16 of SPFD5420A Datasheet
//--------------- Panel interface control 1~6 ---------------//
write_command(0x0010); // Panel Interface Control 1 (R010h)
write_data(0x0012); // Page 20 of SPFD5420A Datasheet
write_command(0x0011); // Panel Interface Control 2 (R011h)
write_data(0x0202); // Page 21 of SPFD5420A Datasheet
write_command(0x0012); // Panel Interface control 3 (R012h)
write_data(0x0300); // Page 22 of SPFD5420A Datasheet
write_command(0x0020); // Panel Interface control 4 (R020h)
write_data(0x021E); // Page 22 of SPFD5420A Datasheet
write_command(0x0021); // Panel Interface Control 5 (021Rh)
write_data(0x0202); // Page 24 of SPFD5420A Datasheet
write_command(0x0022); // Panel Interface Control 6 (R022h)
write_data(0x0100); // Page 25 of SPFD5420A Datasheet
write_command(0x0090); // Frame Marker Control (R090h)
write_data(0x8000); // Page 25 of SPFD5420A Datasheet
//--------------- Partial display ---------------//
write_command(0x0210); // Window Horizontal RAM Address Start (R210h)
write_data(0x0000); // Page 35 of SPFD5420A Datasheet
write_command(0x0211); // Window Horziontal RAM Address End (R211h)
write_data(0x00EF); // Page 35 of SPFD5420A Datasheet
write_command(0x0212); // Window Vertical RAM Address Start (R212h)
write_data(0x0000); // Page 35 of SPFD5420A Datasheet
write_command(0x0213); // Window Vertical RAM Address End (R213h)
write_data(0x018F); // Page 35 of SPFD5420A Datasheet
write_command(0x0500); // Display Position - Partial Display 1 (R500h)
write_data(0x0000); // Page 40 of SPFD5420A Datasheet
write_command(0x0501); // RAM Address Start - Partial Display 1 (R501h)
write_data(0x0000); // Page 40 of SPFD5420A Datasheet
write_command(0x0502); // RAM Address End - Partail Display 1 (R502h)
write_data(0x0000); // Page 40 of SPFD5420A Datasheet
write_command(0x0503); // Display Position - Partial Display 2 (R503h)
write_data(0x0000); // Page 40 of SPFD5420A Datasheet
write_command(0x0504); // RAM Address Start – Partial Display 2 (R504h)
write_data(0x0000); // Page 41 of SPFD5420A Datasheet
write_command(0x0505); // RAM Address End – Partial Display 2 (R505h)
write_data(0x0000); // Page 41 of SPFD5420A Datasheet
write_command(0x0606); // Pin Control (R606h)
write_data(0x0000); // Page 41 of SPFD5420A Datasheet
write_command(0x06F0); // NVM Access Control (R6F0h)
write_data(0x0000); // Page 41 of SPFD5420A Datasheet
write_command(0x0007); // Display Control 1 (R007h)
write_data(0x0173); // Page 16 of SPFD5420A Datasheet
delay(50);
write_command(0x0007); // Display Control 1 (R007h)
write_data(0x0171); // Page 16 of SPFD5420A Datasheet
delay(10);
write_command(0x0007); // Display Control 1 (R007h)
write_data(0x0173); // Page 16 of SPFD5420A Datasheet
}
void Display_Home()
{
write_command(0x0200); // GRAM Address Set (Horizontal Address) (R200h)
write_data(0x0000); // Page 30 of SPFD5420A Datasheet
write_command(0x0201); // GRAM Address Set (Vertical Address) (R201h)
write_data(0x0000); // Page 30 of SPFD5420A Datasheet
write_command(0x0202); // Write Data to GRAM (R202h)
}
void display_rgb(unsigned int data)
{
unsigned int i,j;
for(i=0;i<400;i++)
{
for(j=0;j<240;j++)
{
write_data(data);
}
}
}
void LCD_test()
{
unsigned int i,j;
Display_Home();
for(i=0;i<240;i++)
{
__RESET_WATCHDOG();
for(j=0;j<400;j++)
{
__RESET_WATCHDOG();
if(i>209)write_data(BLACK);
else if(i>179)write_data(BLUE);
else if(i>149)write_data(RED);
else if(i>119)write_data(GREEN);
else if(i>89)write_data(CYAN);
else if(i>59)write_data(MAGENTA);
else if(i>29)write_data(YELLOW);
else write_data(WHITE);
}
}
}
void ini_port(void)
{
PTADD = 0x00; //datos
PTADD |= PTADD_PTADD1_MASK | PTADD_PTADD2_MASK | PTADD_PTADD3_MASK | PTADD_PTADD6_MASK | PTADD_PTADD7_MASK;
PTFDD = 0xFF; //dato
PTBDD = 0x00;
PTBDD |= PTBDD_PTBDD0_MASK | PTBDD_PTBDD4_MASK | PTBDD_PTBDD5_MASK;
PTCDD = 0xFF; //instruc
PTDDD = 0xFF;
PTDDD_PTDDD3 = 0;
PTDPE_PTDPE3 = 1;
}
Looking for additional LCD resources? Check out our LCD blog for the latest developments in LCD technology.