none
wireless coding for 18F4520 using nrf24l01

    Question

  • i have use this code but it doesnt work .

    how do i change the crystal value to external christal.

    /*
     ** 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);
     
     // 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 | 0x34;
      while (OSCCONbits.IOFS == 0)
        ;
     
      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
     
      // test PB and LED
      while(1)
      {
        if (!PB)
          LED = 1;
        else
          LED = 0;
      }
     }
     
     
     unsigned char spi_Send_Read(unsigned char byte)
     {
      SSPBUF = byte;  
      while(!DataRdySPI())
        ;  
      return SSPBUF;
     }  
     
    

    Monday, March 21, 2011 6:02 AM