Need Help doing C Language Programming for PIC18F4520 MPLAB lCD 3

Status
Not open for further replies.
could you please double check the connections from uC to LCD. Ensure with the multimeter if you have.
LCD enable pin to microcontroller Pin 6 of PORT D
LCD RS pin to microcontroller Pin 4 of PORT D
LCD R/W pin to microcontroller Pin 5 of PORT D
 

use this line
HTML:
#pragma config OSC = LP

instead of
HTML:
#pragma config OSC = HS
 

whats the difference between the two? changed but still the same..
 

read datasheet page no. 26 .
For 32Khz, fuses should be LP. for greater than 4MHZ crystal, it should be HS
 

but it still doesnt display anything,
 

I'm aware of programming in ccs c compiler. but still couldn't find the solution in your case for c18 compiler.

follow the link, and post the code in this forum for c18 compiler
https://www.microchip.com/forums/

someone can help you.
I too will try to solve the problem.
 

i post it there already. thanks for the help.
 

What's Proteus?.I'm not using Proteus
 

Proteus is a simulation software. you can test the circuit without building the hardware. It consists of all components, you have to load the components and connect it. import the hex file to microcontroller and run the simulation. If it works, some problem with your hardware.

It is very useful software. make use of it.
 

Oh. Too bad i can use the software, my lab technician won't help me install de....
 

can you search and post the driver "lcd.c" from the c18 installation folder. i think you can find it in the drivers folder. so that, i can try to change the code to your use.
 



Here is the file
 

i found this code at online. Please compile and tell it is working or not.
HTML:
#include<p18f4520.h>
#include<delays.h>

#pragma config FOSC = LP

#pragma config WDT = OFF

#pragma config PWRT = OFF

#pragma config CP0 = OFF

#pragma config PBADEN = OFF

//LCD Control pins
#define en LATDbits.LATD6
#define rw LATDbits.LATD5
#define rs LATDbits.LATD4

//LCD Data pins
#define lcdport LATB


void dis_cmd(unsigned char);
void dis_data(unsigned char);
void lcdcmd(unsigned char);
void lcddata(unsigned char);
void lcd_ini(void);

void main(void)
{
	unsigned char data0[]="Hello";
	unsigned int i=0;
	rw = 0;
	TRISB=0;			// Configure Port B as output port
	LATB=0;
	TRISD = 0;
	LATD = 0;
	Delay10KTCYx(50);	//Delay_ms(100);
	lcd_ini();			// LCD initialization
	while(data0[i]!='\0')
	{
		dis_data(data0[i]);
		Delay10KTCYx(400);		//Delay_ms(800);
		i++;
	}
}
void lcd_ini()	                    
{
	Delay10KTCYx(10);	//Delay_ms(20)
	lcd_cmd(0x30);
	Delay10KTCYx(5);	//Delay_ms(10)
	lcd_cmd(0x30);
	Delay1KTCYx(1);		//Delay_us(200)
	lcd_cmd(0x30);

	lcd_cmd(0x20);           //Function set

	dis_cmd(0x28);		// To initialize LCD in 2 lines, 5x7 dots and 4bit mode.
	dis_cmd(0x0C);
	dis_cmd(0x06);
}

void dis_cmd(unsigned char cmd_value)
{
	unsigned char cmd_value1;
	cmd_value1 = (cmd_value & 0xF0);	// Mask lower nibble because RB4-RB7 pins are being used
	lcdcmd(cmd_value1);			// Send to LCD
	cmd_value1 = ((cmd_value<<4) & 0xF0);	// Shift 4-bit and mask
	lcdcmd(cmd_value1);			// Send to LCD
}


void dis_data(unsigned char data_value)
{
	unsigned char data_value1;
	data_value1=(data_value&0xF0);
	lcddata(data_value1);
	data_value1=((data_value<<4)&0xF0);
	lcddata(data_value1);
}

void lcdcmd(unsigned char cmdout)
{
	lcdport=cmdout;		//Send command to lcdport=PORTB
	rs=0;						
	rw=0;
	en=1;
	Delay10KTCYx(1);	//small delay
	en=0;
	Delay10KTCYx(25);	//Delay_ms(50);
}

void lcddata(unsigned char dataout)
{
	lcdport=dataout;	//Send data to lcdport=PORTB
	rs=1;
	rw=0;
	en=1;
	Delay10KTCYx(1);	//small delay
	en=0;
	Delay10KTCYx(25);	//Delay_ms(50);
}
 

The FOSC is the frequency right ?

- - - Updated - - -

got this from debugging
 

add this line before lcd control pins line, and compile
HTML:
#define _XTAL_FREQ 32000

Best wishes
 

Error - could not find definition of symbol 'lcd_cmd' in file './Test.o'.


Now this error
 

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…