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 printf using terminal

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



Joined: 05 Dec 2015
Posts: 5

View user's profile Send private message

Problem with printf using terminal
PostPosted: Tue Dec 08, 2015 12:23 pm     Reply with quote

Hey guys, I'm new here and I'm having some problems with the serial com.
I'm using a RS232 to USB converter and Tera Term to emulate a terminal in my computer. The thing is \f isn't working in this terminal and the information keeps coming over and over without erasing the old information. When I test the code in the virtual terminal on ISIS, it works.
I'm really going crazy here.

The program:

Code:
#include <Serial.h>


int x=0;
int y=0;
float value=0;


void main()
{

   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_vref(FALSE);
   setup_comparator(NC_NC_NC_NC);

   //TODO: User Code
while(true){
   value=3.4+(3.4*x);
   if(input(pin_a0) && y==0){
      x++;
      delay_ms(20);
      printf("\fNumber          Value");
      delay_ms(20);
      printf("\n      %u                        ",x);
      printf("$%f",value);
      y=1;
      }
   if(!input(pin_a0)){
      y=0;
   }
}
}



Ps: Sorry 'bout my bad english
Ttelmah



Joined: 11 Mar 2010
Posts: 19552

View user's profile Send private message

PostPosted: Tue Dec 08, 2015 1:59 pm     Reply with quote

The command sequence for a VT terminal to clear the screen, is <ESC>[2J, not the 'form feed'. So "\x1B[2J" in printf.

You can set Tera term to automatically clear the screen on a page scroll, with the setting "ScrollWindowClearScreen=on", in the configuration file/
grogue



Joined: 05 Dec 2015
Posts: 5

View user's profile Send private message

PostPosted: Tue Dec 08, 2015 3:06 pm     Reply with quote

Thanks for the answer, Ttelmah!

I did everything you said but still not working.
The ScrollWindowClearScreen was on. I changed it to off just to test it but it changed nothing.

With the changes, the program is this:


Code:
#include <Serial.h>


int x=0;
int y=0;
float value=0;


void main()
{

   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_vref(FALSE);
   setup_comparator(NC_NC_NC_NC);

   //TODO: User Code
while(true){
   value=3.4+(3.4*x);
   if(input(pin_a0) && y==0){
      x++;
      delay_ms(20);
      printf("\x1B[2J Number       Value");
      delay_ms(20);
      printf("\n      %u                        ",x);
      printf("$%f",value);
      y=1;
      }
   if(!input(pin_a0)){
      y=0;
   }
}
}


Is this alright?
newguy



Joined: 24 Jun 2004
Posts: 1909

View user's profile Send private message

PostPosted: Tue Dec 08, 2015 3:32 pm     Reply with quote

Change this:

Code:
printf("\x1B[2J Number       Value");

to this:

Code:
printf("%x[2J Number       Value", 0x1b);


I know that there is probably a shortcut to getting printf to insert the escape via some sort of escape sequence (i.e. "\something"), but I have no idea what that is.
grogue



Joined: 05 Dec 2015
Posts: 5

View user's profile Send private message

PostPosted: Tue Dec 08, 2015 4:01 pm     Reply with quote

Hey newguy, thanks for the answer!

Still not working. I'm receiving informations such as: "30.601[b2J Number Value" , "$27.201b[2J Number Value", etc.

The terminal is not erasing the old information and I don't know why, but the float number is coming before "Number".
grogue



Joined: 05 Dec 2015
Posts: 5

View user's profile Send private message

PostPosted: Tue Dec 08, 2015 4:03 pm     Reply with quote

In fact, the first time I use it the information is "1b[2J Number". The float number just appear after this first information.
newguy



Joined: 24 Jun 2004
Posts: 1909

View user's profile Send private message

PostPosted: Tue Dec 08, 2015 6:03 pm     Reply with quote

I'm at a loss. I thought that the compiler might not recognize the "\x" escape sequence, so that's why I suggested what I did.

Where your // TODO: User code line is, try inserting

printf("\n\n\n\n\n");

I don't know if that will help but my line of thought is that the PC or the serial-USB dongle is having issues synchronizing the data stream from your PIC.

You could also alter your program to simply printf() a dummy sentence - simply to help you diagnose the proper screen wipe/refresh character sequence, then put your desired code back in.

Try printing

Hello 1
(delay 1 second)
(screen erases)
Hello 2
(delay 1 second)
(screen erases)

etc.
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Tue Dec 08, 2015 10:59 pm     Reply with quote

TeraTerm has a 10000 line buffer. If I go into the Setup / Window menu
in TeraTerm, and untick the tickbox for "Scroll Buffer", then the
following program works.

It displays blocks of lines of x, y, and z. It clears the screen and
homes the cursor after displaying each block:
Code:

#include <18F4620.h>
#fuses INTRC_IO, NOWDT
#use delay(clock=4M)
#use rs232(baud=9600, UART1, ERRORS)

//=====================================
void main()
{
int8 i;

for(i=0; i<10; i++)
   {
    printf("Line %u xxxxxxxxxxxxxxxxxxxxxxxxx \n\r", i);
   }

delay_ms(2000);
printf("\x1b[2J"); // Clear screen
printf("\x1b[H");  // set cursor to 0,0

for(i=0; i<10; i++)
   {
    printf("Line %u yyyyyyyyyyyyyyyyyyyyyyyyy \n\r", i);
   }

delay_ms(2000);
printf("\x1b[2J"); // Clear screen
printf("\x1b[H");  // set cursor to 0,0

for(i=0; i<10; i++)
   {
    printf("Line %u zzzzzzzzzzzzzzzzzzzzzzzzz \n\r", i);
   }

delay_ms(2000);
printf("\x1b[2J"); // Clear screen
printf("\x1b[H");  // set cursor to 0,0

while(TRUE);
}
grogue



Joined: 05 Dec 2015
Posts: 5

View user's profile Send private message

PostPosted: Thu Dec 10, 2015 10:46 pm     Reply with quote

PCM programmer, thank you very much!
The problem was really the scroll buffer option! Now it works like a charm! Wink

Thanks everybody! You guys helped me a lot! Very Happy
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