beginning to think that its impossible

i’ve been spendng 2 months this semester trying to get the trw-24g to work. i have tried the pic18f242 before, but to operate 40MHz was incompatible with the 3.3v. i also don’t have a voltage leveller. So then i moved on to the scenix SX28AC. since it performs instructions at the same of the 50MHz crystal.(1 instruction per clock cycle, lightning fast).

What i’m trying to do is sample audio at a high speed from a A/D chip and send it wirelessly to a nothe MCU where is will be fed to the D/A.

this is the only module i cannot seem to get working and this is the second batch of trw’s i have ordered. i am running these on a breadboard 2 inches apart. if anyone is able to give a little assistance with this i’d be very greatful.

'
created with SX-Key v3.2
'receiver module

'===============DEVICE=SETTINGS==============================
	DEVICE	SX28, TURBO, OSCHS
	ID	RFv1a
	IRC_CAL	IRC_SLOW
	FREQ	50_000_000	'50MHz

'------PIN-ASSIGNMENTS-------

'----------PORTA-------------
DATA1		var	ra.2
CLK1		var	ra.3
'----------PORTB-------------
DR1		var	rb.0
CS		var	rb.1
CE		var	rb.2
VCC		var	rb.3
'----------PORTC-------------
LEDs		var	rc
'-------VARIABLES------------
RcvDta		var	byte	'byte to store recieved data
idx		var	byte	'table index
rfcon		var	byte	'byte used for configuration
txsend		var	byte	'stores address bytes of destination module
TXdata		var	byte
'-------SUBROUTINES----------
Rx_Setup	sub	0
Rx_Mode		sub	0
'----------------------------



program start


start:
	pause	2000
	low	LEDs
	low	CE
	low	CS
	high	VCC		'Power Up TRW-24g
	pause	3		'Tpd2cfgm = 3ms
'------------------------------------------------------------------------
	

Main:
	goto	Rx_Setup
	
	goto 	main

'===============RECEIVE=MODE=CONFIGURATION=================================
Rx_Setup:
	
	high	CS		'Enables configuration mode

	pauseus	5		'Tcs2data = 5us
	pauseus	0.5		'Ts = 500ns

	idx = 0

	low	CLK1		'starts the the clock from the 
				'idle position of 0

	do

	read CfgWord + idx,rfcon		             'reads the Configuration 14 byte word
	shiftout DATA1,CLK1,MSBFIRST,rfcon,11 	              'this sends out 14 bytes of configuration word
						                             ' at a rate of 913 kbps

	inc	idx	
	loop until idx = 14

	low	CS		'Enters Standby Mode and sets the configuration
	low	DATA1
	goto	Rx_Mode


'===============RECEIVE=MODE=SUBROUTINE=================================
Rx_Mode:

	low	CLK1
	high 	CE		'Enables Active Mode
	pauseus	200		'Tce2data = 200us



DR_Test:
	if DR1 = 0 then DR_Test	                     'tests for data ready pin

	shiftin	DATA1,CLK1,MSBPRE,RcvDta\9,11	'clocks in 8 bits since the 1st is neglegible 

	LEDs	= RcvDta	                                              'Outputs data to 8 LEDs

	goto	Dr_Test


'===============DATA=TABLES============================================

CfgWord:		         'the configuration for rx mode
	data	$08	'Data 1 width = 8bits

	data	$00	'receive-channel 2 not used
	data	$00
	data	$00
	data	$00
	data	$00

	data	$AA	'receice-channel 1 address :AA.BB.CC.DD.EE
	data	$BB
	data	$CC
	data	$DD
	data	$EE
	data	$A3	'Address witdh 5 bytes with 16bit CRC

	data	$6F	'Crystal = 16MHz, Data Rate = 250kpbs, Shockburst Mode & power output = 0dBm

	data	$15	'RF Channel #10 & Receive mode.

Transmitter code

'created with SX-Key v3.2
'transmitter module

'===============DEVICE=SETTINGS==============================
	DEVICE	SX28, TURBO, OSCHS
	ID	RFv1a
	IRC_CAL	IRC_SLOW
	FREQ	50_000_000	'50MHz

'------PIN-ASSIGNMENTS-------

