View previous topic :: View next topic |
Author |
Message |
Ringo42
Joined: 07 May 2004 Posts: 263
|
flexlcd issue |
Posted: Thu Apr 30, 2009 5:41 pm |
|
|
I'm trying to use flex_lcd.c
I modified it to match my pinout
Code: | #define LCD_DB4 PIN_C1
#define LCD_DB5 PIN_D1
#define LCD_DB6 PIN_C2
#define LCD_DB7 PIN_C0
#define LCD_E PIN_D0
#define LCD_RS PIN_C5
#define LCD_RW PIN_D2 |
Then in my main program I have
Code: |
Printf("Starting up\r\n");
lcd_init(); // Always call this first.
Printf("LCD started\r\n");
|
I get the first print statement, but not the 2nd. The pic is just locked up. I looked at lcd_init and don't see where it could be waiting on anything.
Any thoughts on what would make this hang?
Code: |
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]);
#ifndef USE_LCD_RW
delay_ms(5);
#endif
}
|
_________________ Ringo Davis |
|
|
Ringo42
Joined: 07 May 2004 Posts: 263
|
|
Posted: Thu Apr 30, 2009 5:50 pm |
|
|
oh yeah, It is an 18f4550 and pch 4.086 _________________ Ringo Davis |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Thu Apr 30, 2009 5:57 pm |
|
|
What about this line ? Is it uncommented ? It should look like this:
Code: | #define USE_RW_PIN 1 |
In other words, it's in effect.
Also, post the manufacturer and part number of your LCD. |
|
|
Ringo42
Joined: 07 May 2004 Posts: 263
|
|
Posted: Thu Apr 30, 2009 6:07 pm |
|
|
yes it is uncommented. I have it wired up.
I just commented it out and it no longer hangs, but I'm getting nothing from the LCD.
THe LCD does not have a part number, but it has the standard HD4780 chip on it and a 16 pin header. _________________ Ringo Davis |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Thu Apr 30, 2009 6:14 pm |
|
|
If it doesn't hang when that line is commented, it means there's a
problem with reading the Busy bit, or just in reading the LCD.
Try this:
Comment that line, and tie the R/W pin on the LCD to ground.
That pin should not be connected to the PIC anymore.
This will test if the LCD can operate OK with a 6-pin interface. |
|
|
Ringo42
Joined: 07 May 2004 Posts: 263
|
|
Posted: Thu Apr 30, 2009 6:21 pm |
|
|
OK, did that now I just get black boxes on the screen. Tried the contrast, that does not help.
By the way I know the LCD is good. I built up a board with a small pic on it and attached an lcd. The board takes in serial text and displays it. I can plug this lcd into the board and it works. THe problem is I built this board 10 years ago and don't have the source for it anymore. At least it lets me test the LCD :-) _________________ Ringo Davis |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Fri May 01, 2009 3:20 pm |
|
|
Quote: |
It is an 18f4550.
#define LCD_DB4 PIN_C1
#define LCD_DB5 PIN_D1
#define LCD_DB6 PIN_C2
#define LCD_DB7 PIN_C0
#define LCD_E PIN_D0
#define LCD_RS PIN_C5
#define LCD_RW PIN_D2 |
Pin C5 can't be used on this PIC. It's either a USB pin or it's an input-only
pin. The LCD driver requires an output pin. You need to choose another pin. |
|
|
Ringo42
Joined: 07 May 2004 Posts: 263
|
|
Posted: Sun May 03, 2009 10:35 am |
|
|
Thanks, I missed that. I was originally going to use a 452 which does not have that restriction, but I grabbed the other pic by mistake and had soldered it before I noticed.
Anyway, I can now send data to the LCD as long as it is not a variable. How do I send variable info.
For example, I tried this;
sprintf(alt,"\fAltitude: %6.2f\n",pressure_feet);
printf("%s",alt);
lcd_putc(alt);
but I get garbage.
something like
lcd_putc("\faltitude is 500\n");
works fine.
The printf of alt looks ok too.
I'm assuming the probelm is that sprintf "The output string will be terminated with a null."
If that is the problem, how do I fix it? I could put an extra case statement in flex_lcd.c in lcd_putc, but how do I specify a null?
Thanks
Ringo _________________ Ringo Davis |
|
|
Ringo42
Joined: 07 May 2004 Posts: 263
|
|
Posted: Sun May 03, 2009 10:46 am |
|
|
Nevermind I found it.
printf(lcd_putc"\fAlt: %6.2f\n",pressure_feet);
RIngo _________________ Ringo Davis |
|
|
|