Здесь принимаются все самые невообразимые вопросы... Главное - не стесняйтесь. Поверьте, у нас поначалу вопросы были еще глупее :)
Ответить

NRF24L01, NRF24L01+

Чт фев 14, 2013 17:38:13

Кто-нибудь работал с этой штукой вообще:? Собираюсь использовать(SPI аппаратный), но вот вкуриваю даташит и никак не могу понять, какие байты и в какой последовательности слать для настройки. Ещё вопрос(предупреждаю-тупой)-это же трансивер, значит каждый модуль может слать туда-обратно? Скорость мне особо не нужна, в секунду пересылать нужно байт 100-200, дальность тоже, метров 10 за глаза.... Готовые решения кода видел, но ни одно не устраивает, поэтому придется писать все самому.... :dont_know:

Re: NRF24L01.

Чт фев 14, 2013 21:21:49

Готовые решения кода видел,

А в них , что нет инициализации?

Re: NRF24L01.

Пт фев 15, 2013 17:57:39

Да инициализация есть..но блин..как сказать...В общем, лучше понимаю, когда четко знаю, как,что и в каком порядке слать. А то в одном коде одно, в другом-другое))

Re: NRF24L01.

Пт фев 15, 2013 17:57:39

Да инициализация есть..но блин..как сказать...В общем, лучше понимаю, когда четко знаю, как,что и в каком порядке слать. А то в одном коде одно, в другом-другое))

Re: NRF24L01.

Чт июн 06, 2013 00:19:19

удалось разобраться?
сам сижу мучаюсь)))

нашел готовую библиотеку под AVR на Си, базируется на application note от nordic
простые примеры работают когда один МК передатчик, второй приемник
но вот сделать так, чтобы один МК то принимал, то передавал не полуается

Re: NRF24L01.

Чт июн 06, 2013 08:09:34

Pika4u писал(а):


Здесь по аналогичным модулям есть тема http://kazus.ru/forums/showthread.php?t=104565&page=2

nrf24L01+

Вт сен 23, 2014 12:30:13

Пытаюсь разобраться с этими радио модулями и зашёл в тупик, никак не получается их заставить работать. Или в программе не понимаю или модули брак. Проект в архиве, подскажите что я делаю неправильно. Библиотеку брал тут https://github.com/kehribar/nrf24L01_plus
nrf.rar
(85.4 KiB) Скачиваний: 553

Re: nrf24L01+

Сб сен 27, 2014 17:29:41

в коде лень разбираться. Вот здесь посмотрите: http://we.easyelectronics.ru/Radio/radi ... start.html

Передача данных по nrf24l01 (SPI)

Вт мар 10, 2015 22:03:47

Здравствуйте, думаю многие знают эти модули, nrf24l01, дешево и сердито как говорится. Купил несколько данных модулей, протестировал на МК ( ардуино) все работает хорошо, но нужно теперь упаковать устройство в коробочку размером как пуль от телевизора(можно большой). Требуется считать код нажатой клавиши и передать его по радиоканалу. То есть дешефрировать код клавиши нажатой и отправить в каком-либо виде по радиоканалу.
Есть конечно вариант с Adrduino Nano например, удобно конечно, что можно будет перепрограммировать если что без проблем, но с другой стороны, для того устройства выделять целую Arduino как-то нелогично.
Собственно хотел спросить совета, как лучше поступить в данной ситуации. Модуль работает по интерфейсу SPI, в интернете множество схем есть, но хотелось бы услышать советы более опытных людей, как в данной ситуации с наименьшими затратами сделать данное устройство.
Буду очень благодарен за советы, схемы, предложения.
Спасибо
P.S Datasheet прикрепил
Вложения
nRF24L01Pluss_Preliminary_Product_Specification_v1_0.pdf
(1.06 MiB) Скачиваний: 284

Re: Передача данных по nrf24l01 (SPI)

Чт мар 12, 2015 11:42:10

Взять самый дешевый МК и на нём сделать пульт. В чём проблема?

Re: Передача данных по nrf24l01 (SPI)

Сб мар 14, 2015 15:10:14

CROSP писал(а):протестировал на МК ( ардуино) все работает хорошо

а какую библиотеку ты брал и какие примеры?
у меня что-то в консоли ничего не показывает, хотя сканер ловит короткие щелчки при передаче

т.е. как минимум передатчик я подключил правильно и он что-то передает, а вот приемник непонятно
не раз проверял правильность соединения согласно описанию в библиотеке

Re: nrf24L01+

Чт апр 09, 2015 12:26:14

stenkodv писал(а):Или в программе не понимаю или модули брак.

есть подделки
я почитал, что там китаезы скопировали по даташиту, где был какой-то глюк и они этот глюк в железе сделали, а в оригинале все было нормально, только цифру в даташите не ту написали в нордике

