Автоматика и аппаратура связи Дистанционное и непосредственное управление исполнительными механизмами, сотовая, а также радиосвязь. |
18.01.2017, 10:28
|
|
Вид на жительство
Регистрация: 02.11.2008
Сообщений: 319
Сказал спасибо: 17
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Сообщение от sat_art
|
TechMike, выше я выкладывал свою библиотеку, посмотрите как там конфигурируется.
|
Свежая библиотека тут?
|
|
|
|
18.01.2017, 10:29
|
|
Вид на жительство
Регистрация: 27.11.2007
Сообщений: 428
Сказал спасибо: 19
Сказали Спасибо 39 раз(а) в 30 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
TechMike,да.
|
|
|
|
19.01.2017, 23:45
|
|
Вид на жительство
Регистрация: 02.11.2008
Сообщений: 319
Сказал спасибо: 17
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Получилось так, пока в железе не пробовал. Нормально?
PHP код:
|
#define SETUP_AW_5BYTES_ADDRESS (3 ‹‹ AW)
#define SETUP_RETR_DELAY_250MKS (0 ‹‹ ARD)
#define SETUP_RETR_UP_TO_2_RETRANSMIT (2 ‹‹ ARC)
#define RF_SETUP_250KBPS (1 ‹‹ RF_DR_LOW)
uint8_t rxaddr[5] = {0xE7, 0xE7, 0xE7, 0xE7, 0x11};
uint8_t txaddr[5] = {0xE7, 0xE7, 0xE7, 0xE7, 0x11};
mirf_write_register(EN_AA, (1 ‹‹ ENAA_P1)); // включение автоподтверждения только по каналу 1
mirf_write_register(EN_RXADDR, (1 ‹‹ ERX_P0) | (1 ‹‹ ERX_P1)); // включение каналов 0 и 1
mirf_write_register(SETUP_AW, SETUP_AW_5BYTES_ADDRESS); // выбор длины адреса 5 байт
mirf_write_register(SETUP_RETR, SETUP_RETR_DELAY_250MKS | SETUP_RETR_UP_TO_2_RETRANSMIT);
mirf_write_register(RF_CH, mirf_CH); // Выбор частотного канала
mirf_write_register(RF_SETUP, RF_SETUP_250KBPS | RF_SETUP_0DBM); // выбор скорости 250 кбит/с и мощности 0dBm
mirf_write_registers(RX_ADDR_P0, rxaddr, 5);
mirf_write_registers(TX_ADDR, txaddr, 5);
mirf_write_register(RX_PW_P0, 0);
mirf_write_register(RX_PW_P1, 32);
mirf_write_register(DYNPD, (1 ‹‹ DPL_P0) | (1 ‹‹ DPL_P1)); // включение произвольной длины для каналов 0 и 1
mirf_write_register(FEATURE, 0x04); // разрешение произвольной длины пакета данных
mirf_send_cmd(FLUSH_TX); // очищаем буфер на передачу
mirf_send_cmd(FLUSH_RX); // очищаем буфер на прием
mirf_write_register(CONFIG, (1 ‹‹ EN_CRC) | (1 ‹‹ CRCO) | (1 ‹‹ PWR_UP) | (1 ‹‹ PRIM_RX)); // Включение питания
_delay_us(135);
mirf_CE_hi;
|
|
|
|
|
21.01.2017, 17:18
|
|
Вид на жительство
Регистрация: 02.11.2008
Сообщений: 319
Сказал спасибо: 17
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Попробовал в железе, не заработало, очень редко после включения принимающей стороны приходила одна первая команда, а потом просто тишина. Расстояние между приемником и передатчиком не более 20 см.
Процедура инициализации, для передатчика и приемника одинаковая:
PHP код:
|
uint8_t mirf_config()
{
for(uint8_t cnt = 100;;) {
mirf_write_register(CONFIG, (1 ‹‹ EN_CRC) | (1 ‹‹ CRCO) | (1 ‹‹ PRIM_RX)); // Выключение питания
if (mirf_read_register(CONFIG) == ((1 ‹‹ EN_CRC) | (1 ‹‹ CRCO) | (1 ‹‹ PRIM_RX)))
break;
// Если прочитано не то что записано, то значит либо радио-чип ещё инициализируется, либо не работает.
if (!cnt--)
return 0; // Если после 100 попыток не удалось записать что нужно, то выходим с ошибкой
_delay_ms(1);
}
_delay_ms(50);
mirf_write_register(EN_AA, (1 ‹‹ ENAA_P1)); // включение автоподтверждения только по каналу 1
mirf_write_register(EN_RXADDR, (1 ‹‹ ERX_P0) | (1 ‹‹ ERX_P1)); // включение каналов 0 и 1
mirf_write_register(SETUP_AW, SETUP_AW_5BYTES_ADDRESS); // выбор длины адреса 5 байт
mirf_write_register(SETUP_RETR, SETUP_RETR_DELAY_500MKS | SETUP_RETR_UP_TO_2_RETRANSMIT); // задаем ждать подтверждение от принимающего 500мкс и две попытки нас до него достучаться
mirf_write_register(RF_CH, mirf_CH); // Выбор частотного канала
mirf_write_register(RF_SETUP, RF_SETUP_250KBPS | RF_SETUP_0DBM); // выбор скорости 250 кбит/с и мощности 0dBm
mirf_write_registers(RX_ADDR_P0, remote_addr, 5); // задаем адрес от которого получаем подтверждения на канал 0
mirf_write_registers(TX_ADDR, remote_addr, 5); // задаем адрес получателя
mirf_write_registers(RX_ADDR_P1, self_addr, 5); // задаем свой адрес
//mirf_write_register(RX_PW_P0, 0);
//mirf_write_register(RX_PW_P1, 32);
mirf_write_register(DYNPD, (1 ‹‹ DPL_P0) | (1 ‹‹ DPL_P1)); // включение произвольной длины для каналов 0 и 1
mirf_write_register(FEATURE,(1 ‹‹ EN_DPL) | (1‹‹EN_ACK_PAY) | (1‹‹EN_DYN_ACK)); // разрешение произвольной длины пакета данных
mirf_send_cmd(FLUSH_TX); // очищаем буфер на передачу
mirf_send_cmd(FLUSH_RX); // очищаем буфер на прием
mirf_write_register(CONFIG, (1 ‹‹ EN_CRC) | (1 ‹‹ CRCO) | (1 ‹‹ PWR_UP) | (1 ‹‹ PRIM_RX)); // Включение питания и переход на прием
_delay_us(135); // ждем запуска передатчика (с запасом)
mirf_CE_hi; // завершаем конфигурирование NRF
return 1;
}
|
Для передатчика адреса такие:
PHP код:
|
uint8_t self_addr[] = {0xE7, 0xE7, 0xE7, 0xE7, 0xE7}; // Собственный адрес
uint8_t remote_addr[] = {0xC2, 0xC2, 0xC2, 0xC2, 0xC2}; // Адрес удалённой стороны
|
Для приемника:
PHP код:
|
uint8_t self_addr[] = {0xC2, 0xC2, 0xC2, 0xC2, 0xC2}; // Собственный адрес
uint8_t remote_addr[] = {0xE7, 0xE7, 0xE7, 0xE7, 0xE7}; // Адрес удалённой стороны
|
Что попробовать еще настроить в NRF, чтобы получить устойчивую связь?
|
|
|
|
21.01.2017, 17:23
|
|
Вид на жительство
Регистрация: 27.11.2007
Сообщений: 428
Сказал спасибо: 19
Сказали Спасибо 39 раз(а) в 30 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Если с подтверждением, адреса должны быть одинаковые.
|
|
|
|
21.01.2017, 17:44
|
|
Вид на жительство
Регистрация: 02.11.2008
Сообщений: 319
Сказал спасибо: 17
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Сообщение от sat_art
|
Если с подтверждением, адреса должны быть одинаковые.
|
Сделал у обоих:
uint8_t self_addr[] = {0xC2, 0xC2, 0xC2, 0xC2, 0xC2}; // Собственный адрес
uint8_t remote_addr[] = {0xC2, 0xC2, 0xC2, 0xC2, 0xC2}; // Адрес удалённой стороны
но не помогло.
Причем заметил, что передатчик успешно рапортует, что байт отправил (поднимается TX_DS) но на приемнике при этом не поднимается RX_DR
|
|
|
|
21.01.2017, 18:04
|
|
Вид на жительство
Регистрация: 27.11.2007
Сообщений: 428
Сказал спасибо: 19
Сказали Спасибо 39 раз(а) в 30 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Сообщение от TechMike
|
mirf_write_registers(RX_ADDR_P1,*self_addr,*5);*** *********************************************//*задаем*свой*адрес
|
уберите.
У Вас получается Р0 и Р1 одинаковый адрес имеют
|
|
|
|
21.01.2017, 18:10
|
|
Вид на жительство
Регистрация: 02.11.2008
Сообщений: 319
Сказал спасибо: 17
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Сообщение от sat_art
|
уберите.
У Вас получается Р0 и Р1 одинаковый адрес имеют
|
Убрал, ничего не поменялось.
У обоих NRF конфигурация после настройки одинаковая:
STATUS = 14 RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
CONFIG = 15 MASK_RX_DR=0 MASK_TX_DS=0 MASK_MAX_RT=0 EN_CRC=1 CRCO=1 PWR_UP=1 PRIM_RX=1
RF_SETUP = 38 CONT_WAVE=0 RF_DR_LOW=1 PLL_LOCK=0 RF_DR_HIGH=0 RF_PWR=3 LNA_HCURR=0
FEATURE = 07 EN_DPL=1 EN_ACK_PAY=1 EN_DYN_ACK=1
CD=0
CHANEL=10
L_PAYLOAD=0
|
|
|
|
21.01.2017, 18:56
|
|
Вид на жительство
Регистрация: 27.11.2007
Сообщений: 428
Сказал спасибо: 19
Сказали Спасибо 39 раз(а) в 30 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
RF_SETUP = 38 - CONT_WAVE=0 RF_DR_LOW=1 PLL_LOCK=1 RF_DR_HIGH=1 RF_PWR=0 LNA_HCURR=0
если в шестнадцатиричном виде.
установите 2мб скорость
RF_SETUP = 0x0E
|
|
|
|
21.01.2017, 18:57
|
|
Вид на жительство
Регистрация: 27.11.2007
Сообщений: 428
Сказал спасибо: 19
Сказали Спасибо 39 раз(а) в 30 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Сообщение от sat_art
|
Блин эти модули меня реально немного подзамахали.
Два модуля рядом.
Просто с одного на другой передаю подряд пакеты - один тупо ТХ другой RХ.
Без АСК передается нормально и на 1Мб и на 2 Мб
Только включаю АСК
На 2Мб нормально - до 1000 пакетов в секунду.
На 1 Мб жопа. 20-30 пакетов.
|
Вот я писал когда то. А на 250к вообще нормально не завел.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 04:35.
|
|