Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: И снова NRF24L01
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Rf & Microwave Design
viael
Использую библиотеку с сайта нордика. Все регистры пишу согласно примерам. Все пишется и читается нормально( смотрю отладчиком ).
В режиме приема на ноге IEREF=1.2V на VDD_PA=0V. В режиме передачи и там и там по нулям.Соответственно ничего не принимает и не передает. Модули самодельные по мотивам референс дизайна. Может какие то тонкости есть...?

вот код
Код
#include <p24Fxxxx.h>
#include "ChipInit.h"
#include "Hal_nrf.h"
#include "Hal_nrf_hw.h"
#include "Radio.h"

#define _trapISR __attribute__((interrupt,no_auto_psv))
//#define __ICD2RAM

/** The address of the radio. Parameter to the radio init */
static uint8_t reg[24],address[HAL_NRF_AW_5BYTES] = {0x22,0x33,0x44,0x55,0x01};
static uint8_t pload[RF_PAYLOAD_LENGTH];
volatile uint8_t tmp;

int main ( void )
{    
ChipInit();    
hal_spi_init();
_LATA1=1;
CE_LOW();
CSN_HIGH();
DelayMs(100);
// Start as PRX in Enhanced
// ShockBurst

  
  //hal_nrf_write_reg(RF_SETUP,7);
  hal_nrf_set_datarate(HAL_NRF_1MBPS);
  hal_nrf_set_output_power(HAL_NRF_0DBM);
  
  hal_nrf_close_pipe(HAL_NRF_ALL);               // First close all radio pipes
                                                 // Pipe 0 and 1 open by default
  hal_nrf_open_pipe(HAL_NRF_PIPE0, true);        // Then open pipe0, w/autoack
                                                 // Changed from sb/radio_sb.c

  hal_nrf_set_crc_mode(HAL_NRF_CRC_16BIT);       // Operates in 16bits CRC mode
  hal_nrf_set_auto_retr(RF_RETRANSMITS, RF_RETRANS_DELAY);                
                                                 // Enables auto retransmit.
                                                 // 3 retrans with 250ms delay
                                                 // Changed from sb/radio_sb.c

  hal_nrf_set_address_width(HAL_NRF_AW_5BYTES);  // 5 bytes address width
  hal_nrf_set_address(HAL_NRF_TX, &address[0]);      // Set device's addresses
  hal_nrf_set_address(HAL_NRF_PIPE0, &address[0]);   // Sets recieving address on
                                                 // pipe0
  
//****************************************************************************
    hal_nrf_set_operation_mode(HAL_NRF_PRX);     // Enter RX mode
    hal_nrf_set_rx_pload_width((uint8_t)HAL_NRF_PIPE0, RF_PAYLOAD_LENGTH);
//                                                 // Pipe0 expect
//                                                 // PAYLOAD_LENGTH byte payload
//                                                 // PAYLOAD_LENGTH in radio.h    
//****************************************************************************    
//    hal_nrf_set_operation_mode(HAL_NRF_PTX);     // Enter TX mode
//****************************************************************************                                                                                              
  //hal_nrf_enable_dynamic_pl();                   // Enables dynamic payload
  //hal_nrf_setup_dyn_pl(255);               // Sets up dynamic payload on
                                                 // all data pipes.                                                

  hal_nrf_get_clear_irq_flags ();
  hal_nrf_set_rf_channel(RF_CHANNEL);            // Operating on static channel
                                                 // Defined in radio.h.
                                                 // Frequenzy =
                                                 //        2400 + RF_CHANNEL
                                                
                                      
  hal_nrf_set_power_mode(HAL_NRF_PWR_UP);        // Power up device
  DelayMs(5);

// читаем регистры для проверки
//  reg[0]=hal_nrf_read_reg(CONFIG);
//  Nop();    
//  reg[1]=hal_nrf_read_reg(EN_AA);
//  Nop();
//  reg[2]=hal_nrf_read_reg(EN_RXADDR);
//  Nop();
//  reg[3]=hal_nrf_read_reg(SETUP_AW);
//  Nop();
//  reg[4]=hal_nrf_read_reg(SETUP_RETR);
//  Nop();
//  reg[5]=hal_nrf_read_reg(RF_CH);
//  Nop();
//  reg[6]=hal_nrf_read_reg(RF_SETUP);
//  Nop();
//  reg[7]=hal_nrf_read_reg(OBSERVE_TX);
//  Nop();
//  reg[8]=hal_nrf_read_reg(CD);
//  Nop();
//  reg[9]=hal_nrf_read_reg(RX_PW_P0);
//  Nop();
//  reg[10]=hal_nrf_read_reg(FIFO_STATUS);
//  Nop();
//  hal_nrf_get_address(HAL_NRF_PIPE0,&reg[11]);
//  Nop();
//  hal_nrf_get_address(HAL_NRF_TX,&reg[16]);
//  Nop();
//



CE_HIGH();        // Set Chip Enable (CE) pin high to enable reciever  

while(1)
{
Nop();
ClrWdt();
DelayMs(1);    
//DelayMs(1000);
//hal_nrf_write_tx_pload(pload, RF_PAYLOAD_LENGTH);      // load message into radio
//CE_PULSE();
        if(_LATA1==1)_LATA1=0;
        else _LATA1=1;    
}
return 0;
}



__attribute__(( auto_psv)) void _ISR  _INT0Interrupt (void)
{
IFS0bits.INT0IF = 0;

    switch(hal_nrf_get_clear_irq_flags ())
    {
      case (1<<HAL_NRF_MAX_RT):                 // Max retries reached
        hal_nrf_flush_tx();                     // flush tx fifo, avoid fifo jam
      //  radio_set_status (RF_MAX_RT);
        break;
      
      case (1<<HAL_NRF_TX_DS):                  // Packet sent
      //  radio_set_status (RF_TX_DS);
        break;
      
      case (1<<HAL_NRF_RX_DR):                  // Packet received
        while (!hal_nrf_rx_fifo_empty ())
        {
          hal_nrf_read_rx_pload(pload);
        }

     //   radio_set_status (RF_RX_DR);
        break;
  
      case ((1<<HAL_NRF_RX_DR)|(1<<HAL_NRF_TX_DS)): // Ack payload recieved
        while (!hal_nrf_rx_fifo_empty ())
        {
          hal_nrf_read_rx_pload(pload);
        }
      //  radio_set_status (RF_TX_AP);
        break;
  
      default:
        break;    
    }

             
}


З.Ы. Перепаивал чипы на новые (из другой партии), но тот же эффект.
viael
Вопрос закрыт. При инициализации надо очистить буфер приема и передачи.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.