CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to support@ccsinfo.com

PIC18F4550 LCD Interfacing.
Goto page 1, 2  Next
 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
Krazzy7434



Joined: 21 Aug 2014
Posts: 39
Location: India

View user's profile Send private message

PIC18F4550 LCD Interfacing.
PostPosted: Wed Sep 24, 2014 12:37 pm     Reply with quote

Hello Guys..... Very Happy

I was trying to interface a 16x2 lcd with a pic18f4550. There is no problem with my lcd connection...

Here my code...

Code:


include<18F4550.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOBROWNOUT
#use delay(clock=48000000)
#include<flex_lcd216.c>

void main()
{   
    delay_ms(500);
    lcd_init();
    delay_ms(500);
    for(;;)
     {
    lcd_gotoxy(1,1);
    delay_ms(100);
    lcd_putc("HI SWEETY ");
    delay_ms(1000);
    lcd_gotoxy(2,2);
    delay_ms(100);
    printf(lcd_putc,"HELLO SWEETY");
    delay_ms(1000);
    output_high(PIN_B0);
    delay_ms(100);
    output_low(PIN_B0);
    delay_ms(100);
  }
   
}



It compile without error..but when run on a real hardware the lcd displays everything in a improper way with unreadable characters..
It shows something like "SWEHI **HESW***" (*----->Characters not in my keyboard)
I think This is due to the clock delay i m using( also my board consist of a inbuilt 16Mhz Crystal)

ACTUALLY I dont know how to set the clock correctly....Plz help me guys....

Thank YOU........ Very Happy
_________________
Krazzy7434
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Wed Sep 24, 2014 12:56 pm     Reply with quote

For a 16 MHz crystal, you can use this setup:
Code:
#include <18F4550.h>
#fuses HS, NOWDT, PUT, BROWNOUT, CPUDIV1
#use delay(clock=16M)
Krazzy7434



Joined: 21 Aug 2014
Posts: 39
Location: India

View user's profile Send private message

PostPosted: Thu Sep 25, 2014 12:06 am     Reply with quote

PCM programmer wrote:
For a 16 MHz crystal, you can use this setup:
Code:
#include <18F4550.h>
#fuses HS, NOWDT, PUT, BROWNOUT, CPUDIV1
#use delay(clock=16M)


Hello PCM Programmer
Thanks for the Reply...

I did what u have said...this is my new code

Code:


#include <18F4550.h>
#fuses HS, NOWDT, PUT, BROWNOUT, CPUDIV1
#use delay(clock=16M)
#include<flex_lcd216.c>

void main()
{   
    delay_ms(500);
    lcd_init();
    delay_ms(500);
    for(;;)
     {
    lcd_gotoxy(1,1);
    delay_ms(100);
    lcd_putc("HI SWEETY ");
    delay_ms(1000);
    lcd_gotoxy(2,2);
    delay_ms(100);
    printf(lcd_putc,"HELLO SWEETY");
    delay_ms(1000);
    output_high(PIN_B0);
    delay_ms(100);
    output_low(PIN_B0);
    delay_ms(100);
  }
   
}



Now my lcd is blank, it shows nothing.....
do u think this is the problem with the clock...My lcd connections are perfect...

Plz Help...

Thank You........
_________________
Krazzy7434
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Thu Sep 25, 2014 12:23 am     Reply with quote

Did you buy your board ? If so, post the name or model number of the
board, and post a link to the website for it.

Did you build your board by yourself ? If so, post the schematic on a
free image hosting website and post a link to it here.
Krazzy7434



Joined: 21 Aug 2014
Posts: 39
Location: India

View user's profile Send private message

PostPosted: Thu Sep 25, 2014 12:55 am     Reply with quote

PCM programmer wrote:
Did you buy your board ? If so, post the name or model number of the
board, and post a link to the website for it.

Did you build your board by yourself ? If so, post the schematic on a
free image hosting website and post a link to it here.


The board i have ,brought from a electronic store....It does not have any model no or something like that...but it looks very smiliar to one in this link.....

[url]

http://www.ebay.com/itm/STC89C52-New-51-Mini-System-Microcontroller-Development-Board-Learning-Board-DIY-/390876289119

[/url]

Thank you....
_________________
Krazzy7434
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Thu Sep 25, 2014 1:08 am     Reply with quote

