|
|
View previous topic :: View next topic |
Author |
Message |
thibow
Joined: 11 Apr 2012 Posts: 30
|
nRF24L01 using PIC18F2550 and CCS compiler with Brennen lib |
Posted: Wed May 02, 2012 1:26 pm |
|
|
Hello,
I'm trying to get my nRF24L01+ board working with 2 Pic 18LF2550. Thank's to Brennen's library I managed to understand how it works but I am facing some building's errors as I modified some minor things to compile with CCS Compiler (Brennen uses C18).
I use to get spi working between my two PIC using wires (still with CCS Compiler), I now try to put the nRF24L01+ in between..
Here is what I changed to Brennen's library according to my compiler :
I did not include "spi.c" or "uart.h" as I don't think I need it, and I modified the spic1.c as followed
spi1.c:
Code: | //#include <spi.h>
#include <18f2550.h>
#byte SSPBUF=getenv("SFR:SSPBUF")
unsigned char spi1_send_read_byte(unsigned char byte)
{
SSPBUF = byte;
while(!spi_data_is_in());
return SSPBUF;
} |
Then I managed to change every "#include #include <p18f452.h>" by "#include <18f2550.h>" and finally I tried to define IO port as follow:
Code: | #include <18f2550.h>
//defines for uC pins CE pin is connected to
//This is used so that the routines can send TX payload data and
// properly initialize the nrf24l01 in TX and RX states.
//Change these definitions (and then recompile) to suit your particular application.
#define nrf24l01_CE_IOREGISTER PORTC //pin_C4 10 000
#define nrf24l01_CE_PINMASK pin_C4 //0x10
//defines for uC pins CSN pin is connected to
//This is used so that the routines can send properly operate the SPI interface
// on the nrf24l01.
//Change these definitions (and then recompile) to suit your particular application.
#define nrf24l01_CSN_IOREGISTER PORTA // pin_A5 100 000
#define nrf24l01_CSN_PINMASK pin_A5//0x20
//defines for uC pins IRQ pin is connected to
//This is used so that the routines can poll for IRQ or create an ISR.
//Change these definitions (and then recompile) to suit your particular application.
#define nrf24l01_IRQ_IOREGISTER PORTC // pin_C2 100
#define nrf24l01_IRQ_PINMASK pin_C2 //0x04 |
BUT, "PORTC", "PORTB", an "PORTA" are not defined in my pic18f2550.h and I don't know what to set here..
as I chosed to use the following pin for CE, CSN and IRQ
Code: | #define SPI_CSN pin_A5
#define SPI_CE pin_C4
#define SPI_IRQ pin_C2 |
Do you think there is anything I should change for my project to compile.. here is the code I try to compile:
Code: | #include <18F2550.H>
#include <STDLIB.H>
#include "nRF24L01.h"
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,PLL2,CPUDIV4,NOVREGEN,NOMCLR
#use delay(clock=16000000)
#use rs232(baud=115200,parity=N,xmit=PIN_C6,rcv=PIN_C5,bits=8,STOP=1)
#define SPI_CSN pin_A5
#define SPI_CE pin_C4
#define SPI_IRQ pin_C2
#define LED1 pin_A1
#define LED0 pin_A0
char *mychar=NULL;
int i=0;
int length;
unsigned char data;
void init(void){
//configure the device to be a master, data transmitted on H-to-L clock transition
setup_spi(spi_master | spi_l_to_h | spi_clk_div_16 | spi_xmit_l_to_h);
output_HIGH(LED1); //Led lit
output_HIGH(LED0); //Led lit
output_HIGH(SPI_CSN); // CSN initialized
nrf24l01_initialize_debug(false, 1, false); //initialize the 24L01 to the debug configuration as TX, 1 data byte, and auto-ack disabled
}
void main (void){
init();
while(1){
getc();
//delay_us(100);
nrf24l01_write_tx_payload(&data, 1, true); //transmit received char over RF
//wait until the packet has been sent or the maximum number of retries has been reached
while(!(nrf24l01_irq_pin_active() && nrf24l01_irq_tx_ds_active()));
nrf24l01_irq_clear_all(); //clear all interrupts in the 24L01
nrf24l01_set_as_rx(true); //change the device to an RX to get the character back from the other 24L01
//wait a while to see if we get the data back (change the loop maximum and the lower if
// argument (should be loop maximum - 1) to lengthen or shorten this time frame
for(count = 0; count < 20000; count++)
{
//check to see if the data has been received. if so, get the data and exit the loop.
// if the loop is at its last count, assume the packet has been lost and set the data
// to go to the UART to "?". If neither of these is true, keep looping.
if((nrf24l01_irq_pin_active() && nrf24l01_irq_rx_dr_active()))
{
nrf24l01_read_rx_payload(&data, 1); //get the payload into data
break;
}
//if loop is on its last iteration, assume packet has been lost.
if(count == 19999)
data = '?';
}
nrf24l01_irq_clear_all(); //clear interrupts again
printf("%c", data); //print the received data (or ? if none) to the screen
Delay_US(130); //wait for receiver to come from standby to RX
nrf24l01_set_as_tx(); //resume normal operation as a TX
}
}
|
I am getting weird errors such as
"Expecting an identifier" on the line "unsigned char spi1_send_read_byte(unsigned char byte); " from my spi1.H
here it is
Code: | /*****************************************************************************
*
* File: spi1.h
*
* Copyright S. Brennen Ball, 2006-2007
*
* The author provides no guarantees, warantees, or promises, implied or
* otherwise. By using this software you agree to indemnify the author
* of any damages incurred by using it.
*
*****************************************************************************/
#ifndef _SPI1_H_
#define _SPI1_H_
//#include <spi.h>
unsigned char spi1_send_read_byte(unsigned char byte);
#endif //_SPI_H_ |
If you have any idea.. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed May 02, 2012 1:50 pm |
|
|
Why not just get rid of that file ? All it has in it is a function prototype.
If necessary, move the prototype statement into your main program. |
|
|
thibow
Joined: 11 Apr 2012 Posts: 30
|
|
Posted: Wed May 02, 2012 5:53 pm |
|
|
well, I managed to understand that what was wrong was the fact that this library uses variable names that are reserved (such as byte)... I'll have a closer look at Eduardo's library much more recent and made for CCS.
Here it is : http://www.ccsinfo.com/forum/viewtopic.php?t=47351 |
|
|
mrdongus
Joined: 18 Jun 2012 Posts: 2
|
@thibow |
Posted: Mon Jun 18, 2012 6:32 am |
|
|
Hi thibow,
I also work nRF24L01 with PIC18F2550, the same with you. I am beginner with both of them.
Could you share code and your email with me !
Thank you ! |
|
|
|
|
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
|