Автоматика и аппаратура связи Дистанционное и непосредственное управление исполнительными механизмами, сотовая, а также радиосвязь. |
17.01.2017, 23:16
|
|
Вид на жительство
Регистрация: 27.11.2007
Сообщений: 429
Сказал спасибо: 19
Сказали Спасибо 39 раз(а) в 30 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
TechMike, EN_ACK_PAY - это не подтверждение, а включение полезной нагрузки с АСК. Т.е. с приемника в момент передачи АСК могут передаваться и данные в этом же пакете.
|
|
|
|
17.01.2017, 23:20
|
|
Вид на жительство
Регистрация: 27.11.2007
Сообщений: 429
Сказал спасибо: 19
Сказали Спасибо 39 раз(а) в 30 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
При конфигурировании надо все регистры записывать.
Приведите весь конфиг.
|
|
|
|
17.01.2017, 23:26
|
|
Вид на жительство
Регистрация: 02.11.2008
Сообщений: 319
Сказал спасибо: 17
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Сообщение от sat_art
|
При конфигурировании надо все регистры записывать.
Приведите весь конфиг.
|
Вся функция конфигурирования NRF:
PHP код:
|
#define mirf_CH 10 //transmission channel
#define mirf_PAYLOAD 0 //payload lenght
#define mirf_setTX mirf_write_register(CONFIG, mirf_CONFIG|((1‹‹PWR_UP)|(0‹‹PRIM_RX)))
#define mirf_setRX mirf_write_register(CONFIG, mirf_CONFIG|((1‹‹PWR_UP)|(1‹‹PRIM_RX)))
#define mirf_CSN_hi PORTB |= (1‹‹CSN);
#define mirf_CSN_lo PORTB &= ~(1‹‹CSN);
#define mirf_CE_hi PORTB |= (1‹‹CE);
#define mirf_CE_lo PORTB &= ~(1‹‹CE);
//config mirf
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);
}
mirf_write_register(CONFIG,0);
_delay_ms(50);
mirf_write_register(EN_RXADDR, (1 ‹‹ ERX_P0) | (1 ‹‹ ERX_P1)); // включение каналов 0 и 1
mirf_write_register(RF_CH, mirf_CH); //set RF channel
if (mirf_PAYLOAD!=0){
// настраиваем отправку данных фиксированной длинны
mirf_write_register(RX_PW_P0, mirf_PAYLOAD); //length of incoming payload
mirf_write_register(FEATURE, (mirf_read_register(FEATURE) & ~0x01)); // включаем автоповтор отправки с контролем приема
}else{
// настраиваем отправку данных произвольной длинны с автоподтверждением
mirf_write_register(FEATURE,(1 ‹‹ EN_DPL) | (1‹‹EN_ACK_PAY) | (1‹‹EN_DYN_ACK));
mirf_write_register(DYNPD, (1 ‹‹ DPL_P0)); // включение произвольной длины для канала 0
mirf_write_register(EN_AA,(1‹‹ENAA_P0)); // включение автоподтверждения только по каналу 0
}
mirf_send_cmd(FLUSH_TX); // очищаем буфер на передачу
mirf_send_cmd(FLUSH_RX); // очищаем буфер на прием
mirf_setRX; // rx mode
_delay_us(135);
mirf_CE_hi;
return 1;
}
|
|
|
|
|
17.01.2017, 23:28
|
|
Вид на жительство
Регистрация: 02.11.2008
Сообщений: 319
Сказал спасибо: 17
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Симптомы дублирования:
Отправляю число 1, на приемнике получаю 1.
Отправляю число 2, на приемнике получаю число 1.
Отправляю число 3, на приемнике получаю число 2.
и т.д.
|
|
|
|
17.01.2017, 23:45
|
|
Вид на жительство
Регистрация: 27.11.2007
Сообщений: 429
Сказал спасибо: 19
Сказали Спасибо 39 раз(а) в 30 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Сообщение от TechMike
|
PHP код:
|
mirf_write_register(CONFIG,0);
|
|
Это зачем?
Сообщение от TechMike
|
if*(mirf_PAYLOAD!=0){
//*настраиваем*отправку*данных*фиксированной*длинны
mirf_write_register(RX_PW_P0,*mirf_PAYLOAD);*//length*of*incoming*payload
mirf_write_register(FEATURE,*(mirf_read_register(F EATURE)*&*~0x01));*//*включаем*автоповтор*отправки*с*контролем*приема
}else{
//*настраиваем*отправку*данных*произвольной*длинны*с *автоподтверждением
mirf_write_register(FEATURE,(1*‹‹*EN_DPL)*|*(1‹‹EN _ACK_PAY)*|*(1‹‹EN_DYN_ACK));
mirf_write_register(DYNPD,*(1*‹‹*DPL_P0));*****//*включение*произвольной*длины*для*канала*0
mirf_write_register(EN_AA,(1‹‹ENAA_P0));****//*включение*автоподтверждения*только*по*каналу*0
}
[/PHP]
|
Зачем здесь условие?
Повторю - прописывайте все регистры при конфигурировании.
|
|
|
|
17.01.2017, 23:51
|
|
Вид на жительство
Регистрация: 02.11.2008
Сообщений: 319
Сказал спасибо: 17
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Сообщение от sat_art
|
Это зачем?
|
С отладки осталось.
|
|
|
|
17.01.2017, 23:53
|
|
Вид на жительство
Регистрация: 02.11.2008
Сообщений: 319
Сказал спасибо: 17
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Сообщение от sat_art
|
Зачем здесь условие?
|
Разные настройки для фиксированного и произвольного PAYLOAD. Долго с этим мучался, пока нашел рабочий вариант.
|
|
|
|
17.01.2017, 23:54
|
|
Вид на жительство
Регистрация: 02.11.2008
Сообщений: 319
Сказал спасибо: 17
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Сообщение от sat_art
|
Повторю - прописывайте все регистры при конфигурировании.
|
Есть пример, чтобы ничего не забыть?
|
|
|
|
17.01.2017, 23:57
|
|
Вид на жительство
Регистрация: 27.11.2007
Сообщений: 429
Сказал спасибо: 19
Сказали Спасибо 39 раз(а) в 30 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Сообщение от TechMike
|
С отладки осталось.
|
Ну так Вы сбрасываете в ноль регистр конфига. т.е. crc отключается полностью.
mirf_PAYLOAD - что за переменная?
Это условие некорректно работает.
|
|
|
|
17.01.2017, 23:57
|
|
Вид на жительство
Регистрация: 27.11.2007
Сообщений: 429
Сказал спасибо: 19
Сказали Спасибо 39 раз(а) в 30 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
TechMike, выше я выкладывал свою библиотеку, посмотрите как там конфигурируется.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 01:19.
|
|