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

Using software UART with 19200 baud rate

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



Joined: 08 Sep 2003
Posts: 492
Location: India

View user's profile Send private message Send e-mail

Using software UART with 19200 baud rate
PostPosted: Thu Feb 27, 2014 12:56 am     Reply with quote

Hi,

I have managed to setup a software uart port on the 18F2620 that uses the b0 pin as receive and b1 as transmit. The pic can receive data very well at 9600 baud, but at 19200 it does not work properly.

Can the software UART work on 19200 baud ?? or is it best suited for 9600 baud.

My code to test the system is as follows.

Code:
#include <18F2620.h>
#use delay(clock=8000000)
#fuses INTRC_IO,NOWDT,PUT,NOPROTECT,NOMCLR,NOCPD,BROWNOUT,NOLVP,NOPBADEN,NOIESO,NOFCMEN
#use rs232(baud=9600,xmit=pin_b1, rcv=pin_b0,parity=n,bits=8,errors,stream=ANYBUS)

#zero_ram
void initialise(){

   setup_oscillator(OSC_INTRC|OSC_8MHZ);
   setup_adc(ADC_OFF);

   set_tris_a(0b11111111);
   set_tris_b(0b11111001);
   set_tris_c(0b10111011);
   set_tris_e(0b1111);
}

void main(){
   
   initialise();

   do
   {   
      fputc(fgetc(ANYBUS)+1,ANYBUS);

   }while(TRUE);

}


Please help..

thanks
a
temtronic



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

View user's profile Send private message

PostPosted: Thu Feb 27, 2014 7:28 am     Reply with quote

I'd use the PLL and get the PIC running faster ! A software UART needs a lot of CPU cycles to execute.
Right now your PIC is running at 8MHz, you can get 32MHz by using the PLL, effectively you'll have 4X the CPU cycles.
Also the internal oscillator may not be 'bang on' calibrated. It's always best to use an external crystal/cap as the primary oscillator.Cost 50 cents more BUT far more accurate.

If you need 2 'fast' UARTS I suggest using a PIC with 2 hardware UARTs.There's probably a drop in 'pin for pin' replacement.I've used the 46k22 for 2-3 years, 2 UARTs at 115k200, no data loss problems.

recode,test, try, report back with what happens

hth
jay
ckielstra



Joined: 18 Mar 2004
Posts: 3680
Location: The Netherlands

View user's profile Send private message

PostPosted: Thu Feb 27, 2014 8:48 am     Reply with quote

Code:
      fputc(fgetc(ANYBUS)+1,ANYBUS);
You will have problems no matter what baudrate or clock frequency you choose.

The Software UART can not receive data while it is transmitting, and same the other way around. It takes just as long to send a character as it takes to receive one. So, unless you are receive just 1 character at a time, you will loose data. That's why hardware UARTs have a buffer for multiple characters.
mars79



Joined: 19 Jun 2013
Posts: 6
Location: Bulgaria, Plovdiv

View user's profile Send private message Send e-mail

PostPosted: Thu Feb 27, 2014 8:54 am     Reply with quote

Try to use an external oscillator.
gpsmikey



Joined: 16 Nov 2010
Posts: 588
Location: Kirkland, WA

View user's profile Send private message

PostPosted: Thu Feb 27, 2014 10:14 am     Reply with quote

Something else to keep in mind with a software uart - anything that interrupts the uart code will cause problems. In your test, you are not using interrupts, but if you are planning on using them in your project recognize that interrupts will scramble both transmitting and receiving if they go off during a character time.

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
arunb



Joined: 08 Sep 2003
Posts: 492
Location: India

View user's profile Send private message Send e-mail

re
PostPosted: Thu Feb 27, 2014 10:51 am     Reply with quote

thanks everyone for the help,

I think the dual uart mcu should be the best solution, but will using an ext interrupt on the receive pin improve matters?

@temtronic
i will try out the external crystal and pll first as you suggested...

thanks
a
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