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

Трансивер 2,4 ГГц Nordic Semiconductor nRF24L01. Перевод таблиц даташита, пояснения и коды для организации сети

📆9 июня 2016   ✒️erbol   🔎21.430   💬0  


Привет, датагорцы!
Выкладываю перевод таблиц из спецификации nRF24L01+, файл с пояснениями и исходники кодов, необходимые для организации радиосвязи между двумя трансиверами nRF24L01+.



Условия организации радиосвязи между двумя трансиверами

Для того, чтобы два трансивера могли «увидеть» друг друга, необходимо обеспечить идентичность следующих их параметров:
1. Несущая частота (регистр RF_CH, адрес – 0x05).
2. Скорость передачи данных (биты RF_DR_LOW, RF_DR_HIGH регистра RF_SETUP, адрес – 0x06)
3. RX-адрес приёмника (регистры RX_ADDR_P0-P5, адресa – 0x0A-0x0F) и TX-адрес передатчика (регистр TX_ADDR, адрес – 0x10). Кроме того, если используется авто-подтверждение, то RX_ADDR_P0 и TX_ADDR передатчика должны быть идентичны RX-адресу приёмника.
4. Ширина адреса (регистр SETUP_AW, адрес – 0x03)
5. Значение регистра RX_PW_Pn (адресa – 0x11-0x16) приёмника и длина отправляемых передатчиком данных. Последняя определяется количеством байт, записываемых после команды W_TX_PAYLOAD внутри одного передёргивания вывода CSN. Т.е., если предполагается обмен, к примеру, двухбайтовыми данными, то в регистр RX_PW_Pn приёмника записывается 2, а загрузка в стек TX_PLD передатчика производится следующим образом:
  cbi(nRF_PORT, CSN_pin);
  SPI_byte(W_TX_PAYLOAD);
  SPI_byte(byte_1);
  SPI_byte(byte_2);
  sbi(nRF_PORT, CSN_pin);     

6. В случае, если по одному и тому же каналу предполагается прём данных разной длины, выхода два:
а) Привести данные к единой, самой большой длине.
б) Разрешить для канала динамическую длину принимаемых данных (ДДПД). Для этого необходимо разрешить ДДПД глобально (бит EN_DPL регистра FEATURE адрес – 0x1D) и локально (регистр DYNPD адрес – 0x1С). Ширина поступивших данных определяется командой R_RX_PL_WID.

Дополнительные условия для работы приёмника

1. По сбросу каналы приёма 5-2 закрыты, поэтому для их активации необходимо записать 1 в биты ERX_P5-2 регистра EN_RXADDR (адрес – 0x02).
2. Запись команды W_REGISTER возможна только в режимах Power down и Standby, поэтому, прежде, чем менять содержимое регистров трансивера, находящегося в режиме приёмника (вывод CE – в 1), нужно, как минимум, сбросить вывод CE в 0.

Описание базовых функций трансивера (файл nRF_base.h)

Большинство регистров nRF24L01+ - восьми-битные, поэтому для работы с ними можно использовать функции nRF_write_byte() и nRF_read_byte().
Запись/чтения регистров большей длины производится с помощью функций nRF_write_array() и nRF_read_ array (). Для этого необходимо создать массив соответствующей длины и передать в функцию имя регистра/команды, имя массива, размер массива. Например, запись в FIFO передатчика трех-байтного слова происходит так:
uint8_t payload[3];
nRF_write_array(W_TX_PAYLOAD, payload, sizeof(payload));

а чтение из FIFO приёмника так:
uint8_t payload[3];
nRF_read_array(R_RX_PAYLOAD, payload, sizeof(payload));

Можно использовать указанные функции и для работы с одним байтом. В этом случае создается массив размером 1
uint8_t config[1] = (1<<EN_CRC) | (1<<PWR_UP) | (1<<PRIM_RX);
nRF_read_array(R_RX_PAYLOAD, config, sizeof(config));

либо просто переменная, но тогда в функции перед именем переменной ставится символ взятия адреса – амперсанд (&):
uint8_t config = (1<<EN_CRC) | (1<<PWR_UP) | (1<<PRIM_RX);
nRF_read_array(R_RX_PAYLOAD, &config, sizeof(config));


