Автоматика и аппаратура связи Дистанционное и непосредственное управление исполнительными механизмами, сотовая, а также радиосвязь. |
04.02.2016, 17:12
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Попробовать держать ногу CSN на плюсе резистором, чтобы пока проц в ауте, чип не писал мусор в регистры.
|
|
|
|
10.02.2016, 19:02
|
|
Временная регистрация
Регистрация: 25.01.2004
Адрес: Казахстан Северный
Сообщений: 81
Сказал спасибо: 2,771
Сказали Спасибо 80 раз(а) в 22 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Здравствуйте. Не нашел соответствующей темы, решил спросить здесь. Пришли с Китая радиомодули NRF905.
http://www.ebay.com/itm/NRF905-PTR80...8AAOSw1ZBUwGqS
Кто с ними уже работал, просьба подсказать, существует ли быстрый способ для проверки их работоспособности. Когда разбирался с GSM модулями WISMO 228 сначала научился АТ командами производить звонки, отправлять СМС, потом все эти последовательности после обкатки на компьютере реализовал в виде программы на PIC и отправлял через UART в модуль. Существует ли аналогичная готовая программная оболочка для связи с модулем NRF905? Первым делом хочу научиться программировать частоту приема/передачи в радиомодуле, потом уже изучать структуру пакета данных. Если все правильно понял, протокол SPI, как аппаратно бюджетно организовать для связи с компьютером по RS-232?
Любителям разводить пальцы веером и тыкать в изучение англо-даташита просьба не беспокоиться. Спасибо
|
|
|
|
10.02.2016, 19:14
|
|
Временная регистрация
Регистрация: 25.01.2004
Адрес: Казахстан Северный
Сообщений: 81
Сказал спасибо: 2,771
Сказали Спасибо 80 раз(а) в 22 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Для WISMO использовал ПО Sierra Wireless Software Suite v2.34
|
|
|
|
03.03.2016, 11:39
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Update!
Обновил свою библиотеку под nRF24L01. Файлы прикреплены к первому сообщению.
Список изменений:
- Использован энумированный тип. Теперь в дебаге хорошо видно, что именно означает код ошибки
- Изменен процесс обращения к SPI. Использованы функции SPI_Select и SPI_Deselect, что позволило выбросить обращение к GPIO из файла библиотеки и что самое важное - корректно работает передача данных в буфер без перерыва за счет использования буфера передачи на микроконтроллерах STM. Есть там такая полезная фича, позволяющая передавать данные без перерыва без использования прерываний и DMA. Подробнее в статье
- Изменена структура инитиализации. Вместо фиксированных массивов с адресами используем указатели. Теперь можно указывать на данные во флеши, что слегка экономит оперативную память.
- Добавлена процедура быстрого переконфигурирования RX-TX и режима сна.
Все отлажено и прекрасно работает с STM8L/S и STM32. На пиках-аврах потребуется легкая корректировка прослойки SPI-GPIO.
|
|
|
Эти 2 пользователя(ей) сказали Спасибо Easyrider83 за это сообщение:
|
|
|
27.03.2016, 09:58
|
|
Прохожий
Регистрация: 27.10.2009
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Сообщение от wlad773
|
Вот и я добрался и подключил NRF24L01 + PA+LNA. И моему удивлению и разочарованию не было предела, когда выяснилось, что дальность такая же как у безантенных модулей. Кто нибудь может прояснить ситуацию?
|
Не знаю, у меня в промышленной эксплуатации такие модули. Они шлют пакет 18 байт с частотой 560 раз в секунду на расстояние 1200м. С антеннами yagi 16 dB. Уже два года работают отлично.
|
|
|
|
27.03.2016, 10:43
|
|
Гражданин KAZUS.RU
Регистрация: 16.02.2012
Сообщений: 441
Сказал спасибо: 89
Сказали Спасибо 735 раз(а) в 149 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
|
|
|
|
28.03.2016, 16:12
|
|
Временная регистрация
Регистрация: 12.09.2008
Сообщений: 61
Сказал спасибо: 20
Сказали Спасибо 7 раз(а) в 5 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Столкнулся с непонятной (для меня) проблемой.
Передающий модуль циклически каждые 4мс меняет частоту и передаёт 1 раз (один и тот же) пакет. Частот всего 4 (65,24,56,33 каналы).
Приёмник при включении перестраивается последовательно с 0 по 125 канал, слушая каждый 18мс (что-бы охватить все 4 смены частоты передатчика).
Если после приёма и чтения данных делаю сброс флагов так
Код:
|
if(rf_read_reg1(0x17) & 0x01) //RXFIFO emty?
rf_write_reg1(0x07, 0x40); //clear RX_DR
else
{
rf_write_reg1(0xE2, 0x00); //Flush RX
rf_write_reg1(0x07, 0x40); //clear RX_DR
} |
то приёмник видит только 24 и 33 канал.
Я смотрел по логическому анализатору, приём при этом идёт правильно, модуль выдаёт правильное количество принятых байт, чтение проходит правильно, на запрос состояния FIFO выдаётся 0х11, т.е. что буфер пуст и видно, что флаг RX_DR сбрасывается. Но приняв данные на 24 и 33 каналах, 56 и 65 модуль не видит.
Как только делаю после приёма и чтения данных вот так
Код:
|
rf_write_reg1(0xE2, 0x00); //Flush RX
rf_write_reg1(0x07, 0x40); //clear RX_DR |
то есть внаглую смываю буфер (хотя он же пуст?) и сбрасываю RX_DR - все каналы с таким кодом принимаются нормально.
Как правильно организовать приём и как использовать Flush RX?
ПС использую модули NRF24L01+, включен только приём pipe 0.
Последний раз редактировалось ZoomerJuk; 28.03.2016 в 16:49.
|
|
|
|
12.04.2016, 11:30
|
|
Вид на жительство
Регистрация: 09.12.2009
Адрес: Россия, Тула
Сообщений: 377
Сказал спасибо: 192
Сказали Спасибо 156 раз(а) в 99 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Господа, столкнулся с непоняткой.
Есть хорошо работающая система, у которой приемник и пультик.
С пультика можно сделать только "Включить-выключить-горячее-холоднее".
Т.е. для блондинок.
Возникла задача добавить еще один пульт для тонких настроек параметров, повесить его на Pipe1.
адреса задаю вот так:
Код:
|
start_RF_addr[0]=0xE7;
start_RF_addr[1]='F';//(u8)(RF_Addr››24);
start_RF_addr[2]='K';//(u8)(RF_Addr››16);
start_RF_addr[3]='E';//(u8)(RF_Addr››8);
start_RF_addr[4]='Y';//(u8)(RF_Addr);
Pipe1_Addr[0] = 0xE7;
Pipe1_Addr[1] = 'P';
Pipe1_Addr[2] = 'I';
Pipe1_Addr[3] = 'P';
Pipe1_Addr[4] = 'E'; |
Инит вот такой:
Код:
|
unsigned char Init_NRF24L01 (unsigned char RF_Mode, u8 *addr)
{
/*24L01 INIT*/
RF_InitTypeDef RF_InitStruct;
CE_L();
RF_InitStruct.RF_Power_State=RF_Power_On;
if(RF_Mode==RF_Mode_TX)
{ RF_InitStruct.RF_Config=RF_Config_IRQ_RX_Off|RF_Co nfig_IRQ_TX_On|RF_Confing_IRQ_Max_Rt_Off; } //RF_Confing_IRQ_Max_Rt_On;
else
{ RF_InitStruct.RF_Config=RF_Config_IRQ_RX_On|RF_Con fig_IRQ_TX_Off|RF_Confing_IRQ_Max_Rt_Off; }
RF_InitStruct.RF_Mode=RF_Mode;
RF_InitStruct.RF_CRC_Mode = RF_CRC16_On;
RF_InitStruct.RF_Pipe_Auto_Ack = 0;//RF_Pipe0_Ack_Enable;
RF_InitStruct.RF_Enable_Pipe = RF_Pipe0_Enable | RF_Pipe1_Enable;
RF_InitStruct.RF_Setup = RF_Setup_5_Byte_Adress;
RF_InitStruct.RF_TX_Power = RF_TX_Power_High;
RF_InitStruct.RF_Data_Rate = RF_Data_Rate_256kbs;
RF_InitStruct.RF_Channel = 100;
RF_InitStruct.RF_RX_Adress_Pipe0[0]=addr[0];
RF_InitStruct.RF_RX_Adress_Pipe0[1]=addr[1];
RF_InitStruct.RF_RX_Adress_Pipe0[2]=addr[2];
RF_InitStruct.RF_RX_Adress_Pipe0[3]=addr[3];
RF_InitStruct.RF_RX_Adress_Pipe0[4]=addr[4];
RF_InitStruct.RF_RX_Adress_Pipe1[0]=Pipe1_Addr[0];
RF_InitStruct.RF_RX_Adress_Pipe1[1]=Pipe1_Addr[1];
RF_InitStruct.RF_RX_Adress_Pipe1[2]=Pipe1_Addr[2];
RF_InitStruct.RF_RX_Adress_Pipe1[3]=Pipe1_Addr[3];
RF_InitStruct.RF_RX_Adress_Pipe1[4]=Pipe1_Addr[4];
RF_InitStruct.RF_TX_Adress[0]=RF_InitStruct.RF_RX_Adress_Pipe0[0];
RF_InitStruct.RF_TX_Adress[1]=RF_InitStruct.RF_RX_Adress_Pipe0[1];
RF_InitStruct.RF_TX_Adress[2]=RF_InitStruct.RF_RX_Adress_Pipe0[2];
RF_InitStruct.RF_TX_Adress[3]=RF_InitStruct.RF_RX_Adress_Pipe0[3];
RF_InitStruct.RF_TX_Adress[4]=RF_InitStruct.RF_RX_Adress_Pipe0[4];
RF_InitStruct.RF_Payload_Size_Pipe0=16;
RF_InitStruct.RF_Payload_Size_Pipe1=16;
RF_InitStruct.RF_Auto_Retransmit_Count=15;
RF_InitStruct.RF_Auto_Retransmit_Delay=6;
return RF_Init(&RF_InitStruct);
}
// |
Когда прописываю оба адреса, Pipe0 и Pipe1 - приемник не работает вообще, IRQ не дрыгается. Думал он зависает, так нет, на передачу работает.
Стоит закомментировать инит любого из адресов (хоть Pipe0, хоть Pipe1) - всё начинает приниматься. Правда после сброса питания, видать помнит старое.
Что бы это могло быть? Почему пара pipe не работает?
|
|
|
|
12.04.2016, 11:42
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Либа проверялась со всеми включенными пайпами. Обновите либу, чтобы использовать указатели, а не лепить побайтное копирование из флеши в рам.
И убедитесь, что адреса пайпов различаются.
|
|
|
|
12.04.2016, 12:06
|
|
Вид на жительство
Регистрация: 09.12.2009
Адрес: Россия, Тула
Сообщений: 377
Сказал спасибо: 192
Сказали Спасибо 156 раз(а) в 99 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Обновил, проверил. То же самое.
В отладчике прогнал, адреса пишутся разные.
Назначение: адреса 0x0A и 0x0B.
На либу грешить не стОит, ведь по-одному работает хорошо.
А в паре - не хочет.
Попробовал другой приемник - то же самое.
Может чё из параметров еще надо?
Сейчас задается только
RF_InitStruct.RF_Enable_Pipe = RF_Pipe0_Enable | RF_Pipe1_Enable;
и
RF_InitStruct.RF_Payload_Size_Pipe0=16;
RF_InitStruct.RF_Payload_Size_Pipe1=16;
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 01:59.
|
|