Need help regarding RF 2.4g

Im really lost rite now…I’ve connected my TRF 2.4g transiever to ATMEL 89c51ed2 microcontroller, the whole circuit is operating at about 3.2 volts, im using a self modified version of the sample code avalible in one of the forum topics but nothing is being recieved… :cry:

can Any one plz help me out…im posting the code here for u ppl…plz tell me if there is anything wrong

////Reciever code/////

#include <stdio.h>

#include <AT89X52.H>

#include<intrins.h>

//#include<spi.h>

unsigned char data_array[4];

#define RX_CE P0_3

#define RX_CS P0_2

#define RX_CLK1 P0_0

#define RX_DATA P0_1

#define RX_DR P0_4

#define status_LED P0_5

char bdata temp;

sbit abc=temp^0;

void ser_init(void);

void delay_ms(int x);

void spi_send(char c);

void configure_receiver(void)

{

printf(“Configuration started:::::\n”);

RX_CE = 0; //CE set for config

RX_CS = 1; //CS set for config only time CS is used is to configure

delay_ms(5);

spi_send(0x20); //Data1_W - 32 bits in payload 4Bytes

spi_send(0x00); //ADDR2 - 1 //Dont use Addr2 so set them all to zero

spi_send(0x00); //ADDR2 - 2

spi_send(0x00); //ADDR2 - 3

spi_send(0x00); //ADDR2 - 4

spi_send(0x00); //ADDR2 - 5

spi_send(0xAA); //ADDR1 - 1 //This is our Addr to rx on

spi_send(0x55); //ADDR1 - 2 //This must be the same addr transmitted

spi_send(0xFF); //ADDR1 - 3

spi_send(0x00); //ADDR1 - 4

spi_send(0xAA); //ADDR1 - 5

spi_send(0xA3); //ADDR_W - 40 bits wide - 16bits -CRC en

spi_send(0x4F); //RF Full pwr- 16mhzclk- 250kbs-shkburst-1 chan only

spi_send(0x05); //RF Channel #2 and direction & TX/RX - RX = 1

RX_CS=0; //CS Clr CE already clr

delay_ms(5);

//Start monitoring the air

RX_CE = 1; //CE set

printf(“Configuration Ended:::::\n”);

}

void receive_data(void)

