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

LCD en & RS lines Constant activity

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
scottc



Joined: 16 Aug 2010
Posts: 95

View user's profile Send private message

LCD en & RS lines Constant activity
PostPosted: Sun Sep 12, 2010 3:15 am     Reply with quote

I have a 20x2 chr LCD module that is working good in 4bit mode running
on the upper nibble of port B.

I connected my Logic Analyzer to the EN & RS pins to check the timing
during writes to the display so as to verify my code.

I notice that the EN line is producing a nice Square Wave all the time
of right about 1ms. The EN line is connected to RC1 on my pic 18f2331.

I am curious to know if this is normal. It was my understanding that the
EN line should only toggle when there is a write to the display. It don't
seem right that it should be doing this all the time.

Beyond that the display works good, no issues writing to it at all. The 1ms
square wave is present regardless if the display is connected or not.

Thanks Scott
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Sun Sep 12, 2010 12:22 pm     Reply with quote

Make a small test program that only has a while(1) statement in main()
and nothing else. Don't enable PWM, don't enable the WDT, don't allow
any Wizard code to be placed inside main(). Run that program. Do you
still get the 1ms period square wave ? If not, then something in your
previous program is causing it. Start by commenting out blocks of code
in your program. Compile and test in hardware. When the 1 ms signal
goes away, then you have found the block of code that is the problem.
Then comment it out by smaller and smaller sections, testing each time,
until you find the offending line of code. In other words, trouble-shoot
the problem.
scottc



Joined: 16 Aug 2010
Posts: 95

View user's profile Send private message

PostPosted: Sun Sep 12, 2010 7:57 pm     Reply with quote

Hi PCM, I have isolated the issue with the EN line toggling to I believe
what I think might be an issue with the compiler.

The issue happens when the LCD routine gets polled from main, while
running in a while loop.

The following code works flawless. No weirdness with EN/RS lines
Code:

void Display_Stuff(void)
{
   Lcd_cmd( LCD_LINE1 );
   Write_LCD("This is a Test");
 
}

void main()
{
   set_tris_b(0b00001101);     
   set_tris_c(0b11000000);
   setup_oscillator(OSC_8MHZ|OSC_Normal);
 
   LCD_START();                  //Init the LCD
   Display_Stuff();                 
 
}

The following code produces the ringing 1ms constant pulse on the
EN Line, Pin RC0
Code:

void Display_Stuff(void)
{
   Lcd_cmd( LCD_LINE1 );
   Write_LCD("This is a Test");
 
}

void main()
{
   set_tris_b(0b00001101);     
   set_tris_c(0b11000000);
   setup_oscillator(OSC_8MHZ|OSC_Normal);
 
   LCD_START();                  //Init the LCD

   while (true)
   {
   Display_Stuff();
   } 
}

In the above Main is calling DisplayStuff from an infinite loop. It is only when calling the display from a infinite loop that the problem happens.

I am a bit stumped on what to do, because in order to keep my code
running its going to need to run from main in a while loop along with
the other functions that get called from Main.

Any ideas ?

Thanks Scott.
Ttelmah



Joined: 11 Mar 2010
Posts: 19333

View user's profile Send private message

PostPosted: Mon Sep 13, 2010 1:52 am     Reply with quote

Er. The 'example' code, you show, is continuously writing to the screen. Of course the EN line is going to have a continuous signal doing this. If you stop writing to the screen the signal will stop. ie:
Code:

void Display_Stuff(void)
{
   Lcd_cmd( LCD_LINE1 );
   Write_LCD("This is a Test");
 
}

void main()
{
   set_tris_b(0b00001101);     
   set_tris_c(0b11000000);
   setup_oscillator(OSC_8MHZ|OSC_Normal);
 
   LCD_START();                  //Init the LCD

   while (true)
   {
   Display_Stuff();
   delay_ms(1000); //Imagine your code is going and doing something else.
   }
}

You should see little bursts of activity, separated by one second gaps.

Best Wishes
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
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