'----------PORTA-------------
DATA1		var	ra.2
CLK1		var	ra.3
'----------PORTB-------------
DR1		var	rb.0
CS		var	rb.1
CE		var	rb.2
VCC		var	rb.3
'----------PORTC-------------
LEDs		var	rc
'-------VARIABLES------------
idx		var	byte	'table index
rfcon		var	byte	'byte used for configuration
txsend		var	byte	'stores address bytes of destination module
LEDVal          var	byte    'byte to be sent
TXdata		var	byte
'-------SUBROUTINES----------
Tx_Setup	sub	0
Tx_Mode		sub	0
'----------------------------



program start

start:
	
	pause	2000
	low	LEDs		'LEDs off
	low	CE
	low	CS
	high	VCC		'Power Up TRW-24g
	pause	3		'Tpd2cfgm = 3ms

	
Main:
	goto	Tx_Setup
	
	goto 	main


'===============TRANSMIT=MODE=CONFIGURATION===============================

Tx_Setup:

	low	CLK1

	high	CS		'Enables configuration mode
	pauseus	5		'Tcs2data = 5us
	pauseus	0.5		'Ts = 500ns

	idx = 0

	do			

	read CfgWord + idx,rfcon		           'reads the Configuration 14 byte word
	shiftout DATA1,CLK1,MSBFIRST,rfcon,11	           'this sends out 14 bytes of configuration word
						                                   ' at a rate of approx. 913kbps

	inc	idx	
	loop until idx = 14			

	low	CS		               'Enters Standby Mode and sets the configuration
	low	DATA1

	goto	Tx_Mode

'===============TRANSMIT=MODE=SUBROUTINE================================



Tx_Mode:

	low	CLK1		

	high	CE		'Enable Active Mode
	pauseus	5		'Tce2data = 5us
	pauseus 0.5		'Ts = 500 ns 

	idx = 0

	do

	read Addr + idx,txsend	                      'Sends the 5-byte address out to the Transceiver
	shiftout DATA1,CLK1,MSBFIRST,txsend,11	

	inc	idx	
	loop until idx = 5

	shiftout DATA1,CLK1,MSBFIRST,LEDVal,11	         'Shift out the data byte

	low 	CE	                                        'Enters Standby Mode 

	pauseus	300	                                        'Time On Air delay > calculated time for 64 bits = 256us

	goto	Tx_Mode
'===============DATA=TABLES=============================================

CfgWord:		   'the configuration for Tx mode
	data	$08	'Data 1 width = 8bits

	data	$00	'receive-channel 2 not used
	data	$00
	data	$00
	data	$00
	data	$00

	data	$AA	'receice-channel 1 address :AA.BB.CC.DD.EE
	data	$BB
	data	$CC
	data	$DD
	data	$EE
	data	$A3	'Address witdh 5 bytes with 16bit CRC

	data	$6F	'Crystal = 16MHz, Data Rate = 250kpbs, Shockburst Mode & power output = 0dBm

	data	$14	'RF Channel #10 & Transmit mode.


Addr:
	data	$AA	'receice-channel 1 address :AA.BB.CC.DD.EE
	data	$BB
	data	$CC
	data	$DD
	data	$EE

did you consider using on of the off the shelf $20 module with radio and serial port and all network and data layer protocols onboard?

to tell you the truth i didn’t think of using a development board. but its a bit late to get them ordered by my school. takes for ever to get stuff order through them.

visa

paypal

not a development board - an OEM module like MaxStream XBee or equiv.

But this gets you to the destination without the trip.

Maybe you want to take the trip, so to speak, for the learning experience.

well as you can see from the pic i have got thing working to some extent.

the other night i had them synced at 1mbps and sending ‘AAh’ every 100us flawlessly. but for some reason the receiver is getting data one every couple of minutes. so i would like to know if my circuit design has anything to do with this.

everything on the board is powered by 3.3v, pic18f242 is clocked by a 20mhz oscillator.

http://images.imagefap.com/images/full/ … 009030.jpg

One potential reason you may get extra data is your setttings. I, as well as most others on the forum, would recommend a 5-byte address and 2-byte (16-bit) CRC. This is the easiest way to filter out erroneous messages.

If you try that and you still get bad messages, try changing the RF channel on the units to see if you can get a band with less interference.

will do thanx, but do u think i would have to shorten the wires as well as they might act as antenna

Yeah, I’d shorten all of the connections, especially crystal (even though it is not probably the reason for the failure)

BTW, have you checked the waveforms with a Oscilloscope? I don’t know that language you posted… but there may be something wrong with clock/data.

