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

TX/RX module

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







TX/RX module
PostPosted: Tue Dec 09, 2008 5:14 am     Reply with quote

Hi !
Please be so kind and drop some suggestion on project that am working on.

I want to make wireless TX/RX transmitting between two same RX/TX transceivers. Working frequency is 433MHZ-a and each device should have keyboard. The output of the transceiver device will have few different ports ... like serial port etc.

Should i choose some commercial RT/TX transceiver or can i make all this with some PICMICRO ?

Thank you for your time !
NewGuy2008
Guest







PostPosted: Tue Dec 09, 2008 7:09 am     Reply with quote

rfPIC12F675H should be an OK choice.

What's the maximum transmitting range ( can't find in data sheet ) and can I increase this to 2 KM ( of course if FCC allows ).

Regards!
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Tue Dec 09, 2008 12:54 pm     Reply with quote

Quote:
rfPIC12F675H should be an OK choice.
What's the maximum transmitting range ?

These are Microchip questions. Notice their huge forum:
http://forum.microchip.com/

To answer your question, go to the search page
http://forum.microchip.com/search.aspx
and type in:
Quote:
rfPIC range
Guest








Serial Communication Problem
PostPosted: Tue Dec 09, 2008 10:01 pm     Reply with quote

Hi all,

I also need to design a intermediate node which has the capability of receiving and transmitting data using serial communication. Here I'm going to use 16F877A micro controller. So I have written a program (with the help of some code samples posted on this forum). it has been posted below.

I needs to receive 16 byte long string at a time and transmit the same string back. Actually I need to receive the 16 byte long string and do some modification to the string and transmit it to the next station. If the receiving string can be sent back without any error, I can do some modification to the string and send it again.

I simulated the below code several times using PIC simulator IDE and also on cct. But both of them doesn't give the correct output. For an example let say I send the string "ThisIsTheTestSt$" as the input it doesn't give the same string as the output(gives some of the characters of the above string with some garbage values).

If I remove the line "memset(buffer,0,sizeof(buffer));" and send the same string, again it doesn't send the whole string back and it sends it with some additional garbage values. When I send another 16byte string, it doesn't capture second string also.

So I couldn't figure out the reason and spent more than a week on it.
Please be kind enough to help me to go through this barrier. If I have done some thing wrong on the code, please be kind enough to mention it here.

Thank you very much to you all and any help regarding my matters are highly appreciated...!


Code:

#include <16F877A.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES WRT_50%                  //Lower half of Program Memory is Write Protected

#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

  #include <math.h>
  #include <stdio.h>
  #include <stddef.h>
  #include <stdlib.h>
  #include <stdlibm.h>
  #include <string.h>
 
#define MAXBUF (16)
#define DELIM ('$')
#define isempty(buff,free,in,out,size) (free>=size)
#define isfull(buff,free,in,out,size) (free<2)
#define tobuff(buff,free,in,out,size,chr) {buff[in++]=chr; --free; in=(in & (size-1));}
#define STBUFF (16)
#byte TXREG=0x19
#byte PIR1 = 0x0c
#bit TXIF=PIR1.4

char buffer[MAXBUF+1];   
int8 numPos=0;
int1 rcvd_uart = False;
int RSTcount,RSTin,RSTout;
unsigned int RSTbuff[STBUFF+1] = "";

unsigned int RSTfrom(){         
   static unsigned int temp;
   temp=RSTout;
   RSTout=(++RSTout) & (STBUFF-1);
   temp=(RSTbuff[temp]);
   RSTcount++;
   return(temp);
}


void tchar(unsigned int chr) {
   if((TXIF==0) && (isempty (RSTbuff,RSTcount,RSTin,RSTout,STBUFF))) {         
      while (TXIF==0) ;                                                         
         TXREG=chr;                                                             
      }
      else {                                                                   
         while (isfull(RSTbuff,RSTcount,RSTin,RSTout,STBUFF)) {
            if (TXIF){           
               TXREG=RSTfrom();                                                 
            }
         }   
         tobuff(RSTbuff,RSTcount,RSTin,RSTout,STBUFF,chr);                     
      }
   enable_interrupts(INT_TBE);                                                 
}

#int_RDA
void  RDA_isr(void)
{
   int16 temp;
   temp=getc();         
   if (rcvd_uart==false){
      buffer[numPos] = temp;
   }
   if (temp==DELIM){
      rcvd_uart = true;             
      buffer[numPos+1]='\0';               
   }
   else{
      numPos++;
      if (numPos==MAXBUF) numPos=MAXBUF-1;   
   }   
}       

#int_TBE
void  TBE_isr(void){
   if (!isempty(RSTbuff,RSTcount,RSTin,RSTout,STBUFF)) {
      TXREG=RSTfrom();
   }
   else{
      DISABLE_INTERRUPTS(INT_TBE);   
   }
}

void main()
{
   int16 pwm_duty = 50;
   int a;
   
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DIV_BY_1,24,1);
   setup_ccp1(CCP_PWM);
   set_pwm1_duty(pwm_duty);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);

   // TODO: USER CODE!!
   while(true){
      if(rcvd_uart){
         rcvd_uart=false; //Re-enable reception ASAP
      }
         for(a=0;a<8;a++){
            tchar(buffer[a]);
         }
         memset(buffer,0,sizeof(buffer)); //assign nul values to the array.     
   }
}






Thanks in advance,
Harshana
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