That board is not for Microchip PIC chips. It's for an 89C52 which is a
different processor and it's not pin compatible with 40-pin PICs.
You said your board looks "similar" this one. Are you sure the board you
bought is for Microchip PICs ?

Unless you can provide more information, there's no way for me to
verify if your board will work. I don't think I can help you much more.
Krazzy7434



Joined: 21 Aug 2014
Posts: 39
Location: India

View user's profile Send private message

PostPosted: Thu Sep 25, 2014 2:31 am     Reply with quote

PCM programmer wrote:
That board is not for Microchip PIC chips. It's for an 89C52 which is a
different processor and it's not pin compatible with 40-pin PICs.
You said your board looks "similar" this one. Are you sure the board you
bought is for Microchip PICs ?

Unless you can provide more information, there's no way for me to
verify if your board will work. I don't think I can help you much more.


I use the word "similar" because both my board and board in the link have similar component and exactly same size....

My board is 40 pin Pic Board...i have been using it for last 2 weeks..
i have used a led blink program, which worked with all the pin i have used...
i m 200% sure that i m using correct board...

Thank u.....
_________________
Krazzy7434
Ttelmah



Joined: 11 Mar 2010
Posts: 19378

View user's profile Send private message

PostPosted: Thu Sep 25, 2014 3:06 am     Reply with quote

I think you need to learn that 'similar', is no use at all in electronics.

It's a bit like saying a pack of playing cards, and a packet of cigarettes are similar. After all they both contain bits of mashed up plant matter, in a card case, and are the same size....

Detail is _everything_ in electronics. Two boards that appear absolutely identical, with the only difference being a 'version number', may require completely different drivers.
Krazzy7434



Joined: 21 Aug 2014
Posts: 39
Location: India

View user's profile Send private message

PostPosted: Thu Sep 25, 2014 3:19 am     Reply with quote

Ttelmah wrote:
I think you need to learn that 'similar', is no use at all in electronics.

It's a bit like saying a pack of playing cards, and a packet of [spam] are similar. After all they both contain bits of mashed up plant matter, in a card case, and are the same size....

Detail is _everything_ in electronics. Two boards that appear absolutely identical, with the only difference being a 'version number', may require completely different drivers.


Thanks for the reply Ttelmah...
extremely sorry for not knowing about the board...
But my board has no version number...It is just a board for holding the pic..IT consist of vertical pins for all ports, a 16 MHz crystal, power supply through a regulator and a female DB9 Connector.

Thank You........
_________________
Krazzy7434
temtronic



Joined: 01 Jul 2010
Posts: 9177
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Thu Sep 25, 2014 7:07 am     Reply with quote

If you can, post a picture of it, both top and bottom sides. It'll really help in figuring out WHAT board you have and make debugging a LOT easier !!

jay
Krazzy7434



Joined: 21 Aug 2014
Posts: 39
Location: India

View user's profile Send private message

PostPosted: Thu Sep 25, 2014 7:39 am     Reply with quote

temtronic wrote:
If you can, post a picture of it, both top and bottom sides. It'll really help in figuring out WHAT board you have and make debugging a LOT easier !!

jay


This is the picture...sorry for its low quality.....But no version number is mentioned anywhere in this board..............





Thank You.......


[/img]
_________________
Krazzy7434
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Thu Sep 25, 2014 11:32 am     Reply with quote

The photo is out of focus and mirrored left to right, but its name is
PIC DEV BRD (board).


Quote:
There is no problem with my lcd connection...
My lcd connections are perfect...

I don't see any jumper wires between the i/o port pins on the board
and an lcd. I don't see any connections.

Post a sharp, in-focus photo of the PIC board and the LCD, which clearly
shows the connections between them.

Also post the list of #define statements for the Flex lcd driver. This would
be a total of 8 #define statements - 7 for the pins and one more for the
use (or not) of the RW line.
Krazzy7434



Joined: 21 Aug 2014
Posts: 39
Location: India

View user's profile Send private message

PostPosted: Thu Sep 25, 2014 1:17 pm     Reply with quote

PCM programmer wrote:
The photo is out of focus and mirrored left to right, but its name is
PIC DEV BRD (board).


Quote:
There is no problem with my lcd connection...
My lcd connections are perfect...