The only wire that should really make a difference in the receiving circuit is the DR1/DR2 wire. That would be the wire that is signalling to your micro that you have data ready. In the picture you show, it is not excessively long in my opinion, but you could try shortening it if the software fix I suggested doesn’t work.

Now, it is possible that in your transmitting circuit that you are getting noise on your CS and CLK pins, which could possibly signal the TRW that it has received data, but this is very unlikely as it would have to correspond to clock cycle times and CS pulse lengths. Unless you are really unlucky or have insanely long wires, I would highly doubt that this is the problem.

Try out the software fixes first, and if they don’t work, then try fixing the wires. After that, you’re in a pretty tough place if those fixes don’t work.

DarioG: This is the code i’m using. jus made so edits to some firmware i found on the net. but its written in CCS PIC-C.

2 RFs on one PIC18F242:

////////////////////////////////////////////////////////////////////////////////
//Pin Configuration
//
//    Pin   Name  Pin funtion Description
//    1     GND   Power       Gound (0V)
//    2     CE    Input       Chip Enable activates RX or TX mode
//    3     CLK2  I/O         Clock output/input for RX data channel 2
//    4     CS    Input       Chip Select activates Configuration mode
//    5     CLK1  I/O         Clock Input(TX)&I/O(RX) for data channel 1 3-wire interface
//    6     DATA  I/O         RX data channel 1/TX data input /3-wire interface
//    7     DR1   Output      RX data ready at data channel 1 (ShockBurst only)
//    8     DOUT2 Output      RX data channel 2
//    9     DR2   Output      RX data ready at data channel 2 (ShockBurst only)
//    10    VCC   Power       Power Supply (+3V DC)

#define TX_24G_CE         PIN_B0
#define TX_24G_CS         PIN_B1
#define TX_24G_DR1        PIN_B2
#define TX_24G_CLK1       PIN_B3
#define TX_24G_DATA       PIN_B4


#define RX_24G_CE         PIN_B5
#define RX_24G_DATA       PIN_A0
#define RX_24G_CLK1       PIN_A1
#define RX_24G_DR1        PIN_B7
#define RX_24G_CS         PIN_B6

#define numOfBytes        1

void RF_24G_initPorts() {
   PORT_B_PULLUPS(FALSE);
   DISABLE_INTERRUPTS(GLOBAL);
}


////////////////////////////////////////////////////////////////////////////////
//Configuration Bytes
//
//Bytes 14-02: Shockburst Configuration
//Bytes 01-00: General Device Configuration

//Byte 14: Length of data payload section RX channel 2 in bits
//    The total number of bits in a ShockBurst RF package may not exceed 256!
//    Maximum length of payload section is hence given by:
//    DATAx_W(bits) = 256 - ADDR_W - CRC
#define DATA2_W           numOfBytes * 8

//Byte 13: Length of data payload section RX channel 1 in bits//Byte 12-08: Channel 2 Address
#define DATA1_W           numOfBytes * 8


//Byte 12-08: Channel 2 Address
#define ADDR2_4           0x00
#define ADDR2_3           0x00
#define ADDR2_2           0x00
#define ADDR2_1           0x00
#define ADDR2_0           0x00

//Byte 07-03: Channel 1 Address
#define ADDR1_4           0x0A
#define ADDR1_3           0x19
#define ADDR1_2           0x28
#define ADDR1_1           0x67
#define ADDR1_0           0x55

//Byte 02
//    Bit 07-02: ADDR_W    - Number of address bits (both RX channels)
//                           Maximum number of address bits is 40 (5 bytes)
//    Bit    01: CRC_L     - 8 or 16 bits CRC
//    Bit    00: CRC_EN    - Enable on-chip CRC generation/checking
//    Combine (via |) together constants from each group
//                        0b76543210
#define ADDR_W_5_BYTE     0b10100000
#define ADDR_W_4_BYTE     0b10000000
#define ADDR_W_3_BYTE     0b01100000
#define ADDR_W_2_BYTE     0b01000000
#define ADDR_W_1_BYTE     0b00100000

#define CRC_L_8_BIT       0b00000000
#define CRC_L_16_BIT      0b00000000

#define CRC_EN_DISABLE    0b00000000
#define CRC_EN_ENABLE     0b00000000

