» » Беспроводной канал связи 2,4 ГГц на базе трансивера nRF24L01+ от Nordic Semiconductor. Часть 1

 
 
 

Беспроводной канал связи 2,4 ГГц на базе трансивера nRF24L01+ от Nordic Semiconductor. Часть 1

📆17.03.16 🙋erbol 👀19 489 💬25
Доброго вам дня, уважаемые граждане и гости Датагор.ру - этого замечательного сообщества увлечённых людей!
Мы с мальчишками (сыновья 9 и 14 лет) в поделках, требующих беспроводную связь, используем вот такой радио-модуль на базе трансивера nRF24L01+ от Nordic Semiconductor.

Внимание наше он привлек по нескольким причинам:
Низкая цена.
• Габариты – 15х29 мм (есть также вариант 12х15 мм) - в сочетании с микроконтроллером (МК) небольших размеров (например, ATtiny85) позволяют создавать вполне миниатюрные радио-блоки.
• Наличие всей необходимой обвязки, включая встроенную антенну.
• Низкое энергопотребление – 0.9 мкA в режиме Power Down – важный параметр при создании устройств с автономным питанием.
• Радиус действия до 30 м в помещении и 100 м на улице, с лихвой покрывает наши текущие потребности. Если этого недостаточно, существует вариант с усилителем RFX2401C и внешней антенной с заявленной дальностью до 1100 м.

О том, как настроить и использовать этот радио-модуль, я и хочу рассказать.

Основные характеристики трансивера nRF24L01+

• Рабочая частота - в диапазоне 2400-2525 МГц.
• Максимальная мощность в режиме передачи – 0 dBm.
• Максимальная чувствительность приёмника - (-94 dBm).
• Максимальная скорость передачи данных - 2 Мбит/с.
• Максимальная длина предаваемых за один раз данных - 32 байта.
• Количество одновременно доступных каналов связи - 6.
• Напряжение питания - от 1.9 до 3.6 Вольт.
Детальнее с характеристиками nRF24L01+ можно ознакомиться в документации производителя. См. даташит в файлах к статье.

Маркировка и назначение выводов модуля

Беспроводной канал связи 2,4 ГГц на базе трансивера nRF24L01+ от Nordic Semiconductor. Часть 1

• SCK, MISO, MOSI, СSN - линии интерфейса SPI. Толерантны к напряжению 5В, однако в этом случае рекомендуемое напряжение питания трансивера - от 2.7 до 3.3В.
• CE - управляющий вход. Переключает трансивер, в зависимости от текущих настроек последнего, в один из четырех режимов - Standby-I, Standby-II, передатчик, приемник.
• IRQ - выход прерываний. Если трансивер находится в режиме передатчика, появление на этом выводе низкого уровня свидетельствует об одном из двух событий – 1) пакет данных успешно отправлен, 2) разрешенное количество попыток отправки израсходовано, но пакет данных так и не был отправлен. Для nRF24L01+ в режиме приёмника низкий уровень на выводе IRQ означает получение пакета данных.
• VCC, GND - напряжение питания и земля. Несколько раз я подал по невнимательности +5В на вывод VCC. Радио-модуль такое насилие не убило, но работать корректно при этом он все-же отказался. Обычно мы стараемся подобрать все остальные узлы устройства, включая МК, работающие, как и nRF24L01+, от 3В. Такой подход позволяет упростить общую схему и уменьшить энергопотребление. В противном случае - приходится использовать преобразователи напряжения.

Подключение и программирование nRF24L01+

Прежде, чем перейти к вопросам подключения и программирования трансивера, напомню, что МК от Atmel, а именно об их применении пойдёт речь, бывают как со встроенным аппаратным SPI, так и без оного. Более того, иногда бывает предпочтительным использование программного SPI даже при наличии аппаратного. Поэтому, чтобы статья была максимально полезной, будем рассматривать три способа организации этого интерфейса:
1. Аппаратный SPI на примере ATmega8 и ATmega328P,
2. SPI на базе модуля USI - своеобразного полу-фабриката, который путём не сложных действий можно преобразовать в SPI. Такой модуль имеется, в частности, на борту ATtiny2313, ATtiny25, ATtiny45 и ATtiny85.
3. Программный SPI. Этот вариант подойдёт для любого МК.

