This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

nRF24LE1 deep sleep high current

Hi

i use nRF24LE1 in mode deep sleep it working but current consumption to high around 600 - 700 uA

please help

My code code

/**************************************** Copyright (c) ***** ***************************************************/





#include <reg24le1.h>
#include <stdint.h>
#include <stdbool.h>
#include "hal_nrf.h"
#include "hal_nrf_hw.h"
#include "hal_clk.h"
#include "hal_delay.h"
#include "hal_uart.h"

#define LED P13     // LED output
#define RSW P14     // Button wake up



#define TX_PAYLOAD_LEN 32  // wireless send data length
#define RF_CHANNEL 100     // channel
#define RX_PAYLOAD_LEN 32  // Receive data length

uint8_t TX_ADDRESS [5] = {'A', 'E', 'N', 'C', 'M'}; // TX address
uint8_t RX_ADDRESS [5] = {'A', 'E', 'N', 'C', 'S'}; // RX address

xdata bool radio_busy;
uint8_t RF_Recv_Flag;

xdata uint8_t tx_payload[32] = "Hello,W,B0,0000000000000,CCCC,O1";
xdata uint8_t rx_payload[32];

uint8_t RF_Recv_Flag;
uint16_t PipeAndLen;
long timeout = 0;

void IO_Init (void)
{
  P1DIR = 0x10;
  LED = 0;
  OPMCON = 0x00;
}

void RfCofig (void)
{
  RFCKEN = 1;                                                       // Enable RF clock
  hal_nrf_close_pipe(HAL_NRF_ALL);                                  // Turn off all channels first.
  hal_nrf_open_pipe(HAL_NRF_PIPE0,false);                           // Open channel 0 again.
  hal_nrf_set_operation_mode(HAL_NRF_PRX);                          // Mode: Receiver
  hal_nrf_set_rf_channel(RF_CHANNEL);                               // RF channel: 50. Receiving and sending must be on the same channel
  hal_nrf_set_datarate(HAL_NRF_250KBPS);                            // RF rate: 250KBPS
  hal_nrf_set_output_power(HAL_NRF_18DBM);                          // Power: 0DBM
  hal_nrf_set_crc_mode(HAL_NRF_CRC_8BIT);                           // Set CRC check: 16-bit CRC. Must be the same as the sending device
  hal_nrf_set_rx_payload_width(HAL_NRF_PIPE0, RX_PAYLOAD_LEN);      // Need to set the data length in receive mode



    hal_nrf_set_address(HAL_NRF_TX, TX_ADDRESS);
    hal_nrf_set_address(HAL_NRF_PIPE0, RX_ADDRESS);
    hal_nrf_set_power_mode(HAL_NRF_PWR_UP);                          //receiver powered on
    RF = 1;                                                          // enable wireless interrupts
    EA = 1;                                                          // Enable global interrupt
        
    CE_HIGH();                                                       // Enable reception
}



void RF_SendDat(void)
{
    CE_LOW();
    hal_nrf_set_operation_mode(HAL_NRF_PTX);                        //Pattern: Send
    hal_nrf_write_tx_payload(tx_payload,TX_PAYLOAD_LEN);
    CE_PULSE();                                                     //Transmit data wirelessly
    radio_busy = true;  
    while(radio_busy);                                              //Wait for the operation to finish
    hal_nrf_set_operation_mode(HAL_NRF_PRX);                        //Rx mode
    CE_HIGH();
}



void main()
 {

    IO_Init(); //IO initialization
    hal_clk_set_16m_source(HAL_CLK_XOSC16M);                        //Use an external 16MHz crystal
    OPMCON = 0x00;                                                  // Open latch

    while(1)
        {

            if(PWRDWN & 0x80) { PWRDWN = 0; }

            WUOPC1 = 0x10;                                          // Wake up on Pin P14
            if(P14 == 1)
            {
                LED = 1;
                tx_payload[23] = '1';
                RfCofig();
                RF_SendDat();
                hal_nrf_set_power_mode(HAL_NRF_PWR_DOWN);
                LED = 0;
                RFCKEN = 0;
                RF = 0;
                OPMCON = 0x06;
                PWRDWN = 0x01;
            }
        else 
           {
                LED = 1;
                tx_payload[23] = '0';
                RfCofig();
                RF_SendDat();
                hal_nrf_set_power_mode(HAL_NRF_PWR_DOWN);
                LED = 0;
                RFCKEN = 0;
                RF = 0;
                OPMCON = 0x02;
                PWRDWN = 0x01;
            }
        }
 }




//Description: Wireless interrupt service function


void rf_irq () interrupt INTERRUPT_RFIRQ
 {
    uint8_t irq_flags;
    irq_flags = hal_nrf_get_clear_irq_flags ();         // read and clear the wireless interrupt flag
    
    if (irq_flags & ((1 << HAL_NRF_TX_DS)))             // transimmter finish
      {
        radio_busy = false;
      }
    if (irq_flags & ((1 << HAL_NRF_MAX_RT)))            // re-transimmter
     {
        radio_busy = false;
        hal_nrf_flush_tx ();
     }


if (irq_flags & (1 << HAL_NRF_RX_DR))                   // Receive interrupt
    {
     while (! hal_nrf_rx_fifo_empty ())                 // Read data
       {
        PipeAndLen = hal_nrf_read_rx_payload (rx_payload);
       }
        hal_nrf_flush_rx ();
        RF_Recv_Flag = 1;                               // Receive valid flag is set
    }

 }

/******************************************** END FILE *** **************************************************/

Parents Reply Children
No Data
Related