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

I am facing a problem with printf and control characters

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



Joined: 05 Aug 2017
Posts: 41
Location: brazil

View user's profile Send private message

I am facing a problem with printf and control characters
PostPosted: Fri Jan 05, 2018 6:16 pm     Reply with quote

I am trying to use fprint from prototype to PC via serial cable.

Considering the control characters used, the output is as follows.

My source (simplified):
Code:

#use  rs232(baud=9600,parity=N,xmit=PIN_c5,rcv=PIN_a2,bits=8,stream=PORT1) 

void test()
{
              printf( "Hello World");  //text plus integer8 (Byte)
             printf( "\n\r");           
             putc('\r');
              putc('\r');           
              putc('\n') ;   
              putc('\n') ; 
             
              printf("testAAA") ;
             
                printf("\n \r1234 ") ; 
             
                putc('\r');
                 putc('\n') ;
                 
              printf("5678") ;
             
               putc('\r');
                 putc('\n') ;
                 
                printf("\n\rtest JJBBBBa ") ; 
               
                putc('\r');
                 putc('\n') ;

)

The putc were added for test, as the control char within the printf did not work.

I have different outputs depending if hiperterminal or YAT is used for display, but in both the control characters are not working as expected.

------------------------------------
with YAT I get:

Hello World<LF><CR><CR>
<LF><LF><CR>testAAA<LF><CR>1234
5678
<LF><CR>---test JJBBBBa

-------------------------------------------------------------

no hiper terminal have

Hello World
testAAA
1234
5678
---test JJBBBBa

(With many blank lines in between, that appeared only when I do a copy to clipboard, if not the screen lock as above).
-------------------------------------------------------


Any hint where should I look, I am kind of lost.

Thanks
jujo
temtronic



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

View user's profile Send private message

PostPosted: Fri Jan 05, 2018 7:38 pm     Reply with quote

Every 'terminal program' has options for how 'control characters' like \r and \n are to be used. Some, for example, will automatically generate a new line if a carriage return is seen.
I use RealTerm, have for years as it can be setup to show the 'raw data' coming in as you can program it to handle CR, LF as you want it to.

Jay
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Fri Jan 05, 2018 8:48 pm     Reply with quote

Quote:
Any hint where should I look, I am kind of lost.

Post an example of what you expected to see, if it worked correctly.
temtronic



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

View user's profile Send private message

PostPosted: Sat Jan 06, 2018 6:22 am     Reply with quote

I also notice the '---' that appear in your 'output' but are NOT in your 'code'...
that's a huge concern !

Jay
Ttelmah



Joined: 11 Mar 2010
Posts: 19195

View user's profile Send private message

PostPosted: Sat Jan 06, 2018 9:03 am     Reply with quote

Take a deep breath.

If you look at your YAT output:
Code:

Hello World<LF><CR><CR>
<LF><LF><CR>testAAA<LF><CR>1