I don't see any jumper wires between the i/o port pins on the board
and an lcd. I don't see any connections.

Post a sharp, in-focus photo of the PIC board and the LCD, which clearly
shows the connections between them.

Also post the list of #define statements for the Flex lcd driver. This would
be a total of 8 #define statements - 7 for the pins and one more for the
use (or not) of the RW line.


This is the #define i have been using::

Code:

#define LCD_DB4   PIN_D4
#define LCD_DB5   PIN_D5
#define LCD_DB6   PIN_D6
#define LCD_DB7   PIN_D7

#define LCD_E     PIN_D0
#define LCD_RS    PIN_D1
#define LCD_RW    PIN_D2

// If you only want a 6-pin interface to your LCD, then
// connect the R/W pin on the LCD to ground, and comment
// out the following line.

#define USE_LCD_RW   1




Also This is my Flex_lcd driver i m using::

Code:

// flex_lcd.c

// These pins are for the Microchip PicDem2-Plus board,
// which is what I used to test the driver.  Change these
// pins to fit your own board.

#define LCD_DB4   PIN_D4
#define LCD_DB5   PIN_D5
#define LCD_DB6   PIN_D6
#define LCD_DB7   PIN_D7

#define LCD_E     PIN_D0
#define LCD_RS    PIN_D1
#define LCD_RW    PIN_D2

// If you only want a 6-pin interface to your LCD, then
// connect the R/W pin on the LCD to ground, and comment
// out the following line.

#define USE_LCD_RW   1     

//========================================

#define lcd_type 2        // 0=5x7, 1=5x10, 2=2 lines
#define lcd_line_two 0x40 // LCD RAM address for the 2nd line


int8 const LCD_INIT_STRING[4] =
{
 0x20 | (lcd_type << 2), // Func set: 4-bit, 2 lines, 5x8 dots
 0xc,                    // Display on
 1,                      // Clear display
 6                       // Increment cursor
 };


//-------------------------------------
void lcd_send_nibble(int8 nibble)
{
// Note:  !! converts an integer expression
// to a boolean (1 or 0).
 output_bit(LCD_DB4, !!(nibble & 1));
 output_bit(LCD_DB5, !!(nibble & 2));
 output_bit(LCD_DB6, !!(nibble & 4));   
 output_bit(LCD_DB7, !!(nibble & 8));   

 delay_cycles(1);
 output_high(LCD_E);
 delay_us(2);
 output_low(LCD_E);
}

//-----------------------------------
// This sub-routine is only called by lcd_read_byte().
// It's not a stand-alone routine.  For example, the
// R/W signal is set high by lcd_read_byte() before
// this routine is called.     

#ifdef USE_LCD_RW
int8 lcd_read_nibble(void)
{
int8 retval;
// Create bit variables so that we can easily set
// individual bits in the retval variable.
#bit retval_0 = retval.0
#bit retval_1 = retval.1
#bit retval_2 = retval.2
#bit retval_3 = retval.3

retval = 0;

output_high(LCD_E);
delay_cycles(1);

retval_0 = input(LCD_DB4);
retval_1 = input(LCD_DB5);
retval_2 = input(LCD_DB6);
retval_3 = input(LCD_DB7);

output_low(LCD_E);

return(retval);   
}   
#endif

//---------------------------------------
// Read a byte from the LCD and return it.

#ifdef USE_LCD_RW
int8 lcd_read_byte(void)
{
int8 low;
int8 high;

output_high(LCD_RW);
delay_cycles(1);

high = lcd_read_nibble();

low = lcd_read_nibble();

return( (high<<4) | low);
}
#endif

//----------------------------------------
// Send a byte to the LCD.
void lcd_send_byte(int8 address, int8 n)
{
output_low(LCD_RS);

#ifdef USE_LCD_RW
while(bit_test(lcd_read_byte(),7)) ;
#else
delay_us(60);
#endif

if(address)
   output_high(LCD_RS);
else
   output_low(LCD_RS);

 delay_cycles(1);

#ifdef USE_LCD_RW
output_low(LCD_RW);
delay_cycles(1);
#endif

output_low(LCD_E);

lcd_send_nibble(n >> 4);
lcd_send_nibble(n & 0xf);
}