Что касается схемы сопряжения, то для начала мы остановимся на варианте, когда на каждый вывод радио-модуля приходится вывод МК. Это облегчит понимание сути вопроса и упростит код. А уже когда мы разберемся с программированием трансивера, я покажу менее разорительный способ подключения.

Итак, соединяем МК и радио-модуль по одной из подходящих вам схем, приведённых в Таблице №1, не забывая про выводы VCC и GND. Если в вашем распоряжении оказался не упомянутый в таблице микроконтроллер, подключайте, ориентируясь на столбец «вывод».


Для начала создадим две базовые функции, обеспечивающие работу SPI - 1) инициализации регистров и выводов, участвующих в протоколе и 2) обмена байтом данных.

Но, перед этим заглянем в спецификацию и выпишем определяемые ею параметры интерфейса:
1. Активный уровень вывода CSN – низкий.
2. Полярность тактового импульса – положительная, а обмен данными происходит по его переднему фронту.
3. Первый в очереди при записи/чтении – старший бит (как в командном слове, так и в байте данных).
4. В случае многобайтных данных первым записывается/считывается младший байт.
5. Максимальная скорость SPI - 10Мбит/с. При тактовой частоте МК в 16МГц мне не понадобилось организовывать задержки, так что привожу этот параметр в качестве общей информации.

Ну что ж, знаниями вооружились - начнём программировать. Местами я буду переносить повествование в комментарии к коду, так что пусть вас не пугает их избыточность.

Прописываем макросы.
Теперь две вышеуказанные функции для аппаратного SPI.
Они же - для SPI на базе USI.
И для программного SPI.
Собственно говоря, на этом все отличия в коде для МК с разным типом SPI исчерпаны. Остальная часть программы для всех трёх вариантов будет абсолютно одинаковой.

Теперь, когда мы знаем, как записывать в трансивер команды и данные, и получать информацию о состоянии его регистров, нужно разобраться, какими именно командами и регистрами необходимо оперировать. И тех, и других у nRF24L01+ хватает, но мы пока будем использовать только 7 команд и 3 регистра (смотри Таблицы 2, 3), чего вполне достаточно для организации простейшей связи между двумя радио-модулями.



Добавим в наш список макросов данные из вышеприведенных таблиц и продолжим написание программы.
Из Таблицы 2 вытекает три важных момента:
1. Обращение МК к nRF24L01+ возможно в двух форматах:
• команда,
• команда + байты данных.
2. По направлению движения информации команды можно разбить на две группы:
• команды чтения из трансивера
• команды записи в трансивер
3. Каждый раз, во время записи в него любой команды, трансивер выдаёт на линию MISO содержимое своего регистра STATUS.

Учтём это и, используя функцию SPI_byte(), создадим ещё три, назначение которых понятно из названий.
Ну вот мы и готовы оформить полноценный код, включая обработчик прерываний, для передатчика.

А теперь полноценный код для приёмника.

Вот, пожалуй, и всё. Конечно, мы пробежались по самым верхам, не вникая в нюансы. Но, если обстоятельно, со всеми подробностями и возможными вариантами изложить хотя бы то, что есть в спецификации, то на выходе получится вполне себе увесистый талмуд, читать который вы навряд ли захотите.
Поэтому, если у этой темы и есть продолжение, то я вижу его в формате ответов на вопросы, которые могут у вас возникнуть.

Пара слов для поклонников Arduino

Мне известны две библиотеки (RF24.h и Mirf.h) для работы Arduino с nRF24L01+, хотя не исключено, что есть и другие. Обе библиотеки, на мой взгляд, работают адекватно и достаточно полно охватывают возможности трансивера.

Однако, если вы решите написать скетч для не «родного», но поддерживаемого Arduino IDE МК (например, ATtiny25, ATtiny45 и ATtiny85), то эти библиотеки работать по понятным причинам не будут. В этом смысле материалы по программному SPI, изложенные в настоящей статье, могут вам пригодиться.

Ссылки

https://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24L01P

Файлы

