Hello,
I have purchased 2 nRF24L01+ boards.
http://www.sparkfun.com/commerce/produc … cts_id=705
I want to solder them but have a question:
I want to solder the headers, but on what side should the “long legs” of the headers be? On the electronic part side or the other side with “Sparkfun.com”? Or does this not matter?
The thing is, if I put the long legs of the headers on the “Sparkfun.com” side, the antenna sits great on my breadboard but this is also the side with the fragile connection lines!! And I don’t want to break them!!.
If I solder it the other way around (long side of the headers on the electronics side), the nrf24L01 board + headers do not fit very good into my breadboard!!
Please look at the pictures, I hope this will make it more clear
Thanks in advance.
I put the connector through from the non-component side, so that the components face upwards when the module is plugged into my PCB with the PIC controller.
Hey Leon,
Thanks for your reply. Ive soldered the boards like you told me. Is there a way to test the boards individually to check if the connections are right?
Thanks in advance.
I wrote a simple test program in C18 for the PIC18F4520 I used to check that I could write data to the chip via SPI, and read it back. Here it is:
/*
** test.c
** SPI test program for PIC18F4520 and nRF24L01 or nRF24L01+
** Checks SPI comms between PIC and wireless chip
**
** RA0 LED (output)
** RA1 PB (input)
*/
#include <p18f4520.h>
#include <spi.h>
//function prototypes
unsigned char spi_Send_Read(unsigned char);
void dly(void);
// Defines
#define SPI_SCK LATCbits.LATC3 // Clock pin, PORTC pin 3
#define SPI_SO LATCbits.LATC5 // Serial output pin, PORTC pin 5
#define SPI_SI PORTCbits.RC4 // Serial input pin, PORTC pin 4
#define SPI_CSN LATCbits.LATC2 // CSN output pin, PORTC pin 2
#define SPI_CE LATCbits.LATC1 // CE output pin, PORTC pin 1
#define SPI_IRQ PORTBbits.RB0 // IRQ input pin, PORTB pin 0
#define SPI_SCALE 4 // postscaling of signal
#define LED LATAbits.LATA0
#define PB PORTAbits.RA1
// Macros
#define nop() _asm nop _endasm
void main(void)
{
unsigned char status = 0;
unsigned char data[5];
int i;
// run internal oscillator at 8 MHz
OSCCON = OSCCON | 0b01110000;
while (!OSCCONbits.IOFS) // wait for IOFS to go high
;
OpenSPI(SPI_FOSC_16, MODE_00, SMPMID); //open SPI1
PORTA = 0x00;
ADCON1 = 0x0F; // set up PORTA to be digital I/Os
TRISA = 0x02; // PORTA<7.2,0> outputs PORTA<1> input
TRISCbits.TRISC3 = 0; // SDO output
TRISCbits.TRISC5 = 0; // SCK output
TRISCbits.TRISC2 = 0; // CSN output
TRISCbits.TRISC1 = 0; // CE output
SPI_CSN = 1; // CSN high
SPI_SCK = 0; // SCK low
SPI_CE = 0; // CE low
nop();
//write TX_ADDRESS register
SPI_CSN = 0; //CSN low
spi_Send_Read(0x30);
spi_Send_Read(0x11);
spi_Send_Read(0x22);
spi_Send_Read(0x33);
spi_Send_Read(0x44);
spi_Send_Read(0x55);
SPI_CSN = 1; //CSN high
//read TX_ADDRESS register
//Check that values are correct using the MPLAB debugger
SPI_CSN = 0; //CSN low
status = spi_Send_Read(0x10);
data[0] = spi_Send_Read(0x00); // 0x11
data[1] = spi_Send_Read(0x00); // 0x22
data[2] = spi_Send_Read(0x00); // 0x33
data[3] = spi_Send_Read(0x00); // 0x44
data[4] = spi_Send_Read(0x00); // 0x55
SPI_CSN = 1; // CSN high
while (1)
;
}
unsigned char spi_Send_Read(unsigned char byte)
{
SSPBUF = byte;
while(!DataRdySPI())
;
return SSPBUF;
}
Thanks for the code. I use Arduino, so I’ll have to do some re-writing (with my poor skills…). Do I really need the IRQ for this procedure? I have it disconnected at the moment.
BTW:
This is the Arduino code I use to test the modules:
Article: http://www.mrroot.net/2009/10/wireless-is-go/
Code: http://www.mrroot.net/wp-content/upload … 1/Mirf.zip
When I run the ping_client on my ArduinoA is starts sending, but thee ping_server does not respond on ArduinoB. I have both Arduino’s connected to different PC’s. I’ve exchanges module A and module B and the ArduinoA (with the other module starts sending, but ArduinoB does not respond…)
Thanks in advance,
J
Got it working :). The Arduino Mega has other SPI pins, so I had to change the library.
Thanks.