| View previous topic :: View next topic | 
	
	
		| Author | Message | 
	
		| 07arunsharma 
 
 
 Joined: 05 Mar 2012
 Posts: 18
 Location: India
 
 
			      
 
 | 
			
				| LCD Interfacing Problem with PIC16F877A |  
				|  Posted: Mon Mar 05, 2012 9:13 pm |   |  
				| 
 |  
				| Hello everyone i am new to CCS Compiler. I write a simple code to to display some text on LCD.
 But it not works.
 
 Here is my CODE
 
 
  	  | Code: |  	  | #include<16f877a.h> 
 #use delay(clock=20000000)
 #fuses HS,NOWDT,NOPROTECT,NOLVP
 
 #include <lcd.c>
 
 /*#define LCD_ENABLE_PIN  PIN_C0                                    ////
 #define LCD_RS_PIN      PIN_C1                                    ////
 #define LCD_RW_PIN      PIN_C2                                    ////
 #define LCD_DATA4       PIN_D4                                    ////
 #define LCD_DATA5       PIN_D5                                    ////
 #define LCD_DATA6       PIN_D6                                    ////
 #define LCD_DATA7       PIN_D7*/
 
 void main()
 {
 set_tris_d(0x00);
 set_tris_c(0x00);
 lcd_init();
 Delay_ms(100);
 while(1)
 {
 lcd_gotoxy(1,1);
 Delay_ms(1000);
 lcd_putc("\fReady...\n");
 }
 }
 
 | 
 
 after asking several forums on internet,
 someone has given me a file flex_lcd.c
 
 i write the code for that as follow:
 
  	  | Code: |  	  | #include<16f877a.h>
 
 #use delay(clock=20000000)
 #fuses HS,NOWDT,NOPROTECT,NOLVP
 
 #include "flex_lcd.c"
 
 void main()
 {
 set_tris_d(0x00);
 set_tris_c(0x00);
 lcd_init();
 Delay_ms(100);
 while(1)
 {
 lcd_gotoxy(1,1);
 Delay_ms(1000);
 lcd_putc("\fReady...\n");
 }
 }
 | 
 
 and changed the pin configuration for that, and my lcd program starts working,
 so i want to know why the file provided with ccs pic c i.e lcd.c is not working for me...
 _________________
 Arun Sharma
 |  | 
	
		|  | 
	
		| PCM programmer 
 
 
 Joined: 06 Sep 2003
 Posts: 21708
 
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Mon Mar 05, 2012 10:21 pm |   |  
				| 
 |  
				| You need to place the pin assignment statements above the #include line for lcd.c.  Also, the #define statements must not be commented out.
 Example:
 
  	  | Code: |  	  | #define LCD_ENABLE_PIN  PIN_C0
 #define LCD_RS_PIN      PIN_C1
 #define LCD_RW_PIN      PIN_C2
 #define LCD_DATA4       PIN_D4
 #define LCD_DATA5       PIN_D5
 #define LCD_DATA6       PIN_D6
 #define LCD_DATA7       PIN_D7
 
 #include <lcd.c>  // This line must go here
 
 | 
 |  | 
	
		|  | 
	
		| 07arunsharma 
 
 
 Joined: 05 Mar 2012
 Posts: 18
 Location: India
 
 
			      
 
 | 
			
				|  |  
				|  Posted: Tue Mar 06, 2012 9:34 am |   |  
				| 
 |  
				| Thank You very Much, 
 It works, i was halted at this problem from last 2 month.
 today i got solution..
 :-)
 
 what is the meaning of "%f"
 
 
 Thanks alot..
 :-)
 _________________
 Arun Sharma
 |  | 
	
		|  | 
	
		| 07arunsharma 
 
 
 Joined: 05 Mar 2012
 Posts: 18
 Location: India
 
 
			      
 
 | 
			
				|  |  
				|  Posted: Tue Mar 06, 2012 10:37 am |   |  
				| 
 |  
				| %f is used to clear the LCD Screen, 
 what if i want to go to a particular line,
 i use statement lcd_gotoxy(1,1);
 it means 1st row and 1st columns
 
 while
 lcd_gotoxy(2,1);
 second row first column not working
 
 Can you tell me why it is so.
 
 
 
  	  | Code: |  	  | #include<16f877a.h>
 
 #use delay(clock=20000000)
 #fuses HS,NOWDT,NOPROTECT,NOLVP
 
 #use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7,parity=N,bits=8,ERRORS)
 
 #define LCD_ENABLE_PIN PIN_C0
 #define LCD_RS_PIN PIN_C1
 #define LCD_RW_PIN PIN_C2
 #define LCD_DATA4 PIN_D4
 #define LCD_DATA5 PIN_D5
 #define LCD_DATA6 PIN_D6
 #define LCD_DATA7 PIN_D7
 
 #include <lcd.c>
 
 void main()
 {
 set_tris_d(0x00);
 set_tris_c(0x00);
 lcd_init();
 Delay_ms(100);
 while(1)
 {
 lcd_gotoxy(2,1);
 Delay_ms(1000);
 lcd_putc("\fArun Sharma");   // /f clears the display
 Delay_ms(1000);
 printf("Serial Communication\n\r");
 Delay_ms(1000);
 }
 }
 
 | 
 
 This is not working means Arun Sharma is not displaying on Second line..
 _________________
 Arun Sharma
 |  | 
	
		|  | 
	
		| temtronic 
 
 
 Joined: 01 Jul 2010
 Posts: 9589
 Location: Greensville,Ontario
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Tue Mar 06, 2012 11:52 am |   |  
				| 
 |  
				| ... lcd_gotoxy(2,1);
 second row first column not working
 ..
 Have a read of the LCD driver comments at the beginning...
 
 (1,2) not (2,1)
 |  | 
	
		|  | 
	
		| 07arunsharma 
 
 
 Joined: 05 Mar 2012
 Posts: 18
 Location: India
 
 
			      
 
 | 
			
				|  |  
				|  Posted: Tue Mar 06, 2012 12:30 pm |   |  
				| 
 |  
				| I have tried all combination.. and it is not written in driver file,
 
 
  	  | Quote: |  	  | /////////////////////////////////////////////////////////////////////////////// ////                             LCD.C                                     ////
 ////                 Driver for common LCD modules                         ////
 ////                                                                       ////
 ////  lcd_init()   Must be called before any other function.               ////
 ////                                                                       ////
 ////  lcd_putc(c)  Will display c on the next position of the LCD.         ////
 ////                     The following have special meaning:               ////
 ////                      \f  Clear display                                ////
 ////                      \n  Go to start of second line                   ////
 ////                      \b  Move back one position                       ////
 ////                                                                       ////
 ////  lcd_gotoxy(x,y) Set write position on LCD (upper left is 1,1)        ////
 ////                                                                       ////
 ////  lcd_getc(x,y)   Returns character at position x,y on LCD
 | 
 
 This is written,,
 Anyways thanks for ur reply,
 but still it doesn't works..
 
 
 
  	  | Code: |  	  | #include<16f877a.h> 
 #use delay(clock=20000000)
 #fuses HS,NOWDT,NOPROTECT,NOLVP
 
 #use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7,parity=N,bits=8,ERRORS)
 
 #define LCD_ENABLE_PIN PIN_C0
 #define LCD_RS_PIN PIN_C1
 #define LCD_RW_PIN PIN_C2
 #define LCD_DATA4 PIN_D4
 #define LCD_DATA5 PIN_D5
 #define LCD_DATA6 PIN_D6
 #define LCD_DATA7 PIN_D7
 
 #include <lcd.c>
 
 void main()
 {
 set_tris_d(0x00);
 set_tris_c(0x00);
 lcd_init();
 Delay_ms(100);
 while(1)
 {
 lcd_gotoxy(1,2);
 Delay_ms(1000);
 lcd_putc("\fArun Sharma");   // /f clears the display
 Delay_ms(1000);
 printf("Serial Communication\n\r");
 Delay_ms(1000);
 }
 }
 | 
 
 Not working,
 Any suggestion pls
 _________________
 Arun Sharma
 |  | 
	
		|  | 
	
		| gpsmikey 
 
 
 Joined: 16 Nov 2010
 Posts: 588
 Location: Kirkland, WA
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Tue Mar 06, 2012 12:33 pm |   |  
				| 
 |  
				| Been a while since I looked at the LCD specs (and they all vary), but I thought there had to be a delay after a "\f" (form-feed / clear display) before you sent it more text ? 
 mikey
 _________________
 mikey
 -- you can't have too many gadgets or too much disk space !
 old engineering saying: 1+1 = 3 for sufficiently large values of 1 or small values of 3
 |  | 
	
		|  | 
	
		| PCM programmer 
 
 
 Joined: 06 Sep 2003
 Posts: 21708
 
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Tue Mar 06, 2012 2:33 pm |   |  
				| 
 |  
				|  	  | Quote: |  	  | I thought there had to be a delay after a "\f" (form-feed / clear display) before you sent it more text
 | 
 It's all handled by the lcd driver.  Check the source code in the CCS
 Code Library forum.
 |  | 
	
		|  | 
	
		| jeremiah 
 
 
 Joined: 20 Jul 2010
 Posts: 1401
 
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Tue Mar 06, 2012 5:28 pm |   |  
				| 
 |  
				| I've not dealt with LCD's much, but does the clear screen in lcd_putc("\fArun Sharma") also reset the position?  If so, the lcd_gotoxy(1,2) would be meaningless. |  | 
	
		|  | 
	
		| PCM programmer 
 
 
 Joined: 06 Sep 2003
 Posts: 21708
 
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Tue Mar 06, 2012 5:47 pm |   |  
				| 
 |  
				| Yes, it clears the display and puts the cursor in home position (1, 1). |  | 
	
		|  | 
	
		|  |