//----------------------------
void lcd_init(void)
{
int8 i;

output_low(LCD_RS);

#ifdef USE_LCD_RW
output_low(LCD_RW);
#endif

output_low(LCD_E);

delay_ms(15);

for(i=0 ;i < 3; i++)
   {
    lcd_send_nibble(0x03);
    delay_ms(5);
   }

lcd_send_nibble(0x02);

for(i=0; i < sizeof(LCD_INIT_STRING); i++)
   {
    lcd_send_byte(0, LCD_INIT_STRING[i]);

    // If the R/W signal is not used, then
    // the busy bit can't be polled.  One of
    // the init commands takes longer than
    // the hard-coded delay of 60 us, so in
    // that case, lets just do a 5 ms delay
    // after all four of them.
    #ifndef USE_LCD_RW
    delay_ms(5);
    #endif
   }

}

//----------------------------

void lcd_gotoxy(int8 x, int8 y)
{
int8 address;

if(y != 1)
   address = lcd_line_two;
else
   address=0;

address += x-1;
lcd_send_byte(0, 0x80 | address);
}

//-----------------------------
void lcd_putc(char c)
{
 switch(c)
   {
    case '\f':
      lcd_send_byte(0,1);
      delay_ms(2);
      break;

    case '\n':
       lcd_gotoxy(1,2);
       break;

    case '\b':
       lcd_send_byte(0,0x10);
       break;

    default:
       lcd_send_byte(1,c);
       break;
   }
}

//------------------------------
#ifdef USE_LCD_RW
char lcd_getc(int8 x, int8 y)
{
char value;

lcd_gotoxy(x,y);

// Wait until busy flag is low.
while(bit_test(lcd_read_byte(),7));

output_high(LCD_RS);
value = lcd_read_byte();
output_low(lcd_RS);

return(value);
}
#endif



I think i have some problem with Flex_lcd....I m using a JHD162A LCD.
I removed the jumper wires to take the pic...Sorry for that..
Could u please tell me whether the flex_lcd driver i was is compatible with JHD162A..

Thank You....
_________________
Krazzy7434
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Thu Sep 25, 2014 1:27 pm     Reply with quote

It's compatible:
http://www.ccsinfo.com/forum/viewtopic.php?t=51390&highlight=jhd162a
It should work OK:
http://www.ccsinfo.com/forum/viewtopic.php?t=47569&highlight=jhd162a

This schematic shows the required connections between the PIC and the
LCD.
http://1.bp.blogspot.com/-ZECbofY4cLo/TqZNoBPOpWI/AAAAAAAAAMU/RR9Xcpwk_NY/s1600/pic_y_lcd.jpg
One exception:
He has pins D0-D3 connected to ground on the LCD. You don't need
that. The LCD has internal pull-ups on those pins, and they should be
left un-connected. It will work fine.

His schematic doesn't show all the PIC's external circuits, such as the
crystal, capacitors, MCLR resistor, Vdd/Vss. But don't worry about that
because your board has those built-in to it.
Krazzy7434



Joined: 21 Aug 2014
Posts: 39
Location: India

View user's profile Send private message

PostPosted: Mon Oct 06, 2014 7:07 am     Reply with quote

PCM programmer wrote:
It's compatible:
http://www.ccsinfo.com/forum/viewtopic.php?t=51390&highlight=jhd162a
It should work OK:
http://www.ccsinfo.com/forum/viewtopic.php?t=47569&highlight=jhd162a

This schematic shows the required connections between the PIC and the
LCD.
http://1.bp.blogspot.com/-ZECbofY4cLo/TqZNoBPOpWI/AAAAAAAAAMU/RR9Xcpwk_NY/s1600/pic_y_lcd.jpg
One exception:
He has pins D0-D3 connected to ground on the LCD. You don't need
that. The LCD has internal pull-ups on those pins, and they should be
left un-connected. It will work fine.

His schematic doesn't show all the PIC's external circuits, such as the
crystal, capacitors, MCLR resistor, Vdd/Vss. But don't worry about that
because your board has those built-in to it.


Hello PCM Programmer ....Sorry for the late reply...
Finally i found the problem....Actually my Lcd was damaged...i replace it with a new one it working fine now.

Thank You very much.......
_________________
Krazzy7434
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group