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

Low cost RF wireless module..
Goto page 1, 2  Next
 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
chin0609



Joined: 13 Sep 2011
Posts: 18

View user's profile Send private message

Low cost RF wireless module..
PostPosted: Sat Oct 01, 2011 6:33 am     Reply with quote

I have a pair of RF module (transmiter and receiver)
transmiter: http://www.cytron.com.my/viewProduct.php?pcode=RF-TX-315&name=RF%20Transmitter%20315MHz
Receiver: http://www.cytron.com.my/viewProduct.php?pcode=RF-RX-315&name=RF%20Receiver%20315MHz

How to use RF Module?
I measure the voltage at the data output its not stable? (multimeter measure)
My friend say need use UART how to use it on my PIC16F877A?
chin0609



Joined: 13 Sep 2011
Posts: 18

View user's profile Send private message

PostPosted: Sat Oct 01, 2011 7:13 am     Reply with quote

Any sample code for transmitter and receiver part? I just need to do eg. "when transmitter pin data high, receiver pin data also high".
temtronic



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

View user's profile Send private message

PostPosted: Sat Oct 01, 2011 3:46 pm     Reply with quote

Well you could go to the website you linked too, then download the application (PR16 I think) which has code for both tx and rx coded in C. You'll have to translate it into CCS C but it is all there, you just have to read the information that Cytron supplies !
asmboy



Joined: 20 Nov 2007
Posts: 2128
Location: albany ny

View user's profile Send private message AIM Address

PostPosted: Sat Oct 01, 2011 4:23 pm     Reply with quote

I had a customer pay me to test if he could use this type of cheap gadget for a power monitoring instrument.

The links can be VERY noisy
and i found it failed pretty EZ when i tried to link ordinary RS_232 TTL level signals - ala PIC direct TX/RX.

The test it was not pretty unless the units were close enough to hook up with a wire anyway.

A custom NRZ code might fare better.

http://en.wikipedia.org/wiki/Non-return-to-zero

---
but when i found out that as a class these were tending NOT to be FCC approved - i bailed

good luck
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Sat Oct 01, 2011 5:16 pm     Reply with quote

Cytron has sample code for the Hi-Tech compiler for the RF transmitter
and receiver on this page:
http://www.cytron.com.my/viewProduct.php?pcode=PR16
The download link is called:
Quote:

Sample Source Code July 2010

You can translate it to CCS.

1. Get rid of all the UART setup code which talks to PIC registers and just
put in the usual #use rs232() statement above main().

2. Get rid of the 7-segment code. You don't need it. Display the result
on an LCD, or on a RS-232 terminal window on a PC. (By using a different
RS-232 stream on different PIC pins).

3.The uart_send() function is the same as the CCS putc() function.

I think there is sample code for this type of RF link in the forum archives
(maybe for a different brand. Maybe Sparkfun ?) but I don't have time
to search for it now.
chin0609



Joined: 13 Sep 2011
Posts: 18

View user's profile Send private message

PostPosted: Sat Oct 01, 2011 7:04 pm     Reply with quote

I really don't understand and have no idea how to translate the code to ccs after i see it. I am not familiar on both.
Can someone volunteer to translate sample code for me? I no need 7 segment. I just need pin high and low only. When pin high LED turn on. Just that. Appreciate.

Here the code provide in Hi-tech
transmiter:

Code:

//===================================================================================
//   include
//===================================================================================
#include <pic.h>

//===================================================================================
//   configuration
//===================================================================================
__CONFIG (0x3F32);

//===================================================================================
//   define
//===================================================================================
#define   inc_button   RA1
#define dec_button    RA2
#define   send_button   RA3
#define display      PORTB

#define SYNC_DATA      0x00
#define HEADER         0xaa

//===================================================================================
//   function prototype
//===================================================================================
void uart_send(unsigned char data);
void send_packet(unsigned char data);

//   main function
//===================================================================================
void main(void)
{
   //assign variable
   unsigned char num,no;
                              //7 segment display
   unsigned char _7seg[16]={0b01111111,0b00001101,0b10110111,0b10011111,   //0,1,2,3
                      0b11001101,0b11011011,0b11111011,0b00001111,   //4,5,6,7
                      0b11111111,0b11011111,0b11101111,0b11111001,   //8,9,A,B
                      0b01110011,0b10111101,0b11110011,0b11100011};   //C,D,E,F

   ADCON1= 0x06;            //configure PortA as digital I/O

   TRISA = 0b111111;         //configure PORTA input
   TRISB = 0b00000000;         //configure PORTB as output
   
   //setup USART
   BRGH = 0;               //baud rate low speed option
   SPBRG = 255;            //set boud rate to 1200bps for 20Mhz crystal
   TX9 = 0;               //8-bit transmission
   TXEN = 1;               //enable transmission
   SYNC = 0;               //asynchronous
   
   SPEN = 1;               //enable serial port
   
   num=0;   
   no=0;
   display=_7seg[num];

   while(1)                  //infinity loop
   {
      if(inc_button==0)         //increase number per press
      {
         if(num==15) num=0;      //back to 0 after F
         else num+=1;         //one increment

         display=_7seg[num];      //display number on 7 segment

         while(inc_button==0);   //wait until the button is released
      }
   
      else if(dec_button==0)      //decrease number per press
      {
         if(num==0) num=15;      //go to F after 0
         else num-=1;         //one decrement

         display=_7seg[num];      //display number on 7 segment

         while(dec_button==0);   //wait until the button is released
      }

      else if(send_button==0)      //send the desired number
      {
         no=num;
         while(send_button==0);   //wait until the button is released
      }   
     
     
      send_packet(no);         //continuous send data
   }     
}

