Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronic Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Register Log in

[PIC] LCD(16x4) Interfacing Problem with PIC18F4550

Status
Not open for further replies.

SAMO6

Newbie level 5
Joined
Nov 14, 2016
Messages
10
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Activity points
139
Hello Everyone,

I am trying to interface 16x4 LCD with PIC18F4550.The simulation in proteus is working fine.But,I am not able to display any characters on LCD (Hardware).
I am getting only Black boxes on LCD screen, and one more thing only two lines are showing black boxes.Other two lines are showing nothing.Please find the attached images, So that you will understand my problem well.
I am using 16x4 LCD JHD539M8. I searched a lot for datasheet of this LCD.If you have datasheet of this LCD, then please send it to me.
I am using:
PIC18F4550,20Mhz Crystal Oscillator, LCD is interfaced using 8 bit mode.


Code C - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include<P18F4550.h>
#define RS PORTCbits.RC0
#define En PORTCbits.RC1
// LCD functions
void delay(unsigned int itime)
{
    unsigned int i,j;
    for(i=0;i<itime;i++)
        for(j=0;j<165;j++);
}
// LCD Functions
void lcdcmd(unsigned char value)
{
    PORTB=value;
    RS=0;   //Select command register
   // delay();
    En=1;           // High to Low pulse on Enable pin of LCD
    delay(250);
    En=0;
}
void lcddata(unsigned char value)
{
    PORTB=value;
    RS=1;//Select data register
   // delay();
    En=1;           // High to Low pulse on Enable pin of LCD
   delay(250);
    En=0;
 
}
 
 
void lcdinit()
{
     lcdcmd(0x38);  //Call Command subroutine (value=0x38)
  delay(250);
    lcdcmd(0x0E);
  delay(250);
    lcdcmd(0x01);
    //delay();
   // lcdcmd(0x06);
   // delay();
 
}
 
void stringlcd(const char * s)
{
            while(*s)
            lcddata(*s++);
}
void main()
{
    TRISB = 0x00;                           //Configure Data bus
 
    TRISCbits.TRISC0 = 0;                   // Configure RC0 as RS
    TRISCbits.TRISC1 = 0;                   // Configure RC1 as EN
 
    lcdinit();
    delay(250);
    lcdcmd(0x80);
    delay(250);
    stringlcd("Hello World");
    delay(250);
    lcdcmd(0xC0);
    delay(250);
    stringlcd("Good Morning");
    lcdcmd(0x90);
    stringlcd("SAMO");
    lcdcmd(0xD0);
    stringlcd("Systems");
    
}



I tried a lot. I also tried pull up resistors of 10K.But, still nothing is working.
Please help.
I have attached my code,proteus simulation model picture, hardware pictures with this post.
Thank you.IMG_20170416_160858.jpgIMG_20170416_160906.jpgIMG_20170416_160914.jpgIMG_20170416_161055.jpgIMG_20170416_161123.jpgIMG_20170416_173252.jpg
 
Last edited by a moderator:

Okada

Banned
Joined
Jun 16, 2016
Messages
1,159
Helped
128
Reputation
252
Reaction score
126
Trophy points
63
Activity points
0
For PIC18F devices you should use LATx registers for output ports.
 

SAMO6

Newbie level 5
Joined
Nov 14, 2016
Messages
10
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Activity points
139
Thanks for replying to my query.
But, when I tested simple LED blinking program on the same breadboard, one thing I found in my breadboard circuit is that there is some problem with crystal,Because, when I touched that crystal, LED started blinking and as soon as I released that crystal, LED stopped blinking, and when it stopped it was either in ON state(Glowing,that is not blinking) or in OFF state.
So, I think there might be some problem with crystal. But, I tried different crystals as well and also tried circuit with crystal mounted on zero pcb to detect if there is any issue with breadboard or not.
But,in zero pcb case also, I required to press or touch the crystal to make LED start blinking.

Though,This post might not be relevant to this LCD thread but, I think, I need to solve this to get things running.

So, Please suggest me on this problem.If you know any solution regarding this,please tell me.
 

Okada

Banned
Joined
Jun 16, 2016
Messages
1,159
Helped
128
Reputation
252
Reaction score
126
Trophy points
63
Activity points
0
I don't know about crystal problem. If you are using 20MHz crystal then it might not work properly on breadboard.
 

paulfjujo

Advanced Member level 4
Joined
Jun 9, 2008
Messages
1,411
Helped
284
Reputation
568
Reaction score
271
Trophy points
1,363
Location
France 01800
Activity points
9,872
hello,

You are using long wire with your breadboards... and no capacitors accross power supply lines ( green and blue wiring)
so add 100nF accross 100µF , next to the MCU power supply rails..

what is the VCC voltage value ?
what configuration bits ?
what are the 2 capacitors values beside Quartz pins ?

i tested many prototype application on breadbord without Problem with a 20MHz quartz .. even it is not recommended.
 
  • Like
Reactions: SAMO6

    SAMO6

    points: 2
    Helpful Answer Positive Rating

SAMO6

Newbie level 5
Joined
Nov 14, 2016
Messages
10
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Activity points
139
Input supply: Vdd=5V, Input current=18mA. Is it ok?

Configuration bits:
MCLR=Enable
FOSC=HS
BOR=ON
LVP=OFF
ICPRT=OFF

Capacitors beside Quartz crystal are of 20pF.
 

Aussie Susan

Advanced Member level 4
Joined
Jan 5, 2015
Messages
1,209
Helped
372
Reputation
744
Reaction score
367
Trophy points
83
Activity points
13,130
That display is typical of when the LCD is powered on but not initialised. Timing is critical in initialising these devices and I suggest that you don't use your own 'delay' function - the compiler will almost certainty provide one and you should use that. Better still, use a timer.
Of course, any delay function will require that the oscillator is working correctly and we can't see anything about how you have set that up.
Also, Okada is correct that you should use the LAT registers and not the PORT as you could well be experiencing the RMW problem and that will also prevent the initialisation from completing.
And that initialisation function seems to be much too short but I don't have the documentation in front of me.
Susan
 
  • Like
Reactions: SAMO6

    SAMO6

    points: 2
    Helpful Answer Positive Rating
Status
Not open for further replies.
Toggle Sidebar

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Top