вобщем подделки по протоколу не совместимы и с библиотеками тоже
вот хотел спросить, что там конкретно надо поменять? в пиндосьем описании говорится что-то про автоподтверждение, но я особо не вникал в даташит и код да и в гугле ничего пока не нашел о запуске подделок
читал только, что они между собой работают кое как, но никто код не приводил

если взять библиотеку https://github.com/kehribar/nrf24L01_pl ... er/nrf24.c
то там походу функция void nrf24_config(uint8_t channel, uint8_t pay_length)
а конкретно в ней есть другая функция
// Auto Acknowledgment
nrf24_configRegister(EN_AA,(1<<ENAA_P0)|(1<<ENAA_P1)|(0<<ENAA_P2)|(0<<ENAA_P3)|(0<<ENAA_P4)|(0<<ENAA_P5));

типа эту плюшку если выключить, то оно должно работать
а мне лень городить код и железо для проверки, вот сначала решил спросить

Re: nrf24L01+

Пт май 08, 2015 10:11:35

kalobyte писал(а):читал только, что они между собой работают кое как, но никто код не приводил
а мне лень городить код и железо для проверки, вот сначала решил спросить

А мне было не лень. Работает довольно нелохо. Вот эти
пробивают одну стенку. А эти
пробивают 5 стен. По прямой 700м уверенно, дальше не пробовал. Передача с подтверждением приема. Долбит пока не отправит. Код приемника и передатчика вечером. Код не мой но рабочий.

Re: nrf24L01+

Вс май 10, 2015 15:13:38

код полностью рабочий. Вопросы по коду в личку.
Вложения
nRF24L01.zip
(212.92 KiB) Скачиваний: 914

Re: nrf24L01+

Вс май 24, 2015 02:36:39

chief писал(а):Работает довольно нелохо. Вот эти

у меня такие же, только вроде поддельные
если на 250кбит не работают, то это подделка под + версию, а на самом деле это без плюса, старые
в пределах комнаты на начальных каналах не работает, т.к. диапазон засран
ставил 76 канал и тогда только заводились в пределах пары метров, дальше просто кабеля не хватило

код готовый брал, там через терминал можно переключать режимы - типа один модуль может быть приемником или передатчиком и пишутся временные метки, если пакет принят

Re: nrf24L01+

Ср фев 10, 2016 14:02:27

Мурррного дня и сосисок уважаемым котам.
Хотел создавать новую тему по nRF24, но для начала подниму эту.

Пытаюсь освоить уже ставшие классикой nRF24L01.
Может кто-нибудь простым человеческим языком (не кодом, код я сам напишу)
разъяснить пошагово последовательность работы с модулем?

примерно так:

подготовка передатчика:
1) шаг первый, здороваемся. отправляем 0b00001010 в регистр 00 (конфиг)
2) а дальше? для передатчика вроде как и все.

подготовка приемника
1) шаг первый, здороваемся. отправляем 0b00001011 в регистр 00 (конфиг)
2) шаг второй: учим, сколько байт принимать: пишем в RX_PW_P0 цифру от 1 до 32
3) а дальше? для приемника вроде как и все?!

дальше переходим собственно к работе в основном цикле по приему или передаче
цикл для передатчика:
опускаем CE
1) грузим W_TX_PAYLOAD (отправляем 0b10100000 и байт пакета)
поднимаем CE

цикл для приемника:
1) ждем, не упадет ли пин IRQ, пока высокий - крутимся в цикле
2) если IRQ = 0, опускаем СЕ, сбрасываем флаг прерывания
3) отправляем R_RX_PAYLOAD и любой другой байт, чтобы забрать байт пакета, поднимаем СЕ

вопрос: что я делаю не так?

ибо почти не работает.
очень редко проскакивает пакет, чаще непосредственно после включения передатчика.
остальные 99,999% пакетов не проходят

Re: nrf24L01+

Ср фев 10, 2016 16:15:47

Denkot писал(а):Может кто-нибудь простым человеческим языком (не кодом, код я сам напишу) разъяснить пошагово последовательность работы с модулем?
Яндец предлагает девяносто тысяч(!!!) ссылок по теме... Даже если рассказки самого Нордика(*) вам претят, неужели нельзя было восстановить порядок работы по такому количеству ссылок?

(*) рассказки Нордика:
Вложения
BajkiIzNordic.png
(13.1 KiB) Скачиваний: 2511

Re: nrf24L01+

Ср фев 10, 2016 23:12:15

во-во. все так делают. тыкают носом в мануалы и чужой код (который, кстати, часто очень разный).

Это все у меня есть. И я это понемногу грызу. И когда-нибудь догрызу.

Но я искренне думаю, что если есть на форуме человекот, который много, часто, успешно и самостоятельно работал с сабжем, не копируя чужой код, не подключая готовые библиотеки и тд, то он смог бы мне накидать последовательность действий вышеуказанным мной манером. Для ускорения процесса.

