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

RS232 printf issue with receive enabled PIC16F690

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







RS232 printf issue with receive enabled PIC16F690
PostPosted: Tue Dec 01, 2009 3:13 pm     Reply with quote

I'm having an issue getting printf statements to print when I have the receive pin enabled (B5) for the PIC16F690. The putc and getc commands work fine. Example code below:

Code:
#include <16F690.h>
#fuses INTRC_IO,NOWDT,NOPROTECT,NOMCLR,NOBROWNOUT,NOIESO,NOFCMEN
#use delay(clock=4000000)
#use RS232(Baud=38400,XMIT=PIN_B7,RCV=PIN_B5)

char input;

void main(void){
    printf("\n\rHello World!\n\r");
    putc('A');
    input = getc();
    putc(input);
    printf("\n\rI read a %c\n\r", input);       
}


If I type a "1" from TeraTerm for the getc command, I will see this output:

A11

(Local echo is on, hence the subsequent "1"). Note the "Hello World!" did not print. If I change the RCV pin to an unconnected pin, say C6 as in the following example:

Code:
#include <16F690.h>
#fuses INTRC_IO,NOWDT,NOPROTECT,NOMCLR,NOBROWNOUT,NOIESO,NOFCMEN
#use delay(clock=4000000)
#use RS232(Baud=38400,XMIT=PIN_B7,RCV=PIN_C6)

char input;

void main(void){
    printf("\n\rHello World!\n\r");
    putc('A');
    input = getc();
    putc(input);
    printf("\n\rI read a %c\n\r", input);       
}


I get the following output:

Hello World!

A

Success! But, when I modify the hardware to connect RX to C6, it does not recognize my inputs from TeraTerm so the code hangs on getc().

Any thoughts on this? I'd prefer to get the printf's working with RX as B5, but if I can get this working with another RX pin, I'm cool with that.

Thanks in advance for your help.
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Tue Dec 01, 2009 3:21 pm     Reply with quote

1. Post your compiler version.

2. Also, are you using a board with a Max232-type chip on it ?
Did you buy the board or build it yourself ? If you bought it,
post the manufacturer and model number.
Guest








PostPosted: Tue Dec 01, 2009 3:34 pm     Reply with quote

Hi,

Maybe some Rx errors makes the UART hang?
Try this:

#use RS232(Baud=38400,XMIT=PIN_B7,RCV=PIN_B5, ERRORS)

I'm doing 115.200 on the hardware UART in F690 + additional sending in 19.200 on software UART at 4MHz.

Good luck!


/BdeB
theweasel
Guest







RS232 printf issue with receive enabled PIC16F690
PostPosted: Tue Dec 01, 2009 8:16 pm     Reply with quote

Hi. Thanks for your suggestions.

1. Compiler version is 4.037

2. I'm using a MAX232 logic translator and I'm confident in the hardware. I've used this board before for serial RX/ TX without issue. Moreover, the system works fine when I use putc/ getc... only printf doesn't work. If I remove the RCV pin in SW or change the pin in SW, I can printf all day.

3. I tried adding "errors" declaration in #use RS232, but, it does not affect the behavior... still no printf statements.

Any other ideas?
the_weasel
Guest







PostPosted: Wed Dec 02, 2009 2:46 pm     Reply with quote

Looks like this is an issue with version 4.037. See topic 81053 on these forums. (I can't post the link because I'm a guest and I'm still waiting for my registration confirmation email).

Any work around for this bug? This is the first project I've required bidirectional RS232, so I've never encountered this.
the_weasel
Guest







PostPosted: Wed Dec 02, 2009 2:58 pm     Reply with quote

Confirmed. Here is the version history update from version 4.038:

4.038 An RS232 problem for some configurations (since 4.037) is fixed

Can I make this work with 4.037?
ckielstra



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

View user's profile Send private message

PostPosted: Wed Dec 02, 2009 3:19 pm     Reply with quote

This is your first project with the CCS compiler, but you are using an 2.5 years old version (May-2007)? Confused

It has been posted many times before on this forum, but the first releases of the new v4 compiler were terrible and contained so many bugs that CCS should have released them with a huge 'alfa release' message.
Starting around v4.070 the compiler became 'usable' and v4.099 is stable (I'm not sure about v4.100 and v4.101, these are reported to have introduced a few new bugs).

Maybe you can get your project working in v4.037 but with every problem you'll wonder if it is you or the compiler. Best to do an upgrade.
dyeatman



Joined: 06 Sep 2003
Posts: 1934
Location: Norman, OK

View user's profile Send private message

PostPosted: Wed Dec 02, 2009 3:34 pm     Reply with quote

It's likely a bootleg copy of 4.037 from a guy posting under the name Red Alert. The same site also seems to have a few folks fussing about the license files being out of date. To get around this they also posted a bootleg copy of 3.249.

That's why there are so many questions about the older versions popping up.

I wonder if CCS knows about this site?
_________________
Google and Forum Search are some of your best tools!!!!
the_weasel
Guest







PostPosted: Wed Dec 02, 2009 4:03 pm     Reply with quote

Thanks for the encouragement. I'd be happy to provide the invoice for my registered copy of the PCM compiler. I've used this version since May 2007, just never run into this issue because I've never made use of the rcv pin (with xmit only, there is no issue).

Now that we've determined I'm not a bootlegger, I'd be happy to get some constructive feedback.
dyeatman



Joined: 06 Sep 2003
Posts: 1934
Location: Norman, OK

View user's profile Send private message

PostPosted: Wed Dec 02, 2009 4:16 pm     Reply with quote

My sincere apologies. Sad

As you can imagine this is an ongoing problem for CCS (and the other compiler companies as well). We see a fair amount of it on this board.

I have 4.037 in my archives at home but unfortunately I don't have a 690 to test on. I bet someone here probably has.

When I get home from work I will look into it (if someone hasn't beaten me to it). Unless it's related to a hardware errata I feel sure some kind of workaround can be cooked up.
_________________
Google and Forum Search are some of your best tools!!!!
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Wed Dec 02, 2009 4:55 pm     Reply with quote

I've looked at the problem and the reason is because printf doesn't work
properly with the hardware UART in your version. It doesn't write to
the UART's transmit register.

The work-around is to add your own "my_putc()" routine (which calls
putc) and use the re-direction feature of printf to call that routine.
Then it works. I tested this in hardware with vs. 4.037. Add the code
shown in bold below.
Quote:

#include <16F690.h>
#fuses INTRC_IO,NOWDT,NOPROTECT,MCLR,BROWNOUT
#use delay(clock=4000000)
#use RS232(Baud=9600,XMIT=PIN_B7,RCV=PIN_B5)

char input;

void my_putc(char c)
{
putc(c);
}


void main(void)
{
printf(my_putc, "\n\rHello World!\n\r");
putc('A');
input = getc();
putc(input);
printf(my_putc, "\n\rI read a %c\n\r", input);

while(1);
}

Also note that I've added a while(1) statement at the end of main().
This prevents the PIC from executing the hidden sleep instruction
that CCS places at the end of main(). If it executes this instruction,
the last two chars sent to the hardware UART will not be displayed,
because the PIC will go to sleep while they are still in progress of
being transmitted or in the queue to be transmitted.
the_weasel
Guest







PostPosted: Wed Dec 02, 2009 6:08 pm     Reply with quote

PCMprogrammer,

You are a god amongst men. That did the trick. I'm golden. Thanks for your support.
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