Problem with running a xlcd display code on dsPIC30F4011

Status
Not open for further replies.

Sm.r.Tadayoni

Junior Member level 1
Joined
Jul 28, 2010
Messages
15
Helped
1
Reputation
2
Reaction score
1
Trophy points
1,283
Activity points
1,439
Hi Every body.
I have a problem to Run(Display Character on LCD) my Code of xlcd (2x16) on dsPIC30f4011. i think my delay time is wrong but i dont know what is the Correct. can Somebody help me ?
My Code:
______________________________________________________________

#include <p30f4011.h>

#define F_OSC 10000000
#define PLL 8

#define DataPort PORTB
#define TRIS_DataPort TRISB

#define RS PORTEbits.RE0
#define RW PORTEbits.RE1
#define Enable PORTEbits.RE2
#define TRIS_RS TRISEbits.TRISE0
#define TRIS_RW TRISEbits.TRISE1
#define TRIS_Enable TRISEbits.TRISE2

#define Display_Clear 0b0000001
#define Return_Home 0b0000010
#define Dont_Shift 0b0000100
#define Right_Shift 0b0000111
#define Left_Shift 0b0000101
#define Display_on 0b0001110
#define Shift_Display_Left 0b0011100
#define Shift_Display_Right 0b0011000
#define Display_Dont_Shift 0b0000110
#define Set_Function_8Bits_2Lines_5x10 0b0111100
#define Set_Function_4Bits_2Lines_5x10 0b0101100


void delay5ms(void);
void delay15ms(void);
void delay200us(void);
void delay600ns(void);
void delay18TCY(void);
void Write_Cmd_LCD(unsigned char c);
void Write_Data_LCD(unsigned char c);
char Busy_Check(void);
void Open_LCD(void);
void SetDDRAM(void);
void Init_Program(void);
void Init_LCD(void);

void delay5ms(void)
{ unsigned long int i, x;
x = ((5 * 0.001)*(F_OSC*PLL))/4;
for (i=1;i<=x;i++);
}

void delay15ms(void)
{ unsigned long int i, x;
x = ((15 * 0.001)*(F_OSC*PLL))/4;
for (i=1;i<=x;i++);
}

void delay200us(void)
{ unsigned long int i, x;
x = ((0.0002)*(F_OSC*PLL))/4;
for (i=1;i<=x;i++);
}

void delay600ns(void)
{ unsigned long int i, x;
x = ((0.0000006)*(F_OSC*PLL))/4;
for (i=1;i<=x;i++);
}

void delay40us(void)
{ unsigned long int i, x;
x = ((0.0004)*(F_OSC*PLL))/4;
for (i=1;i<=x;i++);
}


void delay18TCY(void)
{
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
}

void Write_Cmd_LCD(unsigned char c)
{
RS = 0;
RW = 0;

delay18TCY();
Enable = 1;

DataPort = c;

delay18TCY();
Enable = 0;
delay18TCY();
}

void Write_Data_LCD(unsigned char c)
{
RS = 1;
RW = 0;
TRIS_DataPort = 0x00;
// delay18TCY();

// delay18TCY();

DataPort = c;

Enable = 1;
delay18TCY();
Enable = 0;

TRIS_DataPort = 0xFF;
RS = 0;
while(Busy_Check);
delay200us();
delay200us();

}

char Busy_Check(void)
{
TRIS_DataPort = 0xFF;

RW = 1;
RS = 0;
delay18TCY();
Enable = 1;
delay18TCY();

if (PORTBbits.RB7)
{
Enable = 0;
delay600ns();
return 1;
}
else
{
Enable = 0;
delay600ns();
return 0;
}
}
void Open_LCD(void)
{
delay15ms();

DataPort = 0x00;

RS = 0;
RW = 0;
Enable = 0;

TRIS_DataPort = 0x00;

TRIS_RS = 0;
TRIS_RW = 0;
TRIS_Enable = 0;

DataPort = 0x3C; // Function Set;
delay40us();
DataPort = 0x0F; // Display On;
delay40us();
DataPort = 0x01; // Clear Displaying
delay40us();
DataPort = 0x06; // Entry Mode;
delay15ms();

/* delay18TCY();
Enable = 0;
delay18TCY();
/**/
}
void SetDDRAM(void)
{
TRIS_DataPort = 0x00;

RS = 0;
RW = 0;

DataPort = 0x80;

Enable = 1;
delay18TCY();
Enable = 0;
delay200us();
}

void Init_Program(void)
{ //TRIS_DataPort = 0x00;

TRISB = TRISE = 0x00;
PORTB = PORTE = 0x00;

delay15ms();
DataPort = 0x3C; // Function Set;
delay5ms();
DataPort = 0x3C; // Function Set;
delay200us();
DataPort = 0x3C. // Function Set;

}

void Init_LCD(void)
{

Open_LCD();
while(Busy_Check() == 1 );
Write_Cmd_LCD(0x18);
while(Busy_Check() == 1 );
SetDDRAM();
while(Busy_Check()==1);
Write_Data_LCD('A');
while( Busy_Check() == 1 );

}

void main()
{
Init_Program();
Init_LCD();
}
_________________________________________________________________
Exactly i need your Helping.
Thanks Alot.
 

Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…