{

int i,j;

//CE = 0;//Power down RF Front end CE up to you if you want to do this

//Erase data array so we know we are looking at actual received data

data_array[0] = 0x00;

data_array[1] = 0x00;

data_array[2] = 0x00;

data_array[3] = 0x00;

for(i = 0 ; i < 4 ; i++) //4 bytes

{

for(j = 0 ; j < 8 ; j++) //8 bits each

{

temp <<= 1;

abc = RX_DATA;

RX_CLK1 = 1;

RX_CLK1 = 0;

}

data_array = temp; //Store this byte
}
//CE = 1; //Power up RF Front end if you disabled it
}
// Declare your global variables here
void main(void)
{
// Input/Output Ports initialization
//Porta initialization set up with 8 led for output
ser_init();
status_LED=0;
configure_receiver(); //Set up the receiver
while (1)
{
if(RX_DR==1) //data pin goes high when it has data
{
status_LED=1;
receive_data(); //start transferring data from RF24g
printf(“\n\rData Received:\n\r”, 0);
printf(“[0] : %h\n\r”, data_array[0]);
printf(“[1] : %h\n\r”, data_array[1]);
printf(“[2] : %h\n\r”, data_array[2]);
printf(“[3] : %h\n\r”, data_array[3]);
delay_ms(100);
status_LED=0;
}
}
}
void delay_ms(int x)
{
int y, z;
for ( ; x > 0 ; x–)
for ( y = 0 ; y < 4 ; y++)
for ( z = 0 ; z < 176 ; z++);
}
void spi_send(char c)
{
unsigned int i;
unsigned char mask=0x80;
for(i=0;i<8;i++)
{

  • if(mask&c)*

  • RX_DATA=1;*

  • else RX_DATA=0;*

  • mask=cror(mask,1);*
    RX_CLK1 = 1;
    RX_CLK1 = 0;

  • }*
    }
    void ser_init(void)
    {
    SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */
    TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */
    TH1 = 0xFD; /* 9600 bauds at 11.059200 MHZ */
    TL1 = 0xFD;
    PCON = PCON & 0X80;
    TCON |= 0x40;
    TI=1;;
    }
    /////////////Transmitter code
    #include<stdio.h>
    #include<math.h>
    #include <AT89X52.H>
    #include<intrins.h>
    #define TX_CE P0_3
    #define TX_CS P0_2
    #define TX_CLK1 P0_0
    #define TX_DATA P0_1
    #define TX_DR P0_4
    #define status_LED P0_5
    void ser_init(void);
    void spi_send(char);
    void configure_transmitter(void);
    void delay_ms(int);
    void transmit_data();
    void main()
    {
    ser_init();
    status_LED=0;
    configure_transmitter();

  • while (1)*

  • {*

  • transmit_data(); //send addr and 4 bytes of data as per routine*

  • delay_ms(500); //wait .5 secs to send next packet*

  • status_LED=~status_LED;*

  • }*
    }
    void configure_transmitter(void)
    {
    //Config Mode
    printf(“NOW CONFIGURING TRANSMITER:::\n”);
    TX_CE = 0; TX_CS = 1;
    //Delay of 5us from CS to Data (page 30)
    delay_ms(5);
    /*config word Gives u lowest error rate, if u want a 8 byte payload
    just change Data1_W to 0b00001000. It operates in shockburst/250kbs
    16 bit crc on channel #2, full rf pwr, 1 channel rx only, 16mhz rf24g clk
    addr width 5 bytes IE 40bits
    */
    //All this is the same setup in the receiver bit 0 is changed to rx/tx as req
    spi_send(0X20); //Data1_W - 32 bits in payload 4 bytes
    spi_send(0x00); //ADDR2 - 1 //We only use 1 addr so set this to zero
    spi_send(0x00); //ADDR2 - 2
    spi_send(0x00); //ADDR2 - 3
    spi_send(0x00); //ADDR2 - 4
    spi_send(0x00); //ADDR2 - 5
    spi_send(0xAA); //ADDR1 - 1 //1 - 5 This is our tx and rx addr
    spi_send(0x55); //ADDR1 - 2
    spi_send(0xFF); //ADDR1 - 3
    spi_send(0x00); //ADDR1 - 4
    spi_send(0xAA); //ADDR1 - 5
    spi_send(0XA3); //ADDR_W - 40 bits wide - CRC en 16bits
    spi_send(0X4F); //Full pwr- 16mhzclk- 250kbs-shkburst-1 chan only
    spi_send(0X04); //RF Channel #2 and TX/RX - TX = 0 bit 0;
    //Configuration is actived on falling edge of CS (page 10)
    TX_CE = 0; TX_CS = 0;
    printf(“CONFIGURATION FINISHED\n”);
    }
    void delay_ms(int x)
    {
    int y, z;
    for ( ; x > 0 ; x–)
    for ( y = 0 ; y < 4 ; y++)
    for ( z = 0 ; z < 176 ; z++);
    }
    void spi_send(char c)
    {
    unsigned int i;
    unsigned char mask=0x80;
    for(i=0;i<8;i++)
    {

  • if(mask&c)*

  • TX_DATA=1;*

  • else TX_DATA=0;*

  • mask=cror(mask,1);*

  • TX_CLK1 = 1;*
    TX_CLK1 = 0; *
    }
    }
    void transmit_data(void)
    {
    TX_CE = 1; //set up for transmit
    delay_ms(5);
    printf(“SENDING ADRESS\n”);
    spi_send(0xAA); //ADDR1 - 1 Send addr our receive is expecting
    spi_send(0x55); //ADDR1 - 2
    spi_send(0xFF); //ADDR1 - 3
    spi_send(0x00); //ADDR1 - 4
    spi_send(0xAA); //ADDR1 - 5
    printf(“SENDING DATA\n”);
    spi_send(0x12); //4 bytes data to transmit to the receiver
    spi_send(0x34);
    spi_send(0xAB);
    spi_send(0xCD);
    TX_CE = 0; //Start transmission
    printf(“DONE”);
    }
    void ser_init(void)
    {
    _SCON = 0x50; /
    SCON: mode 1, 8-bit UART, enable rcvr /_
    _TMOD |= 0x20; /
    TMOD: timer 1, mode 2, 8-bit reload /_
    _TH1 = 0xFD; /
    9600 bauds at 11.059200 MHZ */_
    TL1 = 0xFD;
    PCON = PCON & 0X80;
    TCON |= 0x40;
    TI=1;;
    }
    Any help will be highly appreciated …

you might need too put a delay in your spi clk

RX_CLK1 = 1;

put delay here

RX_CLK1 = 0;

no delay = processor speed

most spi ports are configured at a limited speed

you will need to change your tx section as well