Например TDA7294

Форум РадиоКот • Просмотр темы - STM32+NRF24L01. Проблема с флагами в регистре STATUS
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 09:29:41

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: STM32+NRF24L01. Проблема с флагами в регистре STATUS
СообщениеДобавлено: Пт фев 09, 2018 09:18:45 
Встал на лапы

Зарегистрирован: Сб янв 11, 2014 21:25:55
Сообщений: 113
Рейтинг сообщения: 0
Доброго времени суток! Такая вот ситуация у меня: есть передатчик, есть приёмник. Передатчик передаёт без проблем, приёмник без проблем принимает. Решил снять логи и выяснил следующее: приёмник при приёме посылки поднимает флаг RX_DT в STATUS. Естественно, я читаю регистр и сбрасываю флаг ну и забираю данные из приёмного буфера. Передатчик же творит дичь: после отправки посылки через такое нормальноt количество времени (порядка 2 - 4 мс) прилетает флаг MAX_RT, и отсутствует флаг TX_DT. Это значит, что передатчик, в моём случае, аж 16 раз через каждые 250 мкс повторил вещание и не получил (!) подтверждение приёма. Плюс ко всему, в передатчике в STATUS вместе с MAX_RT поднимаются флаги, что регистр приёма данных пуст, то есть, в статусе лежит 0X0E.
Кусок кода передатчика:
Код:
void nrf24_init(){
   w_register(CONFIG, (1<<PWR_UP)|(1<<EN_CRC)|(0<<PRIM_RX));
   for(unsigned int t=0; t<5800; t++);
   w_register(CONFIG, (1<<PWR_UP)|(1<<EN_CRC)|(1<<PRIM_RX));
   CE_HI;
   for(unsigned int t=0; t<600; t++);

   w_register(RX_PW_P0,9);
   w_register(RF_CH, 4);

   set_txaddr(tx_address);
   set_rxaddr(rx_address);

}

void ptx(){
    CE_LO;
   
    CSN_LO;
    w_register(CONFIG,(1<<PWR_UP)|(1<<EN_CRC)|(0<<PRIM_RX));
    CSN_HI;
   
    CE_HI;
    for(unsigned char i=0; i<32; i++);
    CE_LO;
    for(unsigned int t=0; t<600; t++);
}

void prx(){
       
    CSN_LO;
    w_register(CONFIG,(1<<PWR_UP)|(1<<EN_CRC)|(1<<PRIM_RX));
    CSN_HI;
   
    CE_HI;
 
    for(unsigned int t=0; t<600; t++);
}

void nrf24_dataWrite(unsigned char* data, unsigned char nmbr){
       
    CSN_LO;
    SPI(FLUSH_TX);
    CSN_HI;
   
    CSN_LO;
    SPI(W_TX_PAYLOAD);
    for(unsigned char i=0; i<nmbr; i++){
        SPI(data[i]);
    }
    CSN_HI;
       
   ptx();
}

void nrf24_dataRead(unsigned char* data, unsigned char nmbr){

   CSN_LO;
   SPI(R_RX_PAYLOAD);

for(unsigned char i=0; i<nmbr; i++){
      data[i] = SPI(0xFF);
   }

   CSN_HI;

}

int main( void ){
  unsigned long tick = 800000;
     
  spi_init();
  nrf24_init();

  for(unsigned int t=0; t<5800; t++);
   

 
  while(1){
   
    if(--tick == 0){
      nrf24_dataWrite(snd, 9);
   
      tick = 800000;
    }
   
    if(!(PIN_SPI&DD_IRQ)){
      unsigned char tmp = r_register(STATUS);
      w_register(STATUS, tmp);
      prx();
   
    }
   
  }
}


Есть у кого идеи, в чём может быть косяк?

Добавлено after 2 hours 54 minutes 19 seconds:
ПЫ.СЫ. Чип радиомодуля именно NRF24L01, без "+"(!!!).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32+NRF24L01. Проблема с флагами в регистре STATUS
СообщениеДобавлено: Пт фев 09, 2018 15:52:39 
Друг Кота

Карма: 38
Рейтинг сообщений: 618
Зарегистрирован: Пн апр 06, 2015 11:01:53
Сообщений: 3092
Откуда: москва, уфа
Рейтинг сообщения: 0
после отправки посылки через такое нормальноt количество времени (порядка 2 - 4 мс) прилетает флаг MAX_RT, и отсутствует флаг TX_DT. Это значит, что передатчик, в моём случае, аж 16 раз через каждые 250 мкс повторил вещание и не получил (!) подтверждение приёма.

ПЫ.СЫ. Чип радиомодуля именно NRF24L01, без "+"(!!!).

а в версии без плюса вообще есть это самое MAX_RT, ACK-и и авторетрансмит?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32+NRF24L01. Проблема с флагами в регистре STATUS
СообщениеДобавлено: Пт фев 09, 2018 21:52:45 
Встал на лапы

Зарегистрирован: Сб янв 11, 2014 21:25:55
Сообщений: 113
Рейтинг сообщения: 0
Да, конечно. Я Уже сравнил ДШ.

Добавлено after 5 hours 16 minutes 52 seconds:
Отключил нафиг ACK и всё нормально стало...


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y