я вот пока не понял, если nrf передатчику постоянно держать поднятым CE - он будет слать данные бесконечно или очень быстро заткнется на прерывании после какого-то события (макс. число попыток, ack приемника или еще что) и его надо будет снова "перезаряжать"? а если payload каждый раз одинаковый?

ну и тому подобные простые мелочи

Re: nrf24L01+

Сб фев 20, 2016 10:46:08

Разгрыз вроде маленько, связь есть...

Поэтому отвечаю на свои вопросы сам...
тем простым языком, который хотелось бы услышать десять дней назад:

Denkot писал(а):подготовка передатчика:
1) шаг первый, здороваемся. отправляем 0b00001010 в регистр 00 (конфиг)
2) а дальше? для передатчика вроде как и все.

Да, это все! если вы не планируете менять частоты, датапайпы и вообще вам хватает дефолтных значений - для передатчика это все. Достаточно выставить один (всего один!) регистр - конфиг, а дальше можно заряжать payload и стрелять.


Denkot писал(а):подготовка приемника
1) шаг первый, здороваемся. отправляем 0b00001011 в регистр 00 (конфиг)
2) шаг второй: учим, сколько байт принимать: пишем в RX_PW_P0 цифру от 1 до 32
3) а дальше? для приемника вроде как и все?!

И опять правда! Минимально необходимая подготовка приемника отличается только тем, что нужно выставить ненулевую длину payload'a в датапайп 0 или 1 (так как только они уже включены по дефолту, остальные надо включать принудительно)


Denkot писал(а):цикл для передатчика:
опускаем CE
1) грузим трюмы W_TX_PAYLOAD (отправляем команду 0b10100000 и байт пакета)
поднимаем CE

Таки да!


Denkot писал(а):цикл для приемника:
1) ждем, не упадет ли пин IRQ, пока высокий - крутимся в цикле
2) если IRQ = 0, опускаем СЕ, сбрасываем флаг прерывания
3) отправляем R_RX_PAYLOAD и любой другой байт, чтобы забрать байт пакета, поднимаем СЕ

А вот здесь "ажидацию" приема пакета лучше сделать на полноценном прерывании.
Использовать один из портов, которые имеют второе назначение в виде INT или PCINT.
Чтобы не тратить процессорное время попусту, организовывая какой-то там цикл (встречал я подобные примеры в тырнетах).
Когда что-то случится, модуль дернет МК за ногу и тогда уже будем чесаться разбираться, что случилось.

Самых ходовых прерываний у модуля три, и все они живут в статусе ("передатчик не достучался" MAX_RT, "данные отправлены" TX_DS и "данные приняты" RX_DR)
В обработчике первым делом грузим статус модуля, проверяем три бита прерываний, сбрасываем что щелкнуло.
Если щелкнуло прерывание RX_DR, то забираем пакет из FIFO.

Всех котов с праздником!

Re: nrf24L01+

Ср мар 02, 2016 20:47:46

Но я искренне думаю, что если есть на форуме человекот, который много, часто, успешно и самостоятельно работал с сабжем


добрый день,

я правда только начал изучать (stm32), но после UART'а начал ковырять nrf-ку.

мне не понравился способ фиксированной длины передачи данных, поэтому использовал динамический payload.

если вы умеете читать и писать в регистры Nrf-ки, тогда действия такие:

Передатчик:

настройка

1. Устанавливаю все регистры, которые затрагиваю, по умолчанию (они сбрасываются только, когда пропадает питание).
2. FEATURE <- 0x06, разрешаю динамическую длину payload и payload с ACK.
3. DYNPD <-0x01, включаю динамическую длину в Pipe0
4. CONFIG <- 0x0A, включаю питание и режим передатчика
5. Жду 1,5 мс., можно меньше, смотря какой кварц.

передача

6. TX_ADDR <- { 0x02,0x10,0x10,0x10,0x10 }; Загружаю адрес кому хочу отослать
7. RX_ADDR_P0 <- { 0x02,0x10,0x10,0x10,0x10 }; Тоже самое, загружаю адрес (в pipe0) от кого хочу получить ответные данные, то есть в TX и RX должен быть адрес получателя
8. W_TX_PAYLOAD <- "-123456789012345678901234567890-" , кладем данные в payload
9. CE = 1, поднимаем CE, разрешаем передачу
10. ждем не меньше 10мкс
11. CE = 0 , опускаем CE, по окончанию передача, Nrf-как уйдет в легкий спящий режим.

прерывание по передаче
12. status <- STATUS, читаем статус регистр, установлен TX_DS? если да все OK отослано
13. status , установлен ли еще RX_DR? если да то значит приемник нам что-то прислал.
14. int cntRead <- R_RX_PL_WID, читаем сколько байт прислал нам приемник в ответ
15. char dataAnswerRead [] -< R_RX_PAYLOAD читаем все данные.
16. CONFIG <- 0x60, очищаем биты прерывания TX_DS и RX_DR


если надо будет могу отписать по шаги по приемнику.
Ответить