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

Serial Communication problem

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



Joined: 06 Feb 2006
Posts: 468
Location: Bali

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

Serial Communication problem
PostPosted: Fri Jul 14, 2017 8:53 pm     Reply with quote

Hi

I suppose I am making a very basic mistake and my serial communication don't work on any of my boards connected to the PC with a USB/TTL converter.
I wrote a short test program to try to find the problem for an available board that worked fine one month ago with the same communication with 10 bytes TX and RX:
Code:
/////////////////////////////////////////////////////////////////////                     
//serial communication test program
//CCS PCM C Compiler, Version 5.062, xxxxx
/////////////////////////////////////////////////////////////////////
#include <16F1847.h>
#device ADC=10
#FUSES NOWDT,PUT,MCLR                 
#FUSES NOPROTECT,NOCPD       
#FUSES BROWNOUT,BORV25
#FUSES INTRC_IO,PLL,NOCLKOUT,NOIESO,NOFCMEN
#FUSES NOWRT,STVREN,NOLVP
#use delay(internal=32M)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8,stream=PORT1,errors)
/////////////////////////////////////////////////////////////////////
#define flashled PIN_A0
short timerssincF=0;
int scomtxstartcnt=0;
int flashcnt=0;
short txupdateF=0;
int scomtxwords=0;
int scomtxw2=0;
int scomtxw3=0;
int scomtxw4=0;
int scomtxwchs=0;
short rxnewmsgF=0;
short rxfail=0;
int rxwords=0;
int rxdata0=0;
int rxdata1=0;
int rxdata2=0;
int rxdata3=0;
int rxdata4=0;
int rxdata5=0;
int rxwchs=0;
/////////////////////////////////////////////////////////////////////
#INT_TIMER1
void  TIMER1_isr(void)
{
      set_timer1(45536);
      timerssincF=1;
}
/////////////////////////////////////////////////////////////////////
void FUNCTIONS(void)
{
   if(timerssincF==1)
   {
      flashcnt++;   
      scomtxstartcnt++;
      timerssincF=0;
   }
//-------------------------------------------------------------------
   if(flashcnt>=25)
   {
      flashcnt=0;
      output_toggle(flashled);
   }   
//-------------------------------------------------------------------
   if(rxnewmsgF==1)
   {
      rxdata2=rxdata2;
      rxdata3=rxdata3;
      rxdata4=rxdata4;
      rxnewmsgF=0;
      txupdateF=1;
   }
//-------------------------------------------------------------------
   if((txupdateF==1)||(scomtxstartcnt==100))
   {
      scomtxw2=rxdata2;
      scomtxw3=rxdata3;
      scomtxw4=rxdata4;
      txupdateF=0;
      scomtxstartcnt=0;
      enable_interrupts(INT_TBE);   
   }
}
/////////////////////////////////////////////////////////////////////
#int_TBE
void TBE_isr(void)
{
   switch(scomtxwords)
   {
      case 0:
      {
         putc(85);
         scomtxwchs=85;   
         scomtxwords++;      
      }
      break;
      case 1:
      {
         putc(170);
         scomtxwchs=255;
         scomtxwords++;         
      }
      break;
      case 2:
      {
         putc(scomtxw2);
         scomtxwchs=scomtxwchs+scomtxw2;
         scomtxwords++;         
      }
      break;
      case 3:
      {
         putc(scomtxw3);
         scomtxwchs=scomtxwchs+scomtxw3;
         scomtxwords++;         
      }
      break;
      case 4:
      {
         putc(scomtxw4);
         scomtxwchs=scomtxwchs+scomtxw4;
         scomtxwords++;         
      }
      break;
      case 5:
      {
         putc(scomtxwchs);
         scomtxwords=0;   
         disable_interrupts(INT_TBE);            
      }
      break;
   }   
}
//-------------------------------------------------------------------
#INT_RDA
void  RDA_isr(void)
{
   switch(rxwords)
   {
      case 0:
      {
         rxdata0=getc();
         if (rxdata0==85)
         {
            rxwchs=85;
            rxwords=1;
         }
         else
         {
            rxwords=0;
         }   
      }
      break;
      case 1:
      {
         rxdata1=getc();
         if (rxdata1==170)
         {
            rxwchs=255;
            rxwords++;
         }
         else
         {
            rxwords=0;
         }         
      }
      break;
      case 2:
      {
         rxdata2=getc();
         rxwchs=rxwchs+rxdata2;
         rxwords++;         
      }
      break;
      case 3:
      {
         rxdata3=getc();
         rxwchs=rxwchs+rxdata3;
         rxwords++;                  
      }
      break;
      case 4:
      {
         rxdata4=getc();
         rxwchs=rxwchs+rxdata4;
         rxwords++;            
      }
      break;
      case 5:
      {
         rxdata5=getc();
         if (rxwchs==rxdata5)
         {
            rxnewmsgF=1;
            rxfail=0;
         }
         else
         {
            rxfail=1;
         }
         rxwords=0;   
      }
      break;
   }
}
/////////////////////////////////////////////////////////////////////

#ZERO_RAM

