This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Wireless nrf24e1 LED flash

HI :-) as promised, im having problems with the wireless connection on the nordic nrf24e1, I am trying to send a packet and then if received, flash an LED. Can anyone see any problems with the below code. first is the transmitter code then i will reply with the receiver code:

#include <reg24e1.h>

struct RFConfig
{
    unsigned char n;
    unsigned char buf[15];
};

typedef struct RFConfig RFConfig;

#define ADDR_INDEX  8   // Index to address bytes in RFConfig.buf
#define ADDR_COUNT  4   // Number of address bytes

const RFConfig txconf =
{
    15,
    0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x12, 0x34, 0x56, 0x78, 0x83, 0x6c, 0x04
};

const RFConfig rxconf =
{
    15,
    0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x87, 0x65, 0x43, 0x21, 0x83, 0x6c, 0x05
};



// LED is to be connected to this pin
sbit LED_pin = P1^0;


// Function prototypes
void DELAY_LOOP_Wait(const unsigned int);
void DELAY_100us(volatile unsigned char n);
unsigned char SPI_ReadWrite(unsigned char b);
void TRANSMIT_Packet(unsigned char b);
void TRANSMITTER(void);
void INIT(void);



/*..................................................................*/


void main(void)
{
                INIT();

          while(1)
          {

            TRANSMITTER();


      }



}

/*------------------------------------------------------------------*-

  DELAY_LOOP_Wait()

-*------------------------------------------------------------------*/

void DELAY_LOOP_Wait(const unsigned int DELAY)
   {
   unsigned int x, y;

   for (x = 0; x <= DELAY; x++)
      {
      for (y = 0; y <= 800; y++);
      }
   }



/*------------------------------------------------------------------*-

  DELAY_100us()

-*------------------------------------------------------------------*/

void DELAY_100us(volatile unsigned char n)
{
    unsigned char i;
    while(n--)
        for(i=0;i<35;i++)
            ;
}

/*------------------------------------------------------------------*-

  SPI_ReadWrite()

-*------------------------------------------------------------------*/

unsigned char SPI_ReadWrite(unsigned char b)
{
    EXIF &= ~0x20;                  // Clear SPI interrupt
    SPI_DATA = b;                   // Move byte to send to SPI data register
    while((EXIF & 0x20) == 0x00)    // Wait until SPI hs finished transmitting
        ;
    return SPI_DATA;
}



/*------------------------------------------------------------------*-

  TRANSMIT_Packet()

-*------------------------------------------------------------------*/

void TRANSMIT_Packet(unsigned char b)
{
    unsigned char i;
    CE = 1;
    DELAY_100us(0);
    // Start with the address of the receiver:
    for(i=0;i<ADDR_COUNT;i++)
        SPI_ReadWrite(rxconf.buf[ADDR_INDEX+i]);
    SPI_ReadWrite(b);
    CE = 0;
    DELAY_100us(3);                  // Wait ~300us
}


 /*------------------------------------------------------------------*-

  TRANSMITTER()

-*------------------------------------------------------------------*/

void TRANSMITTER(void)
{
    unsigned char b, bo, err;
    CS = 1;
    DELAY_100us(0);
    for(b=0;b<txconf.n;b++)
    {
        SPI_ReadWrite(txconf.buf[b]);
    }
    CS = 0;
    for(;;)
    {
       TRANSMIT_Packet(b);          // Transmit data
        }
}

void INIT(void)
{
    PWR_UP = 1;                     // Turn on Radio
    DELAY_100us(30);                // Wait > 3ms
    SPICLK = 0;                     // Max SPI clock (XTAL/8)
    SPI_CTRL = 0x02;                // Connect internal SPI controller to Radio

}