Описание функций трансивера (файл nRF24L01.h)

nRF_soft_reset()
В nRF24L01+ не предусмотрен аппаратный сброс, поэтому при сбросе управляющего МК в регистрах трансивера могут оставаться ранее записанные данные, что приведёт к сбоям в работе. Данная функция записывает в регистры nRF24L01+ значения столбца «Reset Value» карты регистров из даташита. Включена в состав функции nRF_init().

nRF_init()
Инициализирует протокол SPI, выдерживает 100 мс, необходимые согласно даташита трансивера и запускает функцию nRF_soft_reset().

Организация и топология сети

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

В качестве одной ячейки сети можно рассматривать цепочку центр управления - посредник – управляемые модули. В этом случае, если не предусматривать обратную связь, трансивер ЦУ настраивается как приёмник, трансиверы модулей как передатчики, а трансивер посредника работает попеременно приёмником (принимая данные от модулей) и передатчиком (передавая данные ЦУ).

Файлы

Все таблицы по nRF24L01+ на русском:
🎁nrf24l01_tables.7z  33.83 Kb ⇣ 120

Исходники для nRF24L01+
🎁nrf24l01-codes.7z  2.23 Kb ⇣ 133

Спасибо за внимание!

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

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

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




 

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

Нравится

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

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

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

 

 

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

 

Схема на Датагоре. Новая статья Беспроводной канал связи 2,4 ГГц на базе трансивера nRF24L01+ от Nordic Semiconductor. Часть 1... Доброго вам дня, уважаемые граждане и гости Датагор.ру - этого замечательного сообщества увлечённых...
Схема на Датагоре. Новая статья Беспроводной канал связи 2,4 ГГц на базе трансивера nRF24L01+ от Nordic Semiconductor. Часть 2... Продолжаем разговор. Как-то раз мы с пацанами решили соединить Микроконтроллер Attiny85 на Али...
Схема на Датагоре. Новая статья Програмирование в AVR Studio 5 с самого начала. Часть 4... Сегодня рассмотрим программу “бегущих огней” и “бегущих теней”. Примеры “бегущих огней” можно...
Схема на Датагоре. Новая статья Датчик угла поворота. Сельсин-датчик и приёмник на микроконтроллере.... Схема сельсин-датчика и программа микроконтроллера практически полностью взяты из журнала Радио №4...
Схема на Датагоре. Новая статья Несколько функций для програмной реализации протокола I2C на AVR... Добрый день, дорогие друзья! Решил поделиться с вами несколькими функция для работы по протоколу...
Схема на Датагоре. Новая статья Универсальный контроллер управления 7-сегментными LED индикаторами по двум проводам (Atmega16)... Занялся я конструированием нового устройства и встал вопрос — на чем отображать данные....
Схема на Датагоре. Новая статья Програмирование в AVR Studio 5 с самого начала. Часть 6... Продолжим разбор теоретических основ, без которых невозможно полноценное создание программ....
Схема на Датагоре. Новая статья Программная реализация протокола I2C на AVR в CodeVisionAVR... Пару лет назад, изучая Atmega8, я захотел программно реализовать работу с устройствами на шине...
Схема на Датагоре. Новая статья Проект DMX512. Микроконтроллер управляет профессиональным шоу. Ч.3... Я думаю, что прочитав теоретическую часть, в которой не всё сразу понятно, лучше сразу потихонечку...
Схема на Датагоре. Новая статья Визуализация для микроконтроллера. Часть 1. OLED дисплей 0.96" (128х64) на SSD1306... Добрый день, друзья! Эта статья открывает цикл, посвящённый средствам визуального отображения...
Схема на Датагоре. Новая статья Микроконтроллерный регулятор мощности - 2... Учитывая замечания и предложение, поступившие в мой адрес после публикации статьи...
Схема на Датагоре. Новая статья Програмирование в AVR Studio 5 с самого начала. Часть 8... Перейдем к изучению встроенных таймеров. Изучение прерываний и особенно таймеров в...
 

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

 

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

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

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