and compare with your code:
Code:

              printf( "Hello World");  //text plus integer8 (Byte)
             printf( "\n\r");           
             putc('\r');
              putc('\r');           
              putc('\n') ;   
              putc('\n') ;
             
              printf("testAAA") ;
             
                printf("\n \r1


Every \r (carriage return), is being displayed (as <CR>), and every \n (line feed) is also appearing (as <LF>).

You obviously have this setup to display controls rather than act on them, hence the difference to Hyperterm (Advanced terminal settings - the control characters setting for YAT).

The Hyperterm is giving what would be expected (\n moves it to the next line, \r moves back to the left hand column).

The only 'fault' seems to be in the extra --- already noted by Temtronic.

As PCM_programmer says, what do you expect the output to be?.
jujoab



Joined: 05 Aug 2017
Posts: 41
Location: brazil

View user's profile Send private message

PostPosted: Sat Jan 06, 2018 10:39 am     Reply with quote

hi

I think I detected the problem, as being the "usb to serial adapter". I will be able to test sometime next week when the new and different brand adapter will arrive. So i think any further work on subject is nor justiofied until such test is done.

Meanwhile, let me answer some of the questions.

If I change the EOL sequence on the YAT to none, i get following:

Hello World<LF><CR><CR><CR><LF><LF><LF><CR>testAAA<LF><CR>1234 <CR><LF>5678<CR><LF><LF><CR>---test JJBBBBa <CR><LF>Hello World<LF><CR><CR><CR><LF><LF>

Instead of <cr><lf> as the default setup which prints:

Hello World<LF><CR><CR>
<LF><LF><CR>testAAA<LF><CR>1234
5678
<LF><CR>---test JJBBBBa
so I conclude the setup is ok.

I have same setup on the hyper terminal.

----------------------------------------------------------------------------
On the question of what I expect to see, i go back to original test:
Code:

void test11 ()
          {
                printf( "\n\rHello World");  //text plus integer8 (Byte)

   
              printf("\n\rtestAAA") ;
             
                     
             printf("\n\r1234 ") ; 
               
              printf("\n\r5678") ;
                     
                printf("\n\r---test JJBBBBa ") ; 
                                 
             
          }

where I expect to see

Hello World
testAAA
1234
5678---test JJBBBBa

but instead I get

<LF><CR>Hello World<LF><CR>testAAA<LF><CR>1234 <LF><CR>5678<LF><CR>---test JJBBBBa

thanks a lot to all

jujoab
jujoab



Joined: 05 Aug 2017
Posts: 41
Location: brazil

View user's profile Send private message

PostPosted: Sat Jan 06, 2018 10:43 am     Reply with quote

Forgot to ask.

Do you know a simple way to send the messages from the pic to the PC using bluetooth or wifi ? Like having a terminal program at the PC able to display whatever is sent from the PIC ?

thanks
jujoab
temtronic



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

View user's profile Send private message

PostPosted: Sat Jan 06, 2018 11:03 am     Reply with quote

<cr> <lf> text
means you've got the terminal program configured to SHOW control characters. You'll have to see the options for display for your terminal program and turn off or disable or whatever they call it to NOT display control characters ( or unprintable characters).

as for sending data via wireless to a PC screen. how depends on hardware for the PIC, remember most peripherals will be 3 volts...
as for a PC terminal program, any high level language will work QB45, C++,DELPHI,etc. THAT depends upon you. I use DELPHI for the PC side of projects as it produces tight, transportable code INDEPENDENT of Windows and DLLs !

Jay
jujoab



Joined: 05 Aug 2017
Posts: 41
Location: brazil

View user's profile Send private message

PostPosted: Sat Jan 06, 2018 11:48 am     Reply with quote

temtronic wrote:
<cr> <lf> text
means you've got the terminal program configured to SHOW control characters. You'll have to see the options for display for your terminal program and turn off or disable or whatever they call it to NOT display control characters ( or unprintable characters).

as for sending data via wireless to a PC screen. how depends on hardware for the PIC, remember most peripherals will be 3 volts...
as for a PC terminal program, any high level language will work QB45, C++,DELPHI,etc. THAT depends upon you. I use DELPHI for the PC side of projects as it produces tight, transportable code INDEPENDENT of Windows and DLLs !

Jay



thanks

i have tried booth on the YAT:


quote
f I change the EOL sequence on the YAT to none, i get following:

Hello World<LF><CR><CR><CR><LF><LF><LF><CR>testAAA<LF><CR>1234 <CR><LF>5678<CR><LF><LF><CR>---test JJBBBBa <CR><LF>Hello World<LF><CR><CR><CR><LF><LF>

Instead of <cr><lf> as the default setup which prints:

Hello World<LF><CR><CR>
<LF><LF><CR>testAAA<LF><CR>1234
5678
<LF><CR>---test JJBBBBa
so I conclude the setup is ok.

thanks

jujoab
jujoab



Joined: 05 Aug 2017
Posts: 41
Location: brazil

View user's profile Send private message

PostPosted: Tue Jan 09, 2018 10:38 pm     Reply with quote

Thanks to all.

I replaced the usb to serial converter and problem went away.

jujoab
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