Даташит на nRF24L01+
nrf24l01p_product_specification_1_0.7z 🕗 15/03/16 ⚖️ 961,96 Kb ⇣ 64

Заключение

В следующей части я, как и обещал, расскажу о более экономных способах соединения радио-модуля с МК.

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

Удачи всем вам!
Ербол (erbol)
Актобе, Казахстан
Профиль erbol
Мне 50 лет. Родился и вырос в г. Актюбинск (ныне - Актобе), Казахстан. Женат, воспитываю четверых прекрасных детей.

С программированием и электроникой имею может и не отдаленные, но весьма эпизодические отношения: в далекие и бурные 90-е годы аж прошлого века посчастливилось участвовать в автоматизации экспериментальной установки с использованием микропроцессорного комплекта КР580.

А пару лет назад мои сорванцы вдруг заинтересовались микроконтроллерами. Пришлось из дальних уголков памяти вытаскивать свои старые познания и стряхивать с них пыль.
 

Читательское голосование

Нравится

Статью одобрил 91 читатель.

Для участия в голосовании зарегистрируйтесь и войдите на сайт с вашими логином и паролем.

28.02.17 изменил Datagor. Исправлены все замеченные на сегодня недостатки.

 

Поделись с друзьями!

 

 

Связанные материалы

 

Схема на Датагоре. Новая статья Визуализация для микроконтроллера. Часть 3. TFT дисплей 2.8" (240х320) на ILI9341... Битва за урожай закончена, можно продолжить повествование. Полноцветный TFT-дисплей 240×320 ILI9341...
Схема на Датагоре. Новая статья Визуализация для микроконтроллера. Часть 2. TFT дисплей 1.8" (128х160) на ST7735... Следующий из рассматриваемых нами модулей обладает полноцветным дисплеем под управлением...
Схема на Датагоре. Новая статья Трансивер 2,4 ГГц Nordic Semiconductor nRF24L01. Перевод таблиц даташита, пояснения и коды для организации сети... Wireless Transceiver Module NRF24L01+ 2.4GHz, 4 шт. на Али Привет, датагорцы! Выкладываю перевод...
Схема на Датагоре. Новая статья Беспроводной канал связи 2,4 ГГц на базе трансивера nRF24L01+ от Nordic Semiconductor. Часть 3... Wireless Transceiver Module NRF24L01+ 2.4GHz, 4 шт. на Али Приветствую всех настоящих и будущих...
Схема на Датагоре. Новая статья Беспроводной канал связи 2,4 ГГц на базе трансивера nRF24L01+ от Nordic Semiconductor. Часть 2... Продолжаем разговор. Как-то раз мы с пацанами решили соединить радио-модуль «nRF24L01+» вот с таким...
Схема на Датагоре. Новая статья Несколько функций для програмной реализации протокола I2C на AVR... Добрый день, дорогие друзья! Решил поделиться с вами несколькими функция для работы по протоколу...
Схема на Датагоре. Новая статья Частотный детектор на двухзатворном полевом транзисторе... Для демодуляции частотно-модулированных (далее – ЧМ) сигналов традиционно используют дробовый...
Схема на Датагоре. Новая статья Texas Instruments. Руководство по выбору компонентов для аналоговых схем... Операционные усилители, компараторы, буфферы, ЦАП/АЦП преобразователи данных, интерфейсы, схемы...
Схема на Датагоре. Новая статья Простой активный фильтр для двухполосного усилителя... В статье речь пойдет об активном фильтре для двухполосного усилителя. Фильтр не нуждается в...
Схема на Датагоре. Новая статья Датчик угла поворота. Сельсин-датчик и приёмник на микроконтроллере.... Схема сельсин-датчика и программа микроконтроллера практически полностью взяты из журнала Радио №4...
Схема на Датагоре. Новая статья Акустическая система с лабиринтом 35ГДН–4 + 2ГД36... Недорогая акустическая система на доступных динамиках с лабиринтом, обладающая хорошим качеством...
Схема на Датагоре. Новая статья TDA7442D+ATmega8. Микропроцессорный регулятор громкости... Привет ВСЕМ!!! Интересно, кому бы не хотелось, чтобы его усь обладал сервисом промышленных...
 

Общаемся по статье 💬