void main()
{
   setup_adc_ports(NO_ANALOGS);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);//65.5 ms overflow
   enable_interrupts(INT_TIMER1);
   disable_interrupts(INT_TBE);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   while(TRUE)
   {
      delay_cycles(2);
      FUNCTIONS();
   }
}

Working with YAT terminal
I am sending hex 55,AA,00,00,00,FF (FF as checksum)
I tested the two cables I have, both are returning what I am sending from the PC if TX/RX are short circuit.
Want to mention that this serial com I am working with for many years.
The flash led works correct.
Any help will be much appreciated.

Best wishes
Joe
temtronic



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

View user's profile Send private message

PostPosted: Sat Jul 15, 2017 5:12 am     Reply with quote

OK I was curious as you covered all of the basics....so I downloaded the datasheet.

That PIC has TX and RX available on several pins. I've never used it BUT I'm thinking you need to set some register to TELL the PIC who is RX and who is TX.
If you cut a really small 'SW loopback' program,compile, then dump the listing it should show the register being set/cleared to put TX and RX onto the pins you want.
If it doesn't, then I suspect a compiler bug but I don't have that PIC or compiler.

Maybe this helps ...

Jay
gjs_rsdi



Joined: 06 Feb 2006
Posts: 468
Location: Bali

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

PostPosted: Sat Jul 15, 2017 6:55 pm     Reply with quote

Hi Jay

Thank you for the answer
I am using the 16F1847 on small projects instead of the 18F26K22 because is 18 pin.
The serial communication worked in the past, now not working.
This is the LST of the rs232:
Quote:
.................... #use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8,stream=PORT1,errors)
*
003C: BTFSS PIR1.TXIF
003D: GOTO 03C
003E: MOVLB 03
003F: MOVWF TXREG
0040: MOVLB 00
0041: RETURN
*
0079: BTFSS PIR1.RCIF
007A: GOTO 079
007B: MOVLB 03
007C: MOVF RCSTA,W
007D: MOVLB 00
007E: MOVWF rs232_errors
007F: MOVLB 03
0080: MOVF RCREG,W
0081: MOVWF @78
0082: MOVLB 00
0083: BTFSS rs232_errors.1
0084: GOTO 088
0085: MOVLB 03
0086: BCF RCSTA.CREN
0087: BSF RCSTA.CREN
0088: MOVLB 00
0089: RETURN


Best wishes
Joe
gjs_rsdi



Joined: 06 Feb 2006
Posts: 468
Location: Bali

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

PostPosted: Sat Jul 15, 2017 7:18 pm     Reply with quote

Hi Jay (and other members)

Finally I found a board that works.
The LST:
Quote:
.................... #use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8,stream=PORT1,errors)
*
0050: BTFSS PIR1.TXIF
0051: GOTO 050
0052: MOVLB 03
0053: MOVWF TXREG
0054: MOVLB 00
0055: RETURN
*
00B0: BTFSS PIR1.RCIF
00B1: GOTO 0B0
00B2: MOVLB 03
00B3: MOVF RCSTA,W
00B4: MOVLB 00
00B5: MOVWF rs232_errors
00B6: MOVLB 03
00B7: MOVF RCREG,W
00B8: MOVWF @78
00B9: MOVLB 00
00BA: BTFSS rs232_errors.1
00BB: GOTO 0BF
00BC: MOVLB 03
00BD: BCF RCSTA.CREN
00BE: BSF RCSTA.CREN
00BF: MOVLB 00
00C0: RETURN

Except that the new software uses other ROM locations, can't find nothing wrong.

Best wishes
Joe
temtronic



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

View user's profile Send private message

PostPosted: Sun Jul 16, 2017 4:58 am     Reply with quote

hmm almost sounds like a PCB problem ?
You might consider staying with the 26K22, Yes a little bigger physically it does have MORE memory, peripherals,speed, etc. than the 1847 AND you've got experience with it. True it costs a little more BUT what is YOUR time worth? Even if you don't charge say $50/hr....you've probably spent 1-2 days( more??) chasing this nasty little problem. Time that you could have spent on another project or just relaxing.
My 'goto' chip is the 46K22 and now using the 26k22 for a 'smaller' project which seems to 'need' 2 more I/O pins !

Jay
gjs_rsdi



Joined: 06 Feb 2006
Posts: 468
Location: Bali

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

PostPosted: Wed Jul 19, 2017 11:38 pm     Reply with quote

Thanks for the answer Jay
I made already a few projects with the 16F1847 and they are working.
Will continue to find the problem

Best wishes
Joe
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Wed Jul 19, 2017 11:47 pm     Reply with quote

gjs_rsdi wrote:
Will continue to find the problem

Post your compiler version.
gjs_rsdi



Joined: 06 Feb 2006
Posts: 468
Location: Bali

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

PostPosted: Thu Jul 20, 2017 6:58 pm     Reply with quote

Hi PCM programmer

The compilers:
CCS PCH C Compiler, Version 5.059
CCS PCM C Compiler, Version 5.062

Best wishes
Joe
gjs_rsdi



Joined: 06 Feb 2006
Posts: 468
Location: Bali

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

PostPosted: Sat Jul 22, 2017 1:55 am     Reply with quote

Hi
Everything works OK now.
I think the problem was that the computer don't like USB extension cables.

Thanks all and best wishes.
James
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