//===================================================================================
//   functions
//===================================================================================
void uart_send(unsigned char data)
{   
   while(TXIF==0);            //only send the new data after
   TXREG=data;               //the previous data finish sent
}


void send_packet(unsigned char data)
{
   unsigned char i;
   
   // Buffer for the data in one packet.
   unsigned char buffer[3];
   
   // Byte 0 is the header.
   buffer[0] = HEADER;
   
   // Byte 1 is the data.
   buffer[1] = data;
   
   // Byte 2 is the checksum.
   buffer[2] = (unsigned char)(HEADER + data);
   
   // Clocking for a while before sending the data so that the Tx and Rx are in sync.
   for (i = 0; i < 7; i++) uart_send(SYNC_DATA);
   
   // Transmit the packet using UART.
   for (i = 0; i < 3; i++) uart_send(buffer[i]);
}


Receiver:
Code:

//   include
//===========================================================================
#include <pic.h>

//===========================================================================
//    configuration
//============================================================================
__CONFIG (0x3F32);

//============================================================================
//   define
//============================================================================
#define display         PORTB
#define HEADER         0xaa

//=============================================================================
//   function prototype
//=============================================================================
unsigned char uart_rec(void);
unsigned char read_packet(void);

//============================================================================
//   main function
//============================================================================
void main(void)
{
   //assign variable
   unsigned char num,no;
                              // 7 segment display
   unsigned char _7seg[16]={0b01111111,0b00001101,0b10110111,0b10011111,   //0,1,2,3
                      0b11001101,0b11011011,0b11111011,0b00001111,   //4,5,6,7
                      0b11111111,0b11011111,0b11101111,0b11111001,   //8,9,A,B
                      0b01110011,0b10111101,0b11110011,0b11100011};   //C,D,E,F

   //set I/O input output
   TRISB = 0b00000000;         //configure PORTB as output
     
   //setup USART
   BRGH = 0;               //baud rate low speed option
   SPBRG = 255;            //set boud rate to 1200bps for 20Mhz crystal
   SPEN = 1;               //enable serial port
   RX9 = 0;               //8-bit reception
   CREN = 1;               //enable reception

   num=0;
   display=_7seg[num];

   while(1)               //infinity loop
   {
      CREN=1;                     //enable continuos receive
      if(OERR==0) no=read_packet();   //receive sata if overrun error free
      else CREN=0;               //if overrun error, disable continuos receive
     
      if(no <= 0x0f) num=no;         //only accept the value from 0 to f

      display=_7seg[num];
   }
}

//==================================================================================
//   functions
//===================================================================================
unsigned char uart_rec(void)   //receive uart value
{
   unsigned char rec_data;
   while(RCIF==0);            //wait for data
   rec_data = RCREG;
   return rec_data;         //return the received data
}



unsigned char read_packet(void)
{
   // Buffer for received byte.
   unsigned char received_byte;
   
   // Counter to indicate the current position of the received data packet.
   static unsigned char counter = 0;
   
   // Buffers for the data and checksum.
   unsigned char data;
   unsigned char checksum;
   
   
   // We loop until the checksum is correct.
   do {
      // We will ignore the sync data and assume the header byte is the start of packet.
      // Keep reading until the header byte is received.
      while (uart_rec() != HEADER);
     
      // The following byte shoulde be the data byte.
      data =    uart_rec();
     
      // Then the last byte is the checksum.
      checksum =    uart_rec();
   } while (checksum != (unsigned char)(HEADER + data));
   
   // If the checksum is correct, return the data.
   return data;
}
temtronic



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

View user's profile Send private message

PostPosted: Sat Oct 01, 2011 7:34 pm     Reply with quote

Unless someone has a LOT of time of their hands AND those modules ,it is unlikely that anyone can help.I do have the time, but do not have the hardware.
The best solution is for you to take the time and experiment with PICs and C. There are lots of C books available and even CCS kindly supplies reasonably documented working examples of their code.
No one just 'gave me' working code when I started out.Had to read,read, self teach,read some more, burn my fingers soldering,etc. to LEARN how to cut Z80 assembler, Microsoft BASIC,COSMAC1802 assembler, PDP-8,PDP-11 assembler,8051 assembler, 8052 basic,FORTRAN,FORTH,C++,8088 assembler, probably anoth 10 or 12 languages as well as PIC assembler and CCS C. The latter I now do as a hobby,something to keep the brain operational.
The 'Internet' is an extremely powerful tool that you should use,make Google your best friend.You should put in at least 4 hours everyday for 10 or 12 years programming PICs. THEN and only then will you appreciate and comprehend what marvellous technology they are.