//Byte 01
//    Bit    07: RX2_EN    - Enable two channel receive mode
//    Bit    06: CM        - Communication mode ( Direct or ShockBurst)
//    Bit    05: RFDR_SB   - RF data rate (1Mbps requires 16MHz crystal)
//    Bit 04-02: XO_F      - Crystal frequency (Factory default 16MHz crystal mounted)
//    Bit 01-00: RF_PWR    - RF output power
//    Combine (via |) together constants from each group
//                       0b76543210
#define RX2_EN_DISABLE   0b00000000
#define RX2_EN_ENABLE    0b10000000

#define CM_DIRECT        0b00000000
#define CM_SHOCKBURST    0b01000000

#define RFDR_SB_250_KBPS 0b00000000
#define RFDR_SB_1_MBPS   0b00100000

#define XO_F_4MHZ        0b00000000
#define XO_F_8MHZ        0b00000100
#define XO_F_12MHZ       0b00001100
#define XO_F_16MHZ       0b00001100
#define XO_F_20MHZ       0b00010000

#define RF_PWR_N20DB     0b00000000  // -20db
#define RF_PWR_N10DB     0b00000001  // -10db
#define RF_PWR_N5DB      0b00000010  // -5db
#define RF_PWR_0DB       0b00000011  // 0db (Full Power)

//Byte 01
//    Bit 07-01: RF_CH#    - Frequency channel (2400MHz + RF_CH# * 1.0MHz)
//    Bit    00: RXEN      - RX or TX operation
//    Combine (via |) together constants from each group
//                       0b76543210
#define RF_CH            0b00110010 // 50 - 2450GHz

#define RXEN_TX          0b00000000
#define RXEN_RX          0b00000001
////////////////////////////////////////////////////////////////////////////////

#define BUF_MAX            numOfBytes
byte                       buf[BUF_MAX+1];
#define CLKDELAY()         delay_us(0.6)
#define CSDELAY()          delay_us(5.5)
#define PWUPDELAY()        delay_ms(2)


byte getByte() {  //MSB bit first
   int8 i , b = 0;
   int8 p = 7;
   for(i=0 ; i < 8 ; i++) {
      OUTPUT_LOW(RX_24G_CLK1);
      CLKDELAY();
      OUTPUT_HIGH(RX_24G_CLK1);
      CLKDELAY();           // Read before falling edge
      if( INPUT(RX_24G_DATA) ) {
         BIT_SET(b,p--);
      }else{
         BIT_CLEAR(b,p--);
      }
   }
   return b;
}


void putByte( byte b ) {  //MSB bit first
   int8 i;
   int8 p = 7;
   for(i=0 ; i < 8 ; i++) {
      OUTPUT_LOW(TX_24G_CLK1);
      if( BIT_TEST(b,p--) ) {
         OUTPUT_HIGH(TX_24G_DATA);
      }else{
         OUTPUT_LOW(TX_24G_DATA);
      }
      CLKDELAY();
      OUTPUT_HIGH(TX_24G_CLK1);  // Clock out on rising edge
      CLKDELAY();
   }
}


void putByte2( byte b ) {  //MSB bit first
   int8 i;
   int8 p = 7;
   for(i=0 ; i < 8 ; i++) {
      OUTPUT_LOW(RX_24G_CLK1);
      if( BIT_TEST(b,p--) ) {
         OUTPUT_HIGH(RX_24G_DATA);
      }else{
         OUTPUT_LOW(RX_24G_DATA);
      }
      CLKDELAY();
      OUTPUT_HIGH(RX_24G_CLK1);  // Clock out on rising edge
      CLKDELAY();
   }
}


void TX_24G_Config() {
   OUTPUT_LOW(TX_24G_CE);
   OUTPUT_LOW(TX_24G_CS);
   OUTPUT_LOW(TX_24G_CLK1);
   OUTPUT_LOW(TX_24G_DATA);
   PWUPDELAY();
   OUTPUT_HIGH(TX_24G_CS);
   CSDELAY();

   //MSB byte first
   putByte(DATA2_W);
   putByte(DATA1_W);
   putByte(ADDR2_4);
   putByte(ADDR2_3);
   putByte(ADDR2_2);
   putByte(ADDR2_1);
   putByte(ADDR2_0);
   putByte(ADDR1_4);
   putByte(ADDR1_3);
   putByte(ADDR1_2);
   putByte(ADDR1_1);
   putByte(ADDR1_0);
   putByte(ADDR_W_5_BYTE | CRC_L_16_BIT | CRC_EN_ENABLE);
   putByte(RX2_EN_DISABLE | CM_SHOCKBURST | RFDR_SB_1_MBPS | XO_F_16MHZ | RF_PWR_0DB);
   putByte(RF_CH | RXEN_RX);

   OUTPUT_FLOAT(TX_24G_DATA);
   OUTPUT_LOW(TX_24G_CE);
   OUTPUT_LOW(TX_24G_CS);
   OUTPUT_LOW(TX_24G_CLK1);
}


