|
|
View previous topic :: View next topic |
Author |
Message |
Krazzy7434
Joined: 21 Aug 2014 Posts: 39 Location: India
|
PIC18F4550 LCD Interfacing. |
Posted: Wed Sep 24, 2014 12:37 pm |
|
|
Hello Guys.....
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........ _________________ Krazzy7434 |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed Sep 24, 2014 12:56 pm |
|
|
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
|
|
Posted: Thu Sep 25, 2014 12:06 am |
|
|
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
|
|
Posted: Thu Sep 25, 2014 12:23 am |
|
|
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
|
|
Posted: Thu Sep 25, 2014 12:55 am |
|
|
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
|
|
Posted: Thu Sep 25, 2014 1:08 am |
|
|
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
|
|
Posted: Thu Sep 25, 2014 2:31 am |
|
|
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: 19520
|
|
Posted: Thu Sep 25, 2014 3:06 am |
|
|
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
|
|
Posted: Thu Sep 25, 2014 3:19 am |
|
|
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: 9229 Location: Greensville,Ontario
|
|
Posted: Thu Sep 25, 2014 7:07 am |
|
|
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
|
|
Posted: Thu Sep 25, 2014 7:39 am |
|
|
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
|
|
Posted: Thu Sep 25, 2014 11:32 am |
|
|
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
|
|
Posted: Thu Sep 25, 2014 1:17 pm |
|
|
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
|
|
|
Krazzy7434
Joined: 21 Aug 2014 Posts: 39 Location: India
|
|
Posted: Mon Oct 06, 2014 7:07 am |
|
|
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 |
|
|
|
|
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
|