Hi I am trying to use the CFAH2004L-TMI-JP in 4 bit mode and just display some characters on the lcd screen. I have tried to initilize the lcd driver and send A 3 times to the screen, but it doesnt seem to work. All I get is a blinking box that shifts itself 3 times to the right. Could someone look at my code and see where i might be going wrong? Thanks
Code:
#include "p30f2010.h"
#include "delay.h"
#define FCY 7372800 //XT oscillator frequency
_FOSC(CSW_FSCM_OFF & XT); //XT , Failsafe clock off
_FWDT(WDT_OFF); //Watchdog timer disabled
_FGS(CODE_PROT_OFF); //Code protect disabled
_FBORPOR(PBOR_OFF & MCLR_EN &PWRT_16); //Brown-out reset disabled, MCLR reset enabled
/* #defines of the data pins and the corresponding tris pins */
#define PIN7 PORTEbits.RE0
#define PIN6 PORTEbits.RE1
#define PIN5 PORTEbits.RE2
#define PIN4 PORTEbits.RE3
//#define PIN3 PORTEbits.RE3
//#define PIN2 PORTEbits.RE2
//#define PIN1 PORTEbits.RE1
//#define PIN0 PORTEbits.RE0
#define E PORTCbits.RC13
#define RW PORTEbits.RE4
#define RS PORTEbits.RE5
/*
#define E TRISCbits.TRISRC13
#define RW TRISDbits.TRISRE4
#define RS TRISDbits.TRISRE5
*/
void Delay200usXLCD(void);
void DelayMs(int dly);
void startup(void);
void A(void);
void DelayXLCD(void);
void space(void);
int main(void)
{
TRISE = 0x0000; // All port E,D,C as output
TRISD = 0x0000;
TRISC=0;
//servopwm();
startup();
Delay200usXLCD();
A();
A();
A();
DelayMs(9999);
return;
}
//lcd initilization as per lcd documentation
void startup(void)
{
DelayMs(200);
E=0;
Delay200usXLCD();
RS=0;
RW=0;
PIN7=0;
PIN6=0;
PIN5=1;
PIN4=1;
E=1;
Delay200usXLCD();
E=0;
DelayXLCD();
PIN7=0;
PIN6=0;
PIN5=1;
PIN4=0;
E=1;
Delay200usXLCD();
E=0;
Delay200usXLCD();
PIN7=0; //N
PIN6=0; //F
PIN5=0;
PIN4=0;
E=1;
Delay200usXLCD();
E=0;
DelayXLCD();
PIN7=0;
PIN6=0;
PIN5=1;
PIN4=0;
E=1;
Delay200usXLCD();
E=0;
Delay200usXLCD();
PIN7=0; //N
PIN6=0; //F
PIN5=0;
PIN4=0;
E=1;
Delay200usXLCD();
E=0;
DelayXLCD();
PIN7=0;
PIN6=0;
PIN5=0;
PIN4=0;
Delay200usXLCD();
E=1;
Delay200usXLCD();
E=0;
PIN7=1;
PIN6=1; //D
PIN5=0; //C
PIN4=0; //B
E=1;
Delay200usXLCD();
E=0;
DelayXLCD();
PIN7=0;
PIN6=0;
PIN5=0;
PIN4=0;
E=1;
Delay200usXLCD();
E=0;
PIN7=0;
PIN6=0;
PIN5=0;
PIN4=1;
E=1;
Delay200usXLCD();
E=0;
DelayMs(5);
PIN7=0;
PIN6=0;
PIN5=0;
PIN4=0;
E=1;
Delay200usXLCD();
E=0;
PIN7=0;
PIN6=1;
PIN5=0;
PIN4=0;
E=1;
Delay200usXLCD();
E=0;
DelayMs(50);
}
void A(void) // A = binary 0100 0001
{
E=0;
RS=1;
RW=0;
Delay200usXLCD();
PIN7=0;
PIN6=0;
PIN5=1;
PIN4=0;
E=1;
Delay200usXLCD();
Delay200usXLCD();
E=0;
PIN7=0;
PIN6=1;
PIN5=0;
PIN4=0;
E=1;
Delay200usXLCD();
E=0;
}
void DelayMs(int dly)
{
unsigned int x;
while(dly >0)
{
x=5000;
while(--x)continue;
dly--;
}
}
void Delay200usXLCD(void) /* provides delay for 200uS */
{
int i;
for(i=0;i<72;i++)
asm("clrwdt");
}
void DelayXLCD(void) /* provides delay for atleast 5msec */
{
int i;
for(i=0;i<1800;i++)
asm("clrwdt");
}
Looking for additional LCD resources? Check out our LCD blog for the latest developments in LCD technology.