«Беспроводной канал связи 2,4 ГГц на базе трансивера nRF24L01+ от Nordic Semiconductor. Часть 1»

Комментарии, вопросы, ответы, дополнения, отзывы

 

Назад Вперед
<

StalKer-NightMan

Игорь Читатель Датагора
  • Гражданин
Комментарий # 1 от 17-03-16, 12:40.
Ответить
  • С нами с 15.03.2012
  • 96 комментариев
  • 1 публикация
 
Хорошая статья. Спасибо.

<

erbol

Ербол Читатель Датагора
  • Гражданин
Комментарий # 2 от 17-03-16, 13:26.
Ответить
  • С нами с 11.12.2014
  • 80 комментариев
  • 9 публикаций
 
Спасибо, Игорь! smile

<

Datagor

Игорь Котов Читатель Датагора
  • Главный редактор
Комментарий # 3 от 17-03-16, 15:55.
Ответить
  • С нами с 26.02.2006
  • 2 220 комментариев
  • 274 публикации
 
Ербол, спасибо за статью.
Модули на Али заказал, жду продолжения! handshake

<

erbol

Ербол Читатель Датагора
  • Гражданин
Комментарий # 4 от 17-03-16, 17:33.
Ответить
  • С нами с 11.12.2014
  • 80 комментариев
  • 9 публикаций
 
Спасибо, Игорь! Продолжение - в работе smile

<

koan51

Александр Читатель Датагора
  • Гражданин
Комментарий # 5 от 18-03-16, 19:07.
Ответить
  • С нами с 18.03.2010
  • 60 комментариев
  • 5 публикаций
 
Спасибо за хорошую статью.
Файл из архива не открывается, пишет что поврежден.
Архив на тест проходит.

<

Datagor

Игорь Котов Читатель Датагора
  • Главный редактор
Комментарий # 6 от 18-03-16, 20:42.
Ответить
  • С нами с 26.02.2006
  • 2 220 комментариев
  • 274 публикации
 
Цитата: koan51
Файл из архива не открывается, пишет что поврежден.
Архив на тест проходит.
Александр, такие вопросы следует писать мне в личку или через обратную связь или через систему жалоб.

Ваше сообщение не подтверждается. С файлом и архивом всё в порядке.

<

Yamazaki

Сергей Читатель Датагора
  • Гражданин
Комментарий # 7 от 22-03-16, 19:58.
Ответить
  • С нами с 2.07.2009
  • 183 комментария
  • 9 публикаций
 
Ербол, вы упомянали о поделках на этих модулях. Расскажете о них что-нибудь?

<

erbol

Ербол Читатель Датагора
  • Гражданин
Комментарий # 8 от 23-03-16, 0:33.
Ответить
  • С нами с 11.12.2014
  • 80 комментариев
  • 9 публикаций
 
Добрый вечер, Сергей! Что может заинтересовать пацанов 9 и 14 лет? Машинки, элементы умного дома. Недавно кормушку для рыбок закончили, которая по совместительству выводит на TFT-дисплей температуру за окном. Как то так smile

<

demiurg1978

Евгений Читатель Датагора
  • Кандидат
Комментарий # 9 от 23-03-16, 0:56.
Ответить
  • С нами с 16.02.2014
  • 5 комментариев
  • 0 публикаций
 
Родные чипы NRF24 дорогие. Поэтому, если задешево купили модули, то однозначно на чипах-аналогах. Когда делал один заказ, заказали модули с антеннами. Но их нужно было ждать. Поэтому, чтобы не ждать, купил в магазине модуль без антенны. Соображение было такое: чипы одинаковые, потренируюсь на этом. Программу написал, чтение-запись регистров прошло без проблем. А вот когда дело дошло передачи данных, тут всплыли нюансы. На модулях с антеннами вроде как родные чипы. На модуле без антенны аналог, Si24R1.

Момент первый. Если модуль с антенной настроен на прерывания, то до установки пина модуля IRQ регистр статуса читать нельзя.

Момент второй. Выявил совершенно случайно и после долгих поисков ошибки в программе. Нельзя использовать слово "TEST". Иначе модуль зависает на несколько секунд. Судя по всему это заводская команда для проверки работоспособности модулей. Более подробно я не разбирался, выявил причину и успокоился.

