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

Faulty LCD
Goto page 1, 2  Next
 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
aaronik19



Joined: 25 Apr 2011
Posts: 297

View user's profile Send private message

Faulty LCD
PostPosted: Mon Dec 31, 2012 5:37 am     Reply with quote

How you know that LCD is damaged? I tried several programs and the only output I have on the LCD is just the top line showing white boxes
temtronic



Joined: 01 Jul 2010
Posts: 9205
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Mon Dec 31, 2012 6:50 am     Reply with quote

Without seeing your code and the LCD module information
that sounds more likely a 'bad' program.

From your description, I'm thinking you have a 2 or 4 line LCD module that does power up and is in 8 bit mode.
I do know that the flex_lcd driver here works on 5 different modules.

show us your code, PIC type, and compiler info.....

hth
jay
aaronik19



Joined: 25 Apr 2011
Posts: 297

View user's profile Send private message

PostPosted: Mon Dec 31, 2012 7:02 am     Reply with quote

this is the code:

Code:
#include "trial.h"
#define LCD_ENABLE_PIN  PIN_B5
#define LCD_RS_PIN      PIN_B7
#define LCD_RW_PIN      PIN_B6
#define LCD_DATA4       PIN_D7
#define LCD_DATA5       PIN_D6
#define LCD_DATA6       PIN_D5
#define LCD_DATA7       PIN_D4

#include "lcd.c"
int count;

void main()
{
   
   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
   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 parameter not selected from Intr Oscillotar Config tab
   set_tris_a(0x00);
   output_a(0x0000000);
   lcd_init();
   delay_ms(500);

   while(1)
   
   {
   
   count++;
   lcd_putc ("/f");
   lcd_gotoxy(1,1);
   lcd_putc (count);
   output_toggle(PIN_A0);
   delay_ms(1000);
   }

}


I am using 4 line communication
Ttelmah



Joined: 11 Mar 2010
Posts: 19463

View user's profile Send private message

PostPosted: Mon Dec 31, 2012 8:03 am     Reply with quote

You have not answered two of the three questions answered:
PIC type, and compiler version.

Some comments though:

setup_spi(SPI_SS_DISABLED);

Does not turn off the SPI. If on your chip one of the LCD pins is an SPI pin, this would stop it from working.
Correct syntax is:

setup_spi(FALSE);

Are your four data lines really reversed?.

You need a total of ten lines connected to the LCD. The seven listed in the code, plus ground, 5v, and Vee (the LCD contrast voltage). A display will wake up without the last, but depending on the unit may well just show one line of solid rectangles.

Best Wishes
aaronik19



Joined: 25 Apr 2011
Posts: 297

View user's profile Send private message

PostPosted: Mon Dec 31, 2012 8:40 am     Reply with quote

I am using the PIC18F4550. In fact the SPI Pins are not effected. I used the general purpose pins on port B and port D. The crystal is 12mHz and compiler version is: 4.093
Ttelmah



Joined: 11 Mar 2010
Posts: 19463

View user's profile Send private message

PostPosted: Mon Dec 31, 2012 8:59 am     Reply with quote

So, are the four data lines actually reversed?.

Move the delay _in front_ of lcd_init.
A lot of third party displays need extra time to actually wake up.

Have you actually done a basic test and verified your chip is running and at the correct speed (toggle an LED on a pin)?.

Best Wishes
aaronik19



Joined: 25 Apr 2011
Posts: 297

View user's profile Send private message

PostPosted: Mon Dec 31, 2012 9:09 am     Reply with quote

what do you mean by reversed? Actually the led is not toggle at all! When I removed all the lcd functions and kept only the led toggling (to verify that the PIC is good), the program worked fine.
aaronik19



Joined: 25 Apr 2011
Posts: 297

View user's profile Send private message

PostPosted: Mon Dec 31, 2012 9:17 am     Reply with quote

I made delay_ms(1000) before the lcd_init() to be 100% sure that it has enough time but still no luck :(
Ttelmah



Joined: 11 Mar 2010
Posts: 19463

View user's profile Send private message

PostPosted: Mon Dec 31, 2012 9:18 am     Reply with quote

You have the top bit of the port (D7), going to the low bit of the LCD (D4), etc...
aaronik19



Joined: 25 Apr 2011
Posts: 297

View user's profile Send private message

PostPosted: Mon Dec 31, 2012 9:21 am     Reply with quote

sorry but I am not understanding your point...

I have the following :
D7 => DATA4
D6 => DATA5
D5 => DATA6
D4 => DATA7

there is any problem with this configuration?
aaronik19



Joined: 25 Apr 2011
Posts: 297

View user's profile Send private message

PostPosted: Mon Dec 31, 2012 9:24 am     Reply with quote

I have made the following :
D7 => DATA7
D6 => DATA6
D5 => DATA5
D4 => DATA4

...still no luck
ezflyr



Joined: 25 Oct 2010
Posts: 1019
Location: Tewksbury, MA

View user's profile Send private message

PostPosted: Mon Dec 31, 2012 10:26 am     Reply with quote

Hi,

OK, but you haven't fully answered all the questions that have been asked.
Ttelmah asked if the chip is running at the correct speed. You didn't answer
that question, only that the LED was flashing. You need to use a reasonable
delay time, such as 1 second, and then verify that the LED is toggling at that
rate. If the chip is running slower or faster than expected, you won't get the
LCD to work.

The fact that the code 'hangs' (the LED stops flashing) when the LCD routines
are added suggests that the code is stopping inside the LCD.c module. If I
were trying to debug this problem, I would do three things immediately:

1. Run the 'LED test' to verify the CPU is running at the desired speed.
2. Switch to the 'flex_lcd.c' LCD driver.
3. Disable, at least for now the R/W capability of the display. This is
described in the flex_lcd driver docs.

John
aaronik19



Joined: 25 Apr 2011
Posts: 297

View user's profile Send private message

PostPosted: Mon Dec 31, 2012 11:18 am     Reply with quote

dear all,

I continue to work on this problem and finally I worked! I mapped the pinouts in this order:
A0 => RS
A1 => RW
A2 => Enable
A3 => DATA4
A4 => DATA5
A5 => DATA6
E0 => DATA7

I do not know if there must be Pinouts Order! In this way all the program is working correctly with the correct cpu speed...20MHz.
ezflyr



Joined: 25 Oct 2010
Posts: 1019
Location: Tewksbury, MA

View user's profile Send private message

PostPosted: Mon Dec 31, 2012 12:10 pm     Reply with quote

Hi,

Did this line of code work as intended?

Code:

   lcd_putc ("/f");


John
aaronik19



Joined: 25 Apr 2011
Posts: 297

View user's profile Send private message

PostPosted: Mon Dec 31, 2012 12:12 pm     Reply with quote

In fact I corrected it! It must be:

Code:
lcd_putc ("\f");


to clear the display
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Goto page 1, 2  Next
Page 1 of 2

 
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