I understand that English is not everyone's first language but start small(aka 'Hello World') and learn by doing it yourself. CCS C is very powerful and I know you will learn more and understand far better if you do it yourself !

That being said , if someone wants a 'cross-compiler' cut, I'd be happy to do so for an appropriate fee,winter's coming...brrr.....
chin0609



Joined: 13 Sep 2011
Posts: 18

View user's profile Send private message

PostPosted: Sat Oct 01, 2011 9:01 pm     Reply with quote

ok i can keep tried but i don't have a lot of time..because it regarding my final year project ..

btw can provide any useful link to study the ccs programming?
etc: ebook, sample code..
temtronic



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

View user's profile Send private message

PostPosted: Sun Oct 02, 2011 6:02 am     Reply with quote

Here we go again..
hmm.. FINAL year project.
...so you've been in school for 2..3..4 years and now decide to 'learn' PICs and program in C ,with ,what less than 6 months before graduation ??
Guess they don't teach 'time management' in FIRST year . Too bad, because you only have 2 options. One, steal code from someone else or 'burn the midnight oil' every night and teach yourself. While the last option is the best(especially with the vast resources of the Internet) because you would acually LEARN about PICs and CCS C, you'll probably do number one and cheat,never to learn what PICs are and what they can do.On the surface you'll have to contend with power supply issues, RF
design and layout,hardware construction errors,sloppy code,PC software problems,fried components,grounding issues,EMI,plus the 'what now factor' or you could get really,really lucky and it all works the first time for you.

The program requires less than one page of code,is not hard or complicated and requires about 5 easy evening's work.

Night one,construct 2 test boards and test with 'blink LED' programs.

Night two,cut code to send data from one board to the other.easy night!

Night three,cut code to use the RF tx/rx modules,test with night 2 code.

Night four, debug WHY code/modules failed last night .Not so easy.

Night five,confirm final code works,printout report and code to hand in.

Done, finished, end of report.

-30-
chin0609



Joined: 13 Sep 2011
Posts: 18

View user's profile Send private message

PostPosted: Sun Oct 02, 2011 6:37 am     Reply with quote

temtronic can translate the code for me? just try pls.. just translate from the High tech code to ccs code...
so i can test it in my program..
thanks.
temtronic



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

View user's profile Send private message

PostPosted: Sun Oct 02, 2011 7:46 am     Reply with quote

Code is easy to translate, took me less then 1 hour with 2 coffee breaks.
Sorry but unable to test as I do not have those modules and will send you my version of that code as I do not give code that I have not tested 100%. You should be able to accomplish it in less than a day or two, maybe 12-14 hours of real benchwork.
BTW the last 'final project' I did was in 1974 when I received my Honours in Avionics. Things sure have changed since then !
bkamen



Joined: 07 Jan 2004
Posts: 1615
Location: Central Illinois, USA

View user's profile Send private message

PostPosted: Sun Oct 02, 2011 10:48 am     Reply with quote

temtronic wrote:
Here we go again..
hmm.. FINAL year project.
...so you've been in school for 2..3..4 years and now decide to 'learn' PICs and program in C ,with ,what less than 6 months before graduation ??



yea.. I work for a top10 engineering university and I can tell you it's not any better.
_________________
Dazed and confused? I don't think so. Just "plain lost" will do. :D
asmboy



Joined: 20 Nov 2007
Posts: 2128
Location: albany ny

View user's profile Send private message AIM Address

PostPosted: Sun Oct 02, 2011 12:36 pm     Reply with quote

Beyond the FCC problem with incorporating these particular "links".
Did I forget to mention that there is no useful
DC restoration on these links either??

If this pair of TX/RX modules was intended as an actual component of a real world, aimed at commercial - design - all that awaits the adopter is trouble -

all politely - IMHO that is
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Sun Oct 02, 2011 2:36 pm     Reply with quote

Quote:

btw can provide any useful link to study the ccs programming?
etc: ebook, sample code.

The following post has many links to tutorials on CCS, and the C
language, and PIC microtrollers:
http://www.ccsinfo.com/forum/viewtopic.php?t=46384&start=3
bkamen



Joined: 07 Jan 2004
Posts: 1615
Location: Central Illinois, USA

View user's profile Send private message

PostPosted: Sun Oct 02, 2011 2:46 pm     Reply with quote

get yourself the book "The C Programming Language" by Kergnihan & Ritchie.

It's the definitive reference on 'C'.

-Ben
_________________
Dazed and confused? I don't think so. Just "plain lost" will do. :D
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Goto page 1, 2  Next
Page 1 of 2

 
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