<

erbol

Ербол Читатель Датагора
  • Гражданин
Комментарий # 10 от 23-03-16, 1:19.
Ответить
  • С нами с 11.12.2014
  • 80 комментариев
  • 9 публикаций
 
Спасибо за полезную информацию, Евгений! smile Приму к сведению

<

UncleHarry

Игорь Читатель Датагора
  • Гражданин
Комментарий # 11 от 02-04-16, 14:58.
Ответить
  • С нами с 28.04.2009
  • 17 комментариев
  • 0 публикаций
 
Здравствуйте, Ербол! За статью большое спасибо.

Но есть одна неточность в определении макросов

// макрофункции установки/сброса выводов
#define sbi(pin) SPI_PORT |= (1<<pin)
#define cbi(pin) SPI_PORT &= ~(1<<pin)

SPI_PORT нигде не определено, при замене в этих дефайнах SPI_PORT на nRF_PORT все компилируется без ошибок.

Жду продолжения материала по работе с этими модулями! drinks

<

erbol

Ербол Читатель Датагора
  • Гражданин
Комментарий # 12 от 02-04-16, 16:15.
Ответить
  • С нами с 11.12.2014
  • 80 комментариев
  • 9 публикаций
 
Цитата: UncleHarry
Здравствуйте, Ербол! За статью большое спасибо.

Но есть одна неточность в определении макросов...

Добрый день, Игорь! smile
Спасибо за обнаруженную неточность! Поправки будут внесеныhandshake
Продолжение на подходе drinks

<

erbol

Ербол Читатель Датагора
  • Гражданин
Комментарий # 13 от 02-04-16, 17:58.
Ответить
  • С нами с 11.12.2014
  • 80 комментариев
  • 9 публикаций
 
Игорь, а связь появилась между модулями? smile

<

UncleHarry

Игорь Читатель Датагора
  • Гражданин
Комментарий # 14 от 02-04-16, 18:17.
Ответить
  • С нами с 28.04.2009
  • 17 комментариев
  • 0 публикаций
 
Пока в процессе запуска. У меня Мега8 на самодельной макетке и Мега88 на самодельной макетке. Пока что Мегу8 надо поднять, дата-логгером буду смотреть общение меги и модуля по SPI. Уже бы поднял, но отвлекают домашние дела. Сегодня надеюсь запустить все это хозяйство. Отпишусь, как заработает.
Было бы здорово, если бы к статье какой-нибудь полностью рабочий проект приложить. К примеру, термометр с одним удаленным датчиком (мега88+DS18B20). В эту сторону я предполагаю двинуться в продолжении работы с этими модулями. :blush:

<

erbol

Ербол Читатель Датагора
  • Гражданин
Комментарий # 15 от 02-04-16, 18:24.
Ответить
  • С нами с 11.12.2014
  • 80 комментариев
  • 9 публикаций
 
В третьей части как раз ds18b20 будет smile Там, правда, для Ардуино, но код на Си, подходит и под Студию

<

UncleHarry

Игорь Читатель Датагора
  • Гражданин
Комментарий # 16 от 02-04-16, 18:48.
Ответить
  • С нами с 28.04.2009
  • 17 комментариев
  • 0 публикаций
 
Ардуино предполагается просто как аппаратная платформа? Или с использованием ардуиновских библиотек?

Назад Вперед

Добавить комментарий, вопрос, отзыв 💬

Камрады, будьте корректны и вежливы, соблюдайте правила!


Налетай! Паяльники, станции, жала с доставкой

Офигенная миниатюрная рация на литии BaoFeng UV-5R, 5W, 5-15 км!

Тестер универсальный LCR-TC1 для транзисторов, конденсаторов, ESR, MOSFET и т.д.
  • smilelolhellowinkscepticthumbupbored
    crazybadcryingsadirefulsickstraight
    ballooncakegooddrinksmailbombsun
    nightrainstarscolddashpartyhandshake
    musicnegativenowordspardonshoksleepunknown
    wackoyawnsainthelmethashsmokingwhew


Скопируйте текст вашего комментария на случай неверного ответа на контрольный вопрос.