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 CCS Technical Support

Problem with PIC16F628A And Serial LCD

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



Joined: 19 Feb 2013
Posts: 50

View user's profile Send private message Yahoo Messenger MSN Messenger

Problem with PIC16F628A And Serial LCD
PostPosted: Tue Mar 25, 2014 10:59 am     Reply with quote

Hi everyone,
I am using a PIC16F628A, and a sparkfun serial LCD,,
Well, I have a problem in displaying. Sometimes, the LCD works well, others it prints some strange characters such as Omega Symbol or Pi Symbol.
I am not using a Crystal for this PIC because, it works well without it.
Do I have to connect a crystal ?
If no, then I am in the right path.
If Yes, I need to tell you that I have already connected an 8MHz Crystal. Activated the HS in the FUSES, and didn't work.
In the following program, I am using an interrupt which I tested already, it worked well, but still having a displaying problem. Sometimes the LCD froze.

Code:

#include<16F628A.h>
#DEVICE PASS_STRINGS = IN_RAM
#FUSES NOWDT                //No Watch Dog Timer
#FUSES INTRC                    //Internal RC Osc
#FUSES PUT                      //Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset

#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection

#USE DELAY(CLOCK = 4M)
#use rs232(baud=9600,xmit=PIN_B4,stream= COM_LCD)

#include<lcd.h>


static unsigned int16 counter ;
// inerrupt subroutine function.
#int_EXT
void Encoder_isr() {
counter++;
}
void main()
{
   delay_ms(2000);
   lcd_clear();
   fprintf(COM_LCD,"Hello");
   enable_interrupts(INT_EXT); //Activate the inerttupt
   ext_int_edge( L_TO_H );      //the counter will count when the click goes from Low to High
   clear_interrupt(INT_EXT);   //Clearing the interrupt for better counting
   enable_interrupts(GLOBAL);  //Activate the Global interrupt of the PIC

   while (TRUE)
   {

      lcd_cursor_move(2,1);
      fprintf(COM_LCD,"%ld",counter);

   }
}




this is the LCD
https://www.sparkfun.com/products/9396

why do I not use the regular LCD?
1- The pins are few
2- They don't sell it in my city.

Thanks
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Tue Mar 25, 2014 11:56 am     Reply with quote

Quote:
#use rs232(baud=9600,xmit=PIN_B4,stream= COM_LCD)

#int_EXT
void Encoder_isr() {
counter++;
}

You are using a software UART and you are interrupting the character
transmission and destroying the UART bit timing. That's the reason.

There are two possible solutions. The easiest and best one is to use
the hardware UART. Just specify UART1 as the parameter and don't
specify any pins. The compiler will automatically use the hardware
UART and it will use the two hardware UART pins, TX and RX.

The 2nd solution is to add the DISABLE_INTS parameter to the existing
#use rs232() line above. This will disable interrupts while the software
UART is transmitting the bits for each character. But, your #int_EXT
routine will be blocked for a maximum of one character time, if the
software UART is transmitting when the #int_ext interrupt occurs.
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