Parents
  • Receiver code:
    
    #include <reg24e1.h>
    
    struct RFConfig
    {
        unsigned char n;
        unsigned char buf[15];
    };
    
    typedef struct RFConfig RFConfig;
    
    #define ADDR_INDEX  8   // Index to address bytes in RFConfig.buf
    #define ADDR_COUNT  4   // Number of address bytes
    
    const RFConfig txconf =
    {
        15,
        0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x12, 0x34, 0x56, 0x78, 0x83, 0x6c, 0x04
    };
    
    const RFConfig rxconf =
    {
        15,
        0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x87, 0x65, 0x43, 0x21, 0x83, 0x6c, 0x05
    };
    
    
    
    // LED is to be connected to this pin
    sbit LED_pin = P1^0;
    
    
    // Function prototypes
    void DELAY_LOOP_Wait(const unsigned int);
    void DELAY_100us(volatile unsigned char n);
    unsigned char SPI_ReadWrite(unsigned char b);
    unsigned char RECEIVE_Packet();
    void RECEIVER(void);
    void LED_Flash();
    void INIT(void);
    
    
    
    /*..................................................................*/
    
    
    void main(void)
    {
                    INIT();
    
              while(1)
              {
                RECEIVER();
    
    
          }
    
    
    
    }
    
    
    /*------------------------------------------------------------------*-
    
      DELAY_LOOP_Wait()
    
    -*------------------------------------------------------------------*/
    
    void DELAY_LOOP_Wait(const unsigned int DELAY)
       {
       unsigned int x, y;
    
       for (x = 0; x <= DELAY; x++)
          {
          for (y = 0; y <= 800; y++);
          }
       }
    
    
    /*------------------------------------------------------------------*-
    
      LED_FLASH()
    
    -*------------------------------------------------------------------*/
    
    void LED_Flash()
    {
            do
            {
                    LED_pin = 0;
                    DELAY_LOOP_Wait(1000);
                    LED_pin = 1;
                    DELAY_LOOP_Wait(1000);
            }  while(1);
    }
    
    /*------------------------------------------------------------------*-
    
      DELAY_100us()
    
    -*------------------------------------------------------------------*/
    
    void DELAY_100us(volatile unsigned char n)
    {
        unsigned char i;
        while(n--)
            for(i=0;i<35;i++)
                ;
    }
    
    /*------------------------------------------------------------------*-
    
      SPI_ReadWrite()
    
    -*------------------------------------------------------------------*/
    
    unsigned char SPI_ReadWrite(unsigned char b)
    {
        EXIF &= ~0x20;                  // Clear SPI interrupt
        SPI_DATA = b;                   // Move byte to send to SPI data register
       while((EXIF & 0x20) == 0x00)    // Wait until SPI hs finished transmitting
            ;
        return SPI_DATA;
    }
    
    /*------------------------------------------------------------------*-
    
      TRANSMIT_Packet()
    
    -*------------------------------------------------------------------*/
    
    void TRANSMIT_Packet(unsigned char b)
    {
        unsigned char i;
        CE = 1;
        DELAY_100us(0);
        // Start with the address of the receiver:
        for(i=0;i<ADDR_COUNT;i++)
            SPI_ReadWrite(rxconf.buf[ADDR_INDEX+i]);
        SPI_ReadWrite(b);
        CE = 0;
        DELAY_100us(3);                  // Wait ~300us
    }
    
    
    
    /*------------------------------------------------------------------*-
    
      RECEIVE_Packet()
    
    -*------------------------------------------------------------------*/
    
    unsigned char RECEIVE_Packet()
    {
        unsigned char b;
        CE = 1;
        while(DR1 == 0)
            ;
        b = SPI_ReadWrite(0);
        CE = 0;
        return b;
    
    
    }
    
    
    
    /*------------------------------------------------------------------*-
    
      RECEIVER()
    
    -*------------------------------------------------------------------*/
    
    void RECEIVER(void)
    {
        unsigned char b, bo, err;
        CS = 1;
        DELAY_100us(0);
        for(b=0;b<rxconf.n;b++)
        {
            SPI_ReadWrite(rxconf.buf[b]);
        }
        CS = 0;
            bo = err = 0;
        for(;;)
        {
            b = RECEIVE_Packet();
                    LED_Flash();
        }
    }
    
    
     /*------------------------------------------------------------------*-
    
      TRANSMITTER()
    
    -*------------------------------------------------------------------*/
    
    void TRANSMITTER(void)
    {
        unsigned char b;
        CS = 1;
        DELAY_100us(0);
        for(b=0;b<txconf.n;b++)
        {
            SPI_ReadWrite(txconf.buf[b]);
        }
        CS = 0;
        for(;;)
        {
           TRANSMIT_Packet(b);          // Transmit data
            }
    }
    
    void INIT(void)
    {
            P1_DIR = 0;
        PWR_UP = 1;                     // Turn on Radio
        DELAY_100us(30);                // Wait > 3ms
        SPICLK = 0;                     // Max SPI clock (XTAL/8)
        SPI_CTRL = 0x02;                // Connect internal SPI controller to Radio
    
    }
    
    

