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

is not working with me?!

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
problem with flex_lcd.c
Guest







is not working with me?!
PostPosted: Sun Oct 04, 2009 8:11 am     Reply with quote

Hey
I have a problem , my LCD is not working with the flex_lcd.c driver.
I use pickit2 debug express and my pic number is 16f887A
and my lcd module is Displaytech Ltd LCD MODULE 162F BC BC.
Code:

#define LCD_DB4 PIN_B0
#define LCD_DB5 PIN_B1
#define LCD_DB6 PIN_B2
#define LCD_DB7 PIN_B3

#define LCD_E PIN_B5
#define LCD_RS PIN_B4
#define LCD_RW PIN_B6



plz hlp
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Sun Oct 04, 2009 1:32 pm     Reply with quote

Quote:

#define LCD_DB4 PIN_B0
#define LCD_DB5 PIN_B1
#define LCD_DB6 PIN_B2
#define LCD_DB7 PIN_B3

#define LCD_E PIN_B5
#define LCD_RS PIN_B4
#define LCD_RW PIN_B6

The Pickit2 uses pins B6 and B7 for Programming and Debugging.
Don't use those pins for the LCD. Choose another pin for LCD_RW.
problem with flex_lcd.c
Guest







PostPosted: Sun Oct 04, 2009 3:04 pm     Reply with quote

thanks

I have another problem.

I think my pic is burned Crying or Very sad

coz when I turn the power supply
it was 11 volts and something
and when I build the program they said

"PKWarn0003: Unexpected device ID: Please verify that a PIC16F887 is correctly installed in the application. (Expected ID = 0x2080, ID Read = 0x0)
"

Crying or Very sad

does my pic burned? Crying or Very sad Crying or Very sad Crying or Very sad
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Sun Oct 04, 2009 3:18 pm     Reply with quote

Probably. Get a new PIC.
Guest








PostPosted: Sun Oct 04, 2009 4:01 pm     Reply with quote

OOOOOOOOOOOH!!
nooo Crying or Very sad
I'm going crazy Shocked
this mean
I must waaaaaaaait for at least one or two weeks Sad
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_B0
#define LCD_DB5 PIN_B1
#define LCD_DB6 PIN_B2
#define LCD_DB7 PIN_B3

#define LCD_E PIN_B5
#define LCD_RS PIN_B4

// 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


Code:

#include <16F887.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock = 4000000)

#include "flex_lcd.c"
   
//==========================
void main()
{
lcd_init();  // Always call this first.

while(1){
   output_high(PIN_B5);
   delay_ms(1000);
   output_low(PIN_B5);


printf(lcd_putc, "Hello World.");

}


}


If I connect RW with the GND
how the connections will be?
and there is any error in my main code??
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Sun Oct 04, 2009 4:24 pm     Reply with quote

Quote:
// 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

It says what you should do. Comment out the line above.



Quote:
while(1){
output_high(PIN_B5);
delay_ms(1000);
output_low(PIN_B5);

printf(lcd_putc, "\fHello World.");

}

If you write to the LCD in a loop, then add \f in the printf to clear the
lcd screen before writing each time, as shown above in bold.
Guest








PostPosted: Tue Oct 06, 2009 3:50 am     Reply with quote

Hi,
there is any manual for understand all this staff and language you are talking about?
I mean for example "define LCD_DB4 PIN_B0"

Thanks
Ttelmah
Guest







PostPosted: Tue Oct 06, 2009 7:39 am     Reply with quote

That is not a language.

define LCD_DB4 PIN_B0
means nothing...

#define (note the '#' - syntax is _everything_), is a _macro_, in the C language, saying 'when you see the following text, replace it with the next text'.

So:

#define LCD_DB4 PIN_B0

means, when the text 'LCD_DB4' is seen, replace it with 'PIN_B0'.

The 'meaning' of 'PIN_B0', is specific to CCS, and is itself 'defined' in the include file for the processor.

The LCD controller itself, has eight 'data' lines called DB0 to DB7. Look at the datas sheet. When you use 4bit mode to talk to the LCD, only the top 4 of these are used, DB4 to DB7. The defines are saying what physical pin on the PIC is connected to what pin on the LCD, assigning 'names' to these, for the LCD driver to use.

Best Wishes
bkamen



Joined: 07 Jan 2004
Posts: 1611
Location: Central Illinois, USA

View user's profile Send private message

PostPosted: Tue Oct 06, 2009 8:44 pm     Reply with quote

Always buy 2 MCU's when experimenting. (or 3 if you're prone to burning stuff up)

Go to Borders and pick up any book on programming in C.

Personally, (more for laughs and reference) I have the original:

"The C Programming Language" from Kernighan and Ritchie.

ISBN 0-13-110362-8

Cheers,

-Ben
_________________
Dazed and confused? I don't think so. Just "plain lost" will do. :D
DeadPostPoster
Guest







Wired Wrong
PostPosted: Sun Jan 10, 2010 3:16 pm     Reply with quote

I know this post is dead, but, I wanted to point something out for anyone that stumbles across it.

The error: PKWarn0003: Unexpected device ID: Please verify that a PIC16F887 is correctly installed in the application. (Expected ID = 0x2080, ID Read = 0x0)

This error usually indicates that you wired the header circuit for your ICSP wrong.

It's worth a look!
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
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