View previous topic :: View next topic |
Author |
Message |
adamp524
Joined: 06 May 2010 Posts: 22
|
Flexible LCD Driver with Powertip PC2004-A 20x4 LCD |
Posted: Mon May 10, 2010 7:15 am |
|
|
Hi,
I'm having trouble getting anything to display on my Powertip PC2004-A 20x4 LCD. I'm using a PIC18F4580.
Currently I have 4 data pins DB4:DB7 and the three control pins wired up to port B on the PIC.
I'm using the 20x4 flexible LCD driver posted here:http://www.ccsinfo.com/forum/viewtopic.php?t=28268
Now, I'm not sure if this is a problem or not but I've noticed that when the LCD is powered up with no data going to it, there are no blank squares appearing on the screen. I've read in other forum posts that you should get something on the screen even when you have no data to it. Is what I'm seeing normal for this make of LCD?
The main issue with the LCD is that when I run the testcode given on the flexible LCD driver page, nothing appears on the screen. After maybe around 2 mins of the program running, sometimes there will be rows of random characters displayed on the 1st and 3rd line of the screen which randomly change, so there is some sort of communication going on between the PIC and LCD.
Anyone have any ideas what could be going wrong? |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Mon May 10, 2010 10:48 am |
|
|
Read this thread. It discusses problems with making the Powertip 20x4
lcd work with the Flex driver:
http://www.ccsinfo.com/forum/viewtopic.php?t=31167
If that doesn't help, post the following:
1. Your compiler version.
2. A list of all connections between the PIC and the LCD.
2a. Also post the #define statements that define the PIC pins used by
the flex driver.
3. Describe the external contrast control circuit that you have
connected to the LCD.
4. The Vdd voltage used to run the PIC and the LCD.
5. Post a small test program that #includes the flex driver.
This should just be a small "Hello World" program. Don't post the large
test program shown in the Flex driver post.
Make sure the test program will compile with no errors before you post it. |
|
|
adamp524
Joined: 06 May 2010 Posts: 22
|
|
Posted: Tue May 11, 2010 5:13 am |
|
|
Have tried everything suggested in the flexdriver post you suggested - nothing appears on the LCD.
The compiler version I'm using is: Version 4.033
Connections between PIC and LCD:
Code: | #define LCD_RS PIN_B1
#define LCD_RW PIN_B2
#define LCD_E PIN_B0
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
┌───────────┐
| P RB0┼──── E
| I RB1┼──── RS
| C RB2┼──── RW
| 1 RB4┼──── D4
| 8 RB5┼──── D5
| RB6┼──── D6
| RB7┼──── D7
| |
└───────────┘
D0 to D3 on the LCD left floating
|
my main.h file:
Code: | #FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOPROTECT //Code not protected from reading
#FUSES BROWNOUT //Reset when brownout detected
#FUSES BORV21 //Brownout reset at 2.1V
#FUSES MCLR //Master Clear pin enabled
#FUSES NOPBADEN //PORTB pins are configured as digital I/O on RESET
#use delay(clock=8000000)
#use rs232(baud=9600, UART1, bits=8, stop=1)
|
my main.c file:
Note: all printf statements go to UART1
Code: | #include "main.h"
#include "lcd_driver.c"
void main()
{
printf("\r\nProgram start:\r\n");
delay_ms(100);
lcd_init();
delay_ms(500);
while(TRUE)
{
delay_ms(1000);
printf("Before output to LCD\n\r");
lcd_putc('c');
printf("After output to LCD\n\r");
}
} |
When I run this program, the output that appears on the serial port is:
Then in a continuous loop:
Code: | Before output to LCD
After output to LCD
Before output to LCD
After output to LCD |
I have tried using a 5K pot connected to Vdd, Vo (Contrast Adj) and Vss) as well as connecting Vo straight to Vss.
I've found that when the LCD displays its random characters, the display is most clear when Vo is pulled to 0V - so that's what it's set to at the minute.
As for voltage levels, I'm using the Microchip PICDEM 2 Plus development board which supplies the pic and LCD with a Vdd of 5V |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue May 11, 2010 11:32 am |
|
|
PicDem2-Plus has tons of things on PortB. Try this:
1. Remove jumper J6, which connects the LEDs to Pins B0-B3.
2. Pins B6 and B7 are used by the ICD. This will interfere with the
LCD if the ICD is plugged in. To fix this, program the PIC with the
"Programmer" menu in MPLAB, so it will be a stand-alone program.
Then remove the ICD connector from the board, and press the reset
button.
3. Check your connections one more time, and make sure you don't
have any crossed wires.
Also, I tested compiler vs. 4.033 with an 18F4580 and the 16x2 lcd on my
PicDem2-Plus board, and it worked. So vs. 4.033 should work OK with
the 20x4 flex driver. The built-in LCD on the board doesn't use PortB.
Here is the test program:
Code: |
#include <18F4580.h>
#fuses XT, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
#include "flex_lcd.c"
//===========================
void main()
{
lcd_init();
lcd_putc("Hello there");
while(1);
} |
|
|
|
adamp524
Joined: 06 May 2010 Posts: 22
|
|
Posted: Wed May 12, 2010 2:31 am |
|
|
I've removed jumper J6 from the start - still no change.
Quote: | 2. Pins B6 and B7 are used by the ICD. This will interfere with the
LCD if the ICD is plugged in. To fix this, program the PIC with the
"Programmer" menu in MPLAB, so it will be a stand-alone program.
Then remove the ICD connector from the board, and press the reset
button. |
I've actually been doing that already, using PCW to create a hex file and program that onto the PIC manually.
Checked the connections one more time, they seem to be right.
I've connected up another 16wire 20x4 LCD with (what i'm assuming is) a different controller. This LCD looks a little more promising. I can send a string to it and after a bit of a delay, some of the characters I've sent display on the LCD (along with some extra ones). - sounds like a timing issue to me!
Any ideas? |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed May 12, 2010 11:16 am |
|
|
It's possible that your LCD doesn't support the Busy bit correctly.
You could try configuring the Flex driver so it doesn't use the R/W pin.
There are instructions on how to do this in the Flex driver post.
Note that you must either:
Connect the R/W pin on the LCD to Ground (disconnect it from the PIC
before you do that).
or
You must set the R/W pin to a constant low-level with a line of code.
Do this at the start of main().
Also, it's possible that the delays in the driver may need to be increased
for your LCD. For example, if the driver has "delay_cycles()", then
change it to "delay_us()" instead. The initial power-up delay may
also need to be increased. This is the delay_ms() line in the lcd_init()
function. Change it to delay_ms(50) or more. The driver should work
for 99% of all people as it is, but it's possible in a few cases that longer
delays are necessary. |
|
|
adamp524
Joined: 06 May 2010 Posts: 22
|
|
Posted: Fri May 14, 2010 2:52 am |
|
|
Hi, I seem to have got the driver to work at last!
It looks like my problem was that the programming pins were shared with the LCD's DB4-DB7 pins and when I programmed the PIC, the LCD controller got corrupted and would not recover until the LCD and PIC were reset!
Thanks for all your help. |
|
|
adamp524
Joined: 06 May 2010 Posts: 22
|
Update! |
Posted: Fri Jun 04, 2010 7:23 am |
|
|
Update: I've bought a new Powertip PC2004 A LCD to compare with the original one I had, but I cant get it to work either. I bought it just as a precautionary measure on the chance that the original LCD was broken.
I am fairly sure that this LCD does indeed work with your driver as post #6 by Neckruin on this thread http://www.ccsinfo.com/forum/viewtopic.php?t=28268 states that he got it working.
Would you have any other ideas on what could be wrong?
Thanks |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
|
adamp524
Joined: 06 May 2010 Posts: 22
|
|
Posted: Mon Jun 07, 2010 2:28 am |
|
|
Hi PCM programmer, thanks for getting back to me quickly.
I have the original PicDem2-Plus board.
I've tried both LCDs (the one I could get working with the flex driver and the new Powertip PC2004). I cant get either of them working with the CCS 4x20 driver.
One odd thing I have noticed with the Powertip PC2004 display and the CCS 4x20 driver: If the power supply GND is removed but the contrast pin is still connected to GND (to give highest contrast), black '-' characters sometimes appear on lines 1 and 3 of the display, these slowly fade out after approx 2 seconds.
If using the CCS 4x20 driver and you initialise the display as soon as you disconenct GND and the black characters appear, the characters promptly disappear again. - This looks as if the LCD initialisation has completed but it is not possible to write any characters to it afterwards. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Mon Jun 07, 2010 11:03 am |
|
|
You're using PortB. I still think this is a large part of the problem.
1. Remove Jumper J6. This will remove the LEDs from PortB.
2. After you program the PIC, unplug the ICD programmer from
the PicDem2-Plus board. After doing that, if necessary, press the
reset button on the board. It's essential to unplug the ICD after
programming, when you're using pins B6 and B7 for the LCD.
3. Make sure you program the PIC with your IDE in "Programmer" mode.
Don't program the PIC in "Debug" mode. |
|
|
adamp524
Joined: 06 May 2010 Posts: 22
|
|
Posted: Mon Jun 07, 2010 11:22 am |
|
|
Hi
I've already removed jumper J6 connected to the LEDs.
I'm not actually using an ICD programmer, I'm programming straight through ICSP port with a meLabs EPIC programmer http://store.melabs.com/prod/epic/EPICA.html, but I have tried programming, disconnecting the ICSP port and pressing the reset button on the development kit - no change to the LCD, it still stays blank
What confuses me is that this setup works with the unbranded LCD I have (mentioned in my post on Wed 12th May) but does not work when I directly replace it with the Powertip PC2004 LCD. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Mon Jun 07, 2010 12:00 pm |
|
|
Do a test. Add a large delay at the very beginning of the test program,
before you call lcd_init(). See if that helps.
Quote: |
void main()
{
int8 i;
int8 b1, b2, b3, b4;
delay_ms(1000); // 1 second delay
lcd_init();
|
|
|
|
adamp524
Joined: 06 May 2010 Posts: 22
|
|
Posted: Mon Jun 07, 2010 12:13 pm |
|
|
Ok,
I've tried that, still no change, the LCD still remains blank |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Jun 08, 2010 4:15 pm |
|
|
If you can, post a link to a photo of your test setup on a free image
hosting service. Example:
http://imageshack.us/
Then I can look at the wiring between the board and the LCD. |
|
|
|