Reply
  • Receiver code:
    
    #include <reg24e1.h>
    
    struct RFConfig
    {
        unsigned char n;
        unsigned char buf[15];
    };
    
    typedef struct RFConfig RFConfig;
    
    #define ADDR_INDEX  8   // Index to address bytes in RFConfig.buf
    #define ADDR_COUNT  4   // Number of address bytes
    
    const RFConfig txconf =
    {
        15,
        0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x12, 0x34, 0x56, 0x78, 0x83, 0x6c, 0x04
    };
    
    const RFConfig rxconf =
    {
        15,
        0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x87, 0x65, 0x43, 0x21, 0x83, 0x6c, 0x05
    };
    
    
    
    // LED is to be connected to this pin
    sbit LED_pin = P1^0;
    
    
    // Function prototypes
    void DELAY_LOOP_Wait(const unsigned int);
    void DELAY_100us(volatile unsigned char n);
    unsigned char SPI_ReadWrite(unsigned char b);
    unsigned char RECEIVE_Packet();
    void RECEIVER(void);
    void LED_Flash();
    void INIT(void);
    
    
    
    /*..................................................................*/
    
    
    void main(void)
    {
                    INIT();
    
              while(1)
              {
                RECEIVER();
    
    
          }
    
    
    
    }
    
    
    /*------------------------------------------------------------------*-
    
      DELAY_LOOP_Wait()
    
    -*------------------------------------------------------------------*/
    
    void DELAY_LOOP_Wait(const unsigned int DELAY)
       {
       unsigned int x, y;
    
       for (x = 0; x <= DELAY; x++)
          {
          for (y = 0; y <= 800; y++);
          }
       }
    
    
    /*------------------------------------------------------------------*-
    
      LED_FLASH()
    
    -*------------------------------------------------------------------*/
    
    void LED_Flash()
    {
            do
            {
                    LED_pin = 0;
                    DELAY_LOOP_Wait(1000);
                    LED_pin = 1;
                    DELAY_LOOP_Wait(1000);
            }  while(1);
    }
    
    /*------------------------------------------------------------------*-
    
      DELAY_100us()
    
    -*------------------------------------------------------------------*/
    
    void DELAY_100us(volatile unsigned char n)
    {
        unsigned char i;
        while(n--)
            for(i=0;i<35;i++)
                ;
    }
    
    /*------------------------------------------------------------------*-
    
      SPI_ReadWrite()
    
    -*------------------------------------------------------------------*/
    
    unsigned char SPI_ReadWrite(unsigned char b)
    {
        EXIF &= ~0x20;                  // Clear SPI interrupt
        SPI_DATA = b;                   // Move byte to send to SPI data register
       while((EXIF & 0x20) == 0x00)    // Wait until SPI hs finished transmitting
            ;
        return SPI_DATA;
    }
    
    /*------------------------------------------------------------------*-
    
      TRANSMIT_Packet()
    
    -*------------------------------------------------------------------*/
    
    void TRANSMIT_Packet(unsigned char b)
    {
        unsigned char i;
        CE = 1;
        DELAY_100us(0);
        // Start with the address of the receiver:
        for(i=0;i<ADDR_COUNT;i++)
            SPI_ReadWrite(rxconf.buf[ADDR_INDEX+i]);
        SPI_ReadWrite(b);
        CE = 0;
        DELAY_100us(3);                  // Wait ~300us
    }
    
    
    
    /*------------------------------------------------------------------*-
    
      RECEIVE_Packet()
    
    -*------------------------------------------------------------------*/
    
    unsigned char RECEIVE_Packet()
    {
        unsigned char b;
        CE = 1;
        while(DR1 == 0)
            ;
        b = SPI_ReadWrite(0);
        CE = 0;
        return b;
    
    
    }
    
    
    
    /*------------------------------------------------------------------*-
    
      RECEIVER()
    
    -*------------------------------------------------------------------*/
    
    void RECEIVER(void)
    {
        unsigned char b, bo, err;
        CS = 1;
        DELAY_100us(0);
        for(b=0;b<rxconf.n;b++)
        {
            SPI_ReadWrite(rxconf.buf[b]);
        }
        CS = 0;
            bo = err = 0;
        for(;;)
        {
            b = RECEIVE_Packet();
                    LED_Flash();
        }
    }
    
    
     /*------------------------------------------------------------------*-
    
      TRANSMITTER()
    
    -*------------------------------------------------------------------*/
    
    void TRANSMITTER(void)
    {
        unsigned char b;
        CS = 1;
        DELAY_100us(0);
        for(b=0;b<txconf.n;b++)
        {
            SPI_ReadWrite(txconf.buf[b]);
        }
        CS = 0;
        for(;;)
        {
           TRANSMIT_Packet(b);          // Transmit data
            }
    }
    
    void INIT(void)
    {
            P1_DIR = 0;
        PWR_UP = 1;                     // Turn on Radio
        DELAY_100us(30);                // Wait > 3ms
        SPICLK = 0;                     // Max SPI clock (XTAL/8)
        SPI_CTRL = 0x02;                // Connect internal SPI controller to Radio
    
    }
    
    

Children
No data