void TX_24G_SetTxByte() {
   OUTPUT_LOW(TX_24G_CE);
   OUTPUT_HIGH(TX_24G_CS);
   CSDELAY();
   putByte(RF_CH | RXEN_TX);
   OUTPUT_LOW(TX_24G_CS);
   OUTPUT_LOW(TX_24G_CLK1);
}

void TX_24G_SetTx() {
   // Once the wanted protocol, modus and RF channel are set,
   // only one bit (RXEN) is shifted in to switch between RX and TX.
   OUTPUT_LOW(TX_24G_CE);
   OUTPUT_HIGH(TX_24G_CS);
   CSDELAY();
   OUTPUT_LOW(TX_24G_DATA);
   OUTPUT_HIGH(TX_24G_CLK1);
   CLKDELAY();
   OUTPUT_LOW(TX_24G_CLK1);
   CLKDELAY();
   OUTPUT_LOW(TX_24G_CS);
   OUTPUT_LOW(TX_24G_CLK1);
}

void RX_24G_Config() {
   OUTPUT_LOW(RX_24G_CE);
   OUTPUT_LOW(RX_24G_CS);
   OUTPUT_LOW(RX_24G_CLK1);
   OUTPUT_LOW(RX_24G_DATA);
   PWUPDELAY();
   OUTPUT_HIGH(RX_24G_CS);
   CSDELAY();

   //MSB byte first
   putByte2(DATA2_W);
   putByte2(DATA1_W);
   putByte2(ADDR2_4);
   putByte2(ADDR2_3);
   putByte2(ADDR2_2);
   putByte2(ADDR2_1);
   putByte2(ADDR2_0);
   putByte2(ADDR1_4);
   putByte2(ADDR1_3);
   putByte2(ADDR1_2);
   putByte2(ADDR1_1);
   putByte2(ADDR1_0);
   putByte2(ADDR_W_5_BYTE | CRC_L_16_BIT | CRC_EN_ENABLE);
   putByte2(RX2_EN_DISABLE | CM_SHOCKBURST | RFDR_SB_1_MBPS | XO_F_16MHZ | RF_PWR_0DB);
   putByte2(RF_CH | RXEN_RX);

   OUTPUT_FLOAT(RX_24G_DATA);
   OUTPUT_LOW(RX_24G_CE);
   OUTPUT_LOW(RX_24G_CS);
   OUTPUT_LOW(RX_24G_CLK1);
}

void RX_24G_SetRxByte() {
   OUTPUT_LOW(RX_24G_CE);
   OUTPUT_HIGH(RX_24G_CS);
   CSDELAY();
   putByte2(RF_CH | RXEN_RX);
   OUTPUT_LOW(RX_24G_CS);
   OUTPUT_FLOAT(RX_24G_DATA);
   OUTPUT_LOW(RX_24G_CLK1);
   OUTPUT_HIGH(RX_24G_CE);
}

void RX_24G_SetRx() {
   // Once the wanted protocol, modus and RF channel are set,
   // only one bit (RXEN) is shifted in to switch between RX and TX.
   OUTPUT_LOW(RX_24G_CE);
   OUTPUT_HIGH(RX_24G_CS);
   CSDELAY();
   OUTPUT_HIGH(RX_24G_DATA);
   OUTPUT_HIGH(RX_24G_CLK1);
   CLKDELAY();
   OUTPUT_LOW(RX_24G_CLK1);
   CLKDELAY();
   OUTPUT_LOW(RX_24G_CS);
   OUTPUT_FLOAT(RX_24G_DATA);
   OUTPUT_LOW(RX_24G_CLK1);
   OUTPUT_HIGH(RX_24G_CE);
}


