В начало | Зарегистрироваться | Заказать наши киты почтой
 
 
 
 

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

📆17 марта 2016   ✒️erbol   🔎31.434   💬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  961.96 Kb ⇣ 101

Заключение

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

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

Удачи всем вам!

Камрад, рассмотри датагорские рекомендации

🌼 Полезные и проверенные железяки, можно брать

Опробовано в лаборатории редакции или читателями.




 

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

Нравится

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

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

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

 

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

 

 

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

 

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

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

 

Назад Вперед
<
Читатель Датагора

erbol

<
Читатель Датагора

UncleHarry

<
Читатель Датагора

erbol

<
Читатель Датагора

UncleHarry

<
Читатель Датагора

Vlad-Libra

<
Читатель Датагора

erbol

<
Читатель Датагора

maddiego



<
Читатель Датагора

Variator

<
Читатель Датагора

erbol

Назад Вперед

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

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

  • Смайлы и люди
    Животные и природа
    Еда и напитки
    Активность
    Путешествия и места
    Предметы
    Символы
    Флаги
 
 
В начало | Зарегистрироваться | Заказать наши киты почтой