View previous topic :: View next topic |
Author |
Message |
kender
Joined: 09 Aug 2004 Posts: 768 Location: Silicon Valley
|
Problems making the Flexible LCD driver work |
Posted: Fri Mar 30, 2007 7:36 am |
|
|
Colleagues,
I’m trying to make PCM’s flexible LCD driver work with a Microtips 2x8 LCD (KS0066 controller or equivalent). Unfortunately, nothing appears on the screen – not even garbage. I’m using PCM’s code, which I found here without any modifications, except for the pin assignments:
Code: | #define LCD_DB4 PIN_D0
#define LCD_DB5 PIN_D1
#define LCD_DB6 PIN_D2
#define LCD_DB7 PIN_D3
// D0-D3 are left unconnected
#define LCD_RS PIN_B3 // Data/Instruction register select
#define LCD_RW PIN_B1 // Read/Write select
#define LCD_E PIN_B2 // Enable |
LCD connection (ribbon cable) has been checked and re-checked
My main() looks like this:
Code: | void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF|ADC_TAD_MUL_0);
setup_psp(PSP_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_oscillator(OSC_8MHZ);
lcd_init();
// Clear the LCD.
printf(lcd_putc, "\f");
delay_ms(500);
while (1)
{
strobe_RF_WDT ();
output_high(RF_LED);
delay_ms(500);
output_low(RF_LED);
delay_ms(500);
printf(lcd_putc, "Alpha"); // this doesn't appear on the LCD
}
} |
PIC18LF4220 edit: 8MHz internal oscillator
Vcc = +5V
CCS v3.240
Can anyone spot the problems?
Thanks!
Nick
Last edited by kender on Fri Mar 30, 2007 8:32 am; edited 3 times in total |
|
|
jecottrell
Joined: 16 Jan 2005 Posts: 559 Location: Tucson, AZ
|
|
Posted: Fri Mar 30, 2007 7:47 am |
|
|
Nick,
You may have checked this, but if you haven't... Does the LCD init properly? i.e. Can you flash an LED in your main loop to ensure it's not hanging in the init? If there is problem with the LCD and the PIC gets stuck waiting for the BUSY flag it can really make troubleshooting difficult.
Good luck,
John
EDIT:
Disregard.... On closer examination it doesn't look like that'd be an issue.... |
|
|
kender
Joined: 09 Aug 2004 Posts: 768 Location: Silicon Valley
|
|
Posted: Fri Mar 30, 2007 7:58 am |
|
|
jecottrell wrote: | Does the LCD init properly? |
I don't know how tp check that the truly LCD inits properly.
jecottrell wrote: | i.e. Can you flash an LED in your main loop to ensure it's not hanging in the init? If there is problem with the LCD and the PIC gets stuck waiting for the BUSY flag it can really make troubleshooting difficult. |
The LED (RF_LED) that is toggled in the main loop does blink properly. The execution doesn't get stuck in lcd_init(). I haven't commented out the
Code: | #define USE_LCD_RW 1 |
in the PCM's code. The code should be polling for the BUSY flag successfully (since it doesn't get stuck). |
|
|
jecottrell
Joined: 16 Jan 2005 Posts: 559 Location: Tucson, AZ
|
|
Posted: Fri Mar 30, 2007 8:03 am |
|
|
You replied before I made my edit....
Typical problem with init is hanging on a while statement checking the Busy Flag. If it does, the PIC never makes it to the main loop... obviously.
Other problem I've had, is using standard drivers with an extrremely fast PIC. What speed are you running the PIC at? I've modified all my drivers to eliminate the delay_cycles statements and used delay_us(1) in their place.
Try that next. |
|
|
kender
Joined: 09 Aug 2004 Posts: 768 Location: Silicon Valley
|
|
Posted: Fri Mar 30, 2007 8:09 am |
|
|
jecottrell wrote: | Other problem I've had, is using standard drivers with an extrremely fast PIC. What speed are you running the PIC at? |
8MHz internal oscillator
jecottrell wrote: | I've modified all my drivers to eliminate the delay_cycles statements and used delay_us(1) in their place. |
I just tried delay_us(1) instead of delay_cycles, but it didn't make any visible change.
Last edited by kender on Fri Mar 30, 2007 10:19 am; edited 1 time in total |
|
|
jecottrell
Joined: 16 Jan 2005 Posts: 559 Location: Tucson, AZ
|
|
Posted: Fri Mar 30, 2007 8:14 am |
|
|
Sorry,
I've used up my very small resevoir of knowledge....
Only other things are pretty basic:
Swap out part with same part.
Swap out part with different type LCD.
Try different driver.
....all the standards to try to isolate the problem...
Good luck,
John |
|
|
kender
Joined: 09 Aug 2004 Posts: 768 Location: Silicon Valley
|
|
Posted: Fri Mar 30, 2007 9:18 am |
|
|
jecottrell wrote: | I've used up my very small resevoir of knowledge.... |
It's propelling the problem towards solution anyways.
jecottrell wrote: | Swap out part with same part. | Tried that. No change.
jecottrell wrote: | Try different driver. | Could you recommend a different driver? Unfortunately, CCS' standard LCD.c will not work, because all 7 pins aren't on the same port.
jecottrell wrote: | Good luck | Thanks, i need it. |
|
|
jecottrell
Joined: 16 Jan 2005 Posts: 559 Location: Tucson, AZ
|
|
Posted: Fri Mar 30, 2007 9:51 am |
|
|
I just caught your post regarding Vo. If I remember correctly a Vo of Vdd will yield a display that looks totally inop and a Vo of Vss will end up with dark pixels.
So, before you do anything else, put a pot in or something to bring Vo down to where PCM recommends and I bet your problem is solved.
John |
|
|
kender
Joined: 09 Aug 2004 Posts: 768 Location: Silicon Valley
|
SOLVED |
Posted: Fri Mar 30, 2007 9:55 am |
|
|
jecottrell wrote: | I just caught your post regarding Vo. If I remember correctly a Vo of Vdd will yield a display that looks totally inop and a Vo of Vss will end up with dark pixels.
So, before you do anything else, put a pot in or something to bring Vo down to where PCM recommends and I bet your problem is solved.
|
Yes.
It was a hardware problem. Most of the time the LCD was doing the right things, but I couldn’t see the text, because there was no contrast. I read in one of PCM’s posts that the contrast voltage Vcont should be 0 to +0.5V. I didn’t know about that, and I have tied Vcont to Vcc. As soon as I made a Vcont = +0.4V with a voltage divider, I’ve got contrast. |
|
|
|