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

[Help] Soft UART PIC18F

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



Joined: 25 Aug 2009
Posts: 175

View user's profile Send private message Yahoo Messenger

[Help] Soft UART PIC18F
PostPosted: Sat Apr 06, 2013 2:40 am     Reply with quote

Hi all
I have a problem when using one hard UART and one soft UART of PIC18F4680.
The interrupts of receiver not work.
I used:
MCU: PIC18F4680
Complier: CCS C PCH 4.140
and here is code:
Code:

#include <18LF4680.h>
#include <def_18f4680.h>
#fuses H4,NOPROTECT,NOLVP,NOWDT
#device *=16
#use delay(clock=40M)

#use rs232(FORCE_SW, baud=9600, xmit=PIN_A1,rcv=PIN_A0, STREAM=PIC)  // giao tiep Pic18F second (Slave)

#int_ext
void ngat_rs232()
{
   porte=0;
   char c;
   c=fgetc(PIC);
   //fputc(c,COM);
   chk_data=1;
}

void main(void)
{
   set_tris_a(0X02);// SW UART 2: KET NOI PIC18F   --TX:RA0,  RX: RA1
   set_tris_b(0);
   set_tris_c(0x80);// HW UART 1: KET NOI PC       --TX: RC6, RX: RC7
   set_tris_d(0);   
   set_tris_e(0);
     
   porte=0xff;
   porta=0xff;
   
   xoabuffer();

   lcd_init();
   lcd_gotoxy(1,1);
   lcd_putc('\f');
   printf(lcd_putc,"%s","12345678");   

   //------------------------------------------------------------
   // SETUP INTERRUPTS
   //------------------------------------------------------------

   //enable_interrupts(int_rda);
   enable_interrupts(int_ext);
   ext_int_edge( H_TO_L );
   //enable_interrupts(int_timer1); 
   enable_interrupts(global); 
   
   //fprintf(COM,"THIS IS SLAVE");
   while(1)
   {
      porte=0xff;
      if (chk_data==1)
      {
         lcd_gotoxy(1,2);
         printf(lcd_putc,"%c",c);
         chk_data=0;
      }
}

Result, lcd not display the string i send from the pic master,
Please show me way to fix it.
Thanks all
_________________
Begin Begin Begin !!!
Ttelmah



Joined: 11 Mar 2010
Posts: 19513

View user's profile Send private message

PostPosted: Sat Apr 06, 2013 4:45 am     Reply with quote

Er.
Obvious reason.
INT_EXT, is on pin B0, not A1.
So it'll never trigger for data arriving on A1.....

Data sheet.
asmboy



Joined: 20 Nov 2007
Posts: 2128
Location: albany ny

View user's profile Send private message AIM Address

PostPosted: Sat Apr 06, 2013 10:33 am     Reply with quote

IMHO , you would do FAR better to use the
18F46K80

for an obvious reason.
Never stay soft when you can go hard ......

why not check it out ??

http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en550197

2 Enhanced USART modules

Very Happy Very Happy Very Happy
tienchuan



Joined: 25 Aug 2009
Posts: 175

View user's profile Send private message Yahoo Messenger

PostPosted: Sun Apr 07, 2013 4:55 am     Reply with quote

Ttelmah wrote:
Er.
Obvious reason.
INT_EXT, is on pin B0, not A1.
So it'll never trigger for data arriving on A1.....

Data sheet.


:( i can't find interrupt services routine for soft uart as #int_rda in hardware uart.
I need to get character is received, if i used pins configed (A! and A0), where i can get data from soft uart?
Please show me example code with sodf uart? I'm really neeed.
In addition, I want to know connect wire between 2 PIC to communication via soft uart? Need use max232 to convert data ?
Pls show me way to fix it
thanks.
_________________
Begin Begin Begin !!!
temtronic



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

View user's profile Send private message

PostPosted: Sun Apr 07, 2013 5:38 am     Reply with quote

I don't use that PIC but downloaded the datasheet to read the specs...

Sorry , but you cannot use pins A0 or A1 for interrupts.The hardware is not capable of it.
Your choices are B0,B1,B2,B4,B5,B6 and B7.Those can have interrupts.
If you can only use A0 and A1,then you cannot implement a software UART with interrupt.

As suggested, a different PIC would be a better choice. Any that have 2 hardware UARTs.I use the PIC18F46K22 in a 40pin DIP package for all my projects.Along with 2 UARTS,these's lots of RAM,PROM and internal perhipherals.

Trying to decide which PIC to choose for a project can be hard.In my case it took me a week to read,re-read and decide the 46K22 was the best 'overall' PIC.While 'overkill' for many smaller projects,having a common, one-chip-does-anything, allows projects to be completed faster.

If you're stuck with what you have,use the software UART for the slowest speed device as you'll poll it very often to not lose data.

It's always best to use MAX232(or equal) which allows you to connect to a PC for testing,to verify your code works before you try PIC2PIC communications. CCS has example programs in the 'examples' flder as well as in the FAQ section of the help files(press F11 to access when your project is open).

hth
jay
tienchuan



Joined: 25 Aug 2009
Posts: 175

View user's profile Send private message Yahoo Messenger

PostPosted: Sun Apr 07, 2013 6:55 am     Reply with quote

temtronic wrote:
I don't use that PIC but downloaded the datasheet to read the specs...

Sorry , but you cannot use pins A0 or A1 for interrupts.The hardware is not capable of it.
Your choices are B0,B1,B2,B4,B5,B6 and B7.Those can have interrupts.
If you can only use A0 and A1,then you cannot implement a software UART with interrupt.

As suggested, a different PIC would be a better choice. Any that have 2 hardware UARTs.I use the PIC18F46K22 in a 40pin DIP package for all my projects.Along with 2 UARTS,these's lots of RAM,PROM and internal perhipherals.

Trying to decide which PIC to choose for a project can be hard.In my case it took me a week to read,re-read and decide the 46K22 was the best 'overall' PIC.While 'overkill' for many smaller projects,having a common, one-chip-does-anything, allows projects to be completed faster.

If you're stuck with what you have,use the software UART for the slowest speed device as you'll poll it very often to not lose data.

It's always best to use MAX232(or equal) which allows you to connect to a PC for testing,to verify your code works before you try PIC2PIC communications. CCS has example programs in the 'examples' flder as well as in the FAQ section of the help files(press F11 to access when your project is open).

hth
jay


thanks temtronic
I'll test with your ideas.
In my project, can not used the Pic with 2 hard UART, because the computer is only ONE Com port and not allow change another PIC18F model.
I used 2 PIC18F4680 for my project, the first PIC18F(master) will connect directly with PC(Com Port) via hard UART,and trasfer data to second PIC18F(Slave) via soft UART.
My model circuit is:
PC <----Hard UART----> PIC18F (Master)----SOFT UART--->PIC18F(Slave)
p/s: PIC18F Slave only receiver data from PIC18F Master, not tranceiver.
I want to known that is needed Max232 between 2 PIC18F( Master and Slave), if not, how to wiring between them?
I'll change code and test with your method, thanks u Smile
_________________
Begin Begin Begin !!!
temtronic



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

View user's profile Send private message

PostPosted: Sun Apr 07, 2013 8:15 am     Reply with quote

Yes, always use MAX232 for UART communications. It allows you to use PC for testing code, making it easier to debug.

In your situation the software UART should work fine connected to the 'slave' as the 'master' PIC will be in control, 'polling' or 'asking' the slave do you have any new data?

hth
jay
tienchuan



Joined: 25 Aug 2009
Posts: 175

View user's profile Send private message Yahoo Messenger

PostPosted: Sun Apr 07, 2013 9:08 am     Reply with quote

temtronic wrote:
Yes, always use MAX232 for UART communications. It allows you to use PC for testing code, making it easier to debug.

In your situation the software UART should work fine connected to the 'slave' as the 'master' PIC will be in control, 'polling' or 'asking' the slave do you have any new data?

hth
jay

Thanks temtronic.
I fixed it correct.
I'm not using MAX232 between 2 PIC18F4680.
I connected as :
TX(Master)->RX(Slave)
RX(Master)->TX(Slave)
mass-->mass
And i'll update code later!
THanks and regards.
_________________
Begin Begin Begin !!!
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