void putBuffer() {
   int8 i;
   OUTPUT_HIGH(TX_24G_CE);
   CSDELAY();

   putByte(ADDR1_4);
   putByte(ADDR1_3);
   putByte(ADDR1_2);
   putByte(ADDR1_1);
   putByte(ADDR1_0);

   for( i=0; i<BUF_MAX ; i++) {
      putByte(buf[i]);
   }
   OUTPUT_LOW(TX_24G_CE);
   OUTPUT_LOW(TX_24G_CLK1);
}

void getBuffer() {
   int8 i;
   for( i=0; i<BUF_MAX ; i++) {
       buf[1] = getByte();
   }
   OUTPUT_LOW(RX_24G_CLK1);
   OUTPUT_HIGH(RX_24G_CE);
}

this is the main op code:

#include <18f242.h>
#device ADC=8
#use delay(clock=20M)
#fuses NOWDT,PUT,NOBROWNOUT,HS,NOLVP
#include <2RF-24Gs.c>

void main(){
   SETUP_ADC_PORTS(NO_ANALOGS);
   SETUP_ADC(ADC_OFF);

   RF_24G_initPorts();

   TX_24G_Config();                       // Set up transceiver
   TX_24G_SetTx();

   RX_24G_Config();                       // Set up transceiver
   RX_24G_SetRx();

    buf[0] = 0xAA;

   RFTALK:
   putBuffer();
   delay_us(150);                     // Delay needed for transceiver
                     // Send packet

   if(INPUT(RX_24G_DR1)){
   getBuffer();               // Get packet
   OUTPUT_C(buf[1]);
}

       goto RFTALK;

   }

i’ve already made the software change to the address.

no i’m jus switching around the 5 TRW-24g that will give me a working combination.

Ehm, these are wrong:

#define CRC_L_8_BIT       0b00000000
#define CRC_L_16_BIT      0b00000000

#define CRC_EN_DISABLE    0b00000000
#define CRC_EN_ENABLE     0b00000000

correct ones are these:

#define CRC_L_8_BIT 0b00000000

#define CRC_L_16_BIT 0b00000010

#define CRC_EN_DISABLE 0b00000000

#define CRC_EN_ENABLE 0b00000001

Maybe you already corrected them, or maybe not.

And I’d put some delay between the rising/falling of clock and setting high/low of CE and CS, in the various routines. I still have to quantify the lowest time (despite what the datasheet may say, and also depending on wiring lengths); some uSec should do fine.

thanx again, with the CRC didn’t see that when i was changing it up. but the CS_delay is 5.5 us that is that is used for Tce2data & Tcs2data

Can you tell me exactly at what stage are you now?

With and without the CRC active?

well i have added the 16 Bit CRC now and i haven’t been receiving anything on them. I believe that they are being configured properly, but i’m still not getting any transfer of data.

ok, am taking some more check now…

void getBuffer() {

int8 i;

for( i=0; i<BUF_MAX ; i++) {

buf[1] = getByte();

}

OUTPUT_LOW(RX_24G_CLK1);

OUTPUT_HIGH(RX_24G_CE);

}

one more bug: buf[1] = … was meant to be buf … !

i had changed the code up alot. i’m using buf[0] for sending data and then i’m using buff[1] to receive. thats why u see it written like that.

i’m gonna mess with these things one last time. if they don’t work, i will have to come to the belief that they are all busted.

thanx for ur help tho

Ok ,I understand the pain I go through too, when thing become crazy :slight_smile:

Nonetheless, that buf is in my mind rather dangerous.

So, if you start again to make some tests, please do the following, as I have it working like this:

  1. send some more data… 1 byte seems really too short. Just a feeling! Let’s make it 4 or 8

  2. set it for 250KBPS, it seems more safe (even if it should only hit the range) and I have it working @250

  3. use 2 byte address… 5, to me, seems crazy. I agree that it may give you more security and so on, but… I guess it’s better to make tests. And, in my case, I do have some checks in the payload too.

  4. if it does not work immediately, do test CRC disabled just to see if some bytes (of the payload) do arrive to the other side.

Oh, are you using PIC @3V or 5 with level shifter? Maybe you already answered, but just to be sure…

DarioG:
5, to me, seems crazy

Try using this puppy in an environment that is very heavily trafficked with 2.4GHz traffic and you will see that it’s not so crazy. The more address and CRC bits the fewer interference packets you will receive. The only real loss is that you get slightly slower data throughput. For testing purposes (assuming little interference around the test area), 2 bytes should certainly suffice, though.

of course I do agree with you, Brennen!