Главная » Статьи » Как подключить

Радиомодули nRF24L01



 Давно уже обзавелся я этими модулями, да все никак руки до них не доходили попробовать. В общих чертах, это радиомодули, работающие на частоте 2.4 ГГц с подключением к микроконтроллеру по SPI-интерфейсу. Для работы требуется напряжение в диапазоне от 1,8 до 3,6 вольт, входы/выходы толерантны к 5 вольтам, поэтому при подключении к пяти вольтовым устройствам дополнительные согласующие цепи ставить нет необходимости.


 Для подключения радиомодуля выведена гребенка контактов, распиновка приведена ниже:




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

 



 Схема всего этого дела выглядит следующим образом:






 Для подключения радиомодуля использованы ножки аппаратного SPI микроконтроллера, поэтому разъемы подключения модуля и подключения программатор дублируют друг друга.  Это сделано, чтобы удобней было прошивать микроконтроллер на отладночной платке, например, если использовать программатор который подает на схему 5 вольт, а для NRF24L01 это слишком большое напряжение. Чтобы перепрошить управляющий микроконтроллер, достаточно выдернуть трансивер с платы, перепрошить и всунуть его обратно - без лишней возни с перепайкой.


 Код для работы с модулем целиком взят с примера AN #151 на официальном сайте mcselec.com  Я только разделил программную часть приемника от программной части передатчика.



 Код приемника залил в микроконтроллер на тестовой платке. Плату подключил к компьютеру через переходник USB-UART на FT232RL, а питание (3,3 вольта) у меня подается через программатор USBasp




 Горит зеленый светодиод (D1) - приемник готов к работе. При приеме данных загорается красный светодиод (D2)







 Вторую схему - для передатчика - собрал на макетке по той же схеме. Разъем на трансивере оказался не подходящим для того чтобы вставлять плату в макетку и поэтому соединил все проводами. 




 Скорость для соединения приемника с терминалом выставляется 19200 бод. При старте приемник напечатает "RX_device" а дальше - то, что получит с передатчика. В примере передаются постоянные данные "AA+BB+CC+11+#посылки"
 На скрине ниже видно, что номера посылки прыгают, это из-за того что я включал/выключал передатчик пока бродил по двору (максимальное удаление метров 30-40). А видимо проверка CRC в приемнике не пропускала некоторые посылки от передатчика из-за ошибок передачи. 


 

 На мое удивление, когда искал примеры использования этих трансиверов с Bascom-AVR, ничего кроме вышеозвученного апнота #151 не находилось. Хотя в среде ардуинщиков эти трансиверы весьма распространены и под них написано уже куча кода и библиотек. Надо исправлять ситуацию :) Особенно радует цена на них - мне мои достались по 5$ за пару http://www.ebay.com/). 


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



Ниже доступны для скачивания материалы статьи:

исходники и прошивки

 



Оптимизированный код от пользователя Valera18

В коде удаленны не используемые (действия и регистры).
Данная прошивка передаёт данные "AA+BB+CC+11+№посылки".

Внимание!!! прошивка только для "ПЕРЕДАТЧИКА" Attiny2313, специально оптимизирована, занимает 37% в памяти.


Внимание!!! прошивка только для "ПЕРЕДАТЧИКА" Atmega8, специально оптимизирована, занимает 9% в памяти.


Внимание!!! прошивка только для "ПРИЁМНИКА" Atmega8, специально оптимизирована, занимает 11% в памяти.



Теперь для проектов свободного места в памяти "много".


Категория: Как подключить | Добавлено: 25.06.2012
Просмотров: 157812 | Комментарии: 179 | Теги: радиопередача, SPI, ATmega8 | Рейтинг: 4.9/28
Всего комментариев: 1791 2 3 4 5 6 »
179 winziwul   (03.04.2016 16:03) [Материал]
удалил, симулирую в протеусе, передатчик выдаёт по уарт какойто бред а по суте он должен молчать и ждать команду что бы передать её по рф, и приёмник постоянно во уарт передаёт RX_device
Pload:FFFFFFFFFF
а надо что бы он передал только тогда когда принял и то что принял

0  
178 exersizze   (02.04.2016 19:50) [Материал]
Ага, правильно. Только я уже не помню, согласится ли передатчик передавать данные если не заполнять оставшиеся четыре байта.

177 winziwul   (02.04.2016 13:52) [Материал]
подскажите как убрать в передатчике посылку 5-ти байт, что бы он посылал только то что ему пришло по уарт, если я правельно понял то надо вырезать кусок
Gosub Setup_tx
D_bytes(1) = Wr_tx_pload
D_bytes(2) = &HAA
D_bytes(3) = &HBB
D_bytes(4) = &HCC
D_bytes(5) = &H11
D_bytes(6) = W
Call W_register(6)

176 Leosix   (12.05.2015 21:23) [Материал]
Помогите пожалуйста сделать "пульт"
Передатчик на тини13 + одна кнопка, при нажатии посылает "AABBCC1101"
Приёмник на тини 13 + светодиод, при получении "AABBCC1101" светодиод загорается на 30 сек
Тини13 не жалко (можно использовать ножку ресет для кнопки и светодиода)
P.S. вместо светодиода будет другая нагрузка.

175 Leosix   (12.05.2015 21:19) [Материал]
Всем привет!
Собрал передатчик на 2313 и приёмник на меге 8
Всё отлично работает!

174 sany2   (27.12.2014 15:09) [Материал]
Изучить WinAVR

173 Aleks9368   (24.12.2014 09:37) [Материал]
Здравствуйте, скажите как на этих радио модулях сделать радиоудлинитель для термодатчика, спаял часы по этой схеме http://startcd.narod.ru/clock5d/index.html и один датчик хочу вынести на улицу, как подключить приёмник к этой схеме???

+3   Спам
172 Polle   (07.07.2014 11:19) [Материал]
Добрый день! Вот кому интересно видео на мини вот на NRF24L01 : http://youtu.be/TPGh_xQ8rdw

171 sasha   (24.05.2014 21:17) [Материал]
Пожалуйста, помогите мне в моем проекте "два пути nRF24L01" Bascom AVR ... Вопрос в том, если у меня есть 2 спальни, и я хочу знать температуру в каждой комнате для путей 2 "NRF24L01"
Где отправляется из первого номера до второго порядка комнатной, чтобы знать, температура увидеть, где отправить мне второй комнатной температуры, а затем отправить запрос на обращение вторую температуру в камере в зале первый и первый номер, чтобы отправить температуру
Это не следует использовать более чем два из NRF24L01

170 Valera18   (18.02.2014 22:40) [Материал]
Для sanek_713

Раньше Я тоже был удивлён про Attiny13.
Код (в комментарии №173) для передатчика на NRF24L01 весит всего 590 byte, оставшиеся 410 byte должно вполне хватить для обработки кнопок.
Attiny13 можно использовать только для кода передатчика, но для приёмника не подойдёт. Пример kip96 в комментарии №94: http://avrproject.ru/forum/3-138-2

169 sanek_713   (18.02.2014 20:12) [Материал]
Valera18 Я извиняюсь но разве у тиньки 13 не 1кб памяти? Она же туда не влезет.

+1   Спам
168 sany2   (17.02.2014 23:19) [Материал]
Хорошо получилось.Действительно самый маленький термометр

+1   Спам
167 kip96   (17.02.2014 22:53) [Материал]
sany2, такое практическое применение пойдёт? http://avrproject.ru/forum/3-138-2
сообщение 94.

166 sany2   (17.02.2014 21:13) [Материал]
А практическое применение для тини13?Если только заранее зашитую комбиацию цифр передавать,или ножку резет использовать

165 Valera18   (17.02.2014 16:39) [Материал]
Для sanek_713

Вот код для Attiny13:
http://yadi.sk/d/QFWhJyGOJ4Aj7

+1   Спам
164 sanek_713   (16.02.2014 23:39) [Материал]
Valera18 ща буду смотреть)
Плохо что в 13 тиньку не влезет у меня они дешевые)
Спасибо=)

163 Valera18   (16.02.2014 20:11) [Материал]
Для sanek_713

Здесь переработанная прошивка (оптимизирована под скоростную передачу):
1) передача 5 байт
http://yadi.sk/d/vF7D07Mx9g4QY
2) передача 15 байт
http://yadi.sk/d/FypcajG49g4SE
в прошивке описаны действия, поэтому принцип работы будет понятен.
Про кнопки можете почитать в интернете (например: http://avrhelp.mcselec.com/config_debounce.htm)

162 sanek_713   (16.02.2014 19:49) [Материал]
Доброго времени суток) Подскажите . вот есть у меня два модуля NRF24L01 . Смотрел исходники которые выкладывались на сайте, но чет
сложновата программа (для меня, сам уже несколько небольших проектов сделал, но программирую с трудом) . Как изменить код чтобы при одном внешнем прерывании контроллер передавал команду на
NRF24L01 другой NRF24L01 принимал и контроллер ставил на любую ножку лог.1 . И главное чтобы от прерывания до установки логической 1 прошло как можно меньше времени.
Не нашел как прикрепить файл так что вот ссылка, (чтобы вы не искали))) http://avrproject.ru/nrf24l01/nrf24l01_source.rar

Очень буду вам благодарен)

161 exersizze   (06.02.2014 22:01) [Материал]
Да, один и тотже модуль может использоваться как для приема так и для передачи данных.
Из минимальной обвязки только микроконтроллер, и питание на 3 вольта. А в каком режиме будет работать радиомодуль зависит от команд, которые будут отсылаться микроконтроллером.

160 Le_Fleurs   (06.02.2014 01:12) [Материал]
Подскажи я правильно понимаю что этот модуль NRF24L01 используется для передачи и приёма один и тот же, только доп обвязка нужна. Верно?

+1   Спам
159 max   (04.01.2014 17:08) [Материал]
МК питается тоже от 3,3В.

158 fasco   (04.01.2014 16:51) [Материал]
тут вот полтора года назад :) писали такую фразу "Просто подключи ножку (+) питания "модуля" к любой ножке (порту) Atmega8. "
это как? на ноге же 5в, а радиомодуль от 3в ведь питается?

157 Aleks8383   (12.11.2013 12:15) [Материал]
Можно и сделано уже.Смотрите тут. http://avrproject.ru/forum/3-138-1

156 fasco   (12.11.2013 09:49) [Материал]
вы не в курсе, двустороннюю связь на NRF24L01 сделать вообще можно?

155 Valera18   (21.09.2013 12:14) [Материал]
В коде приёмника "Положи 5 байт в TX pload буфера" изменил надпись на "Положи 5 байт в RX pload буфера".

154 Valera18   (21.09.2013 11:54) [Материал]
Для kip96

Если Вы про это действие в прошивке приёмника:

'Сброс буфера
Set Ce
Waitms 1 'Нельзя убирать задержку
Reset Ce

D_bytes(1) = &HA0 'Положи 5 байт в TX pload буфера
D_bytes(2) = &HFF 'Байт 1
D_bytes(3) = &HFF 'Байт 2
D_bytes(4) = &HFF 'Байт 3
D_bytes(5) = &HFF 'Байт 4
D_bytes(6) = &HFF 'Байт 5
Reset Ss
Spiout D_bytes(1) , 6
Set Ss

- это нужно для сброса буфера nRF24L01 при первом включении, так как заметил что при больших скоростях работы начинает зависать, но если произвести сброс при первом включении, то всё работает отлично.
Насчёт этого действия в коде приёмника "Положи 5 байт в TX pload буфера", это не отправляет в передатчик, а отправляет в приёмник для сброса при первом включении. Правильнее будет написать "Положи 5 байт в RX pload буфера".

Насчёт функции Spiout, не хотелось делать "подпрограмму" в "подпрограмме", поэтому решил сделать отдельные Spiout. Отмечу: теперь с отдельными Spiout стало понятнее что происходит в коде. Хотя в случае необходимости можно сделать подпрограмму.

153 kip96   (21.09.2013 08:45) [Материал]
Думаю, код можно сокранить. Каждый раз прописываете
Reset Ss
Spiout D_bytes(1) , 2
Set Ss
А ведь Spiout забирает прилично памяти.Повторяется аж 9 раз.Каждое удаление Spiout экономило 1% памяти. Почему бы не сделать подпрограмму. Потом в приёмнике "'Положи 5 байт в TX pload буфера ", зачем?

152 Valera18   (20.09.2013 22:07) [Материал]
Заново начал проект над пультом с энергосбережением, как тут:

http://avrproject.ru/publ/vstraivaemyj_modul_radioupravlenija_na_nrf24l01/1-1-0-147

Но когда увидел Свои старые прошивки, решил упростить программный код, чтобы было удобнее работать. Результат Меня обрадовал, теперь стало проще работать с прошивкой для модулей NRF24L01.
Прошивки МАКСИМАЛЬНО оптимизированы под скоростную передачу байтов (в прошивке задержку Waitms 100 - это для мигания светодиода, её можно полностью убрать, ДРУГИЕ ЗАДЕРЖКИ Waitms 1 НЕОБХОДИМО ОСТАВИТЬ). Всё лишнее также удалено. Некоторые процессы с пояснениями, сам код стал понятнее.
В общем, может, кому пригодится...

№1: Передатчик на Attiny2313, а приёмник на Atmega8. В данной прошивке организована отправка 5 байт данных, например такие байты:
Dan(1) = &HAA 'Байт 1
Dan(2) = &HBB 'Байт 2
Dan(3) = &HCC 'Байт 3
Dan(4) = &H11 'Байт 4
Dan(5) = &H22 'Байт 5
При приёме байтов светодиод у приёмника начинает мигать.

Прошивку №1 закачал на Яндекс-диск:
http://yadi.sk/d/vF7D07Mx9g4QY

№2: Передатчик на Attiny2313, а приёмник на Atmega8. В данной прошивке организована отправка уже 15 байт данных, например такие байты:
Dan(1) = &HAA 'Байт 1
Dan(2) = &HBB 'Байт 2
Dan(3) = &HCC 'Байт 3
Dan(4) = &HDD 'Байт 4
Dan(5) = &HEE 'Байт 5
Dan(6) = &HFF 'Байт 6
Dan(7) = &H00 'Байт 7
Dan(8) = &H11 'Байт 8
Dan(9) = &H22 'Байт 9
Dan(10) = &H33 'Байт 10
Dan(11) = &H44 'Байт 11
Dan(12) = &H55 'Байт 12
Dan(13) = &H66 'Байт 13
Dan(14) = &H77 'Байт 14
Dan(15) = &H88 'Байт 15
При приёме байтов светодиод у приёмника начинает мигать.

Прошивку №2 закачал на Яндекс-диск:
http://yadi.sk/d/FypcajG49g4SE

Преимущества:
Передатчик на Attiny2313, передаёт 5 байт, теперь занимает 29% в памяти.
Передатчик на Attiny2313, передаёт 15 байт, теперь занимает 39% в памяти.
Приёмник на Atmega8, передаёт 5 байт, теперь занимает 8% в памяти.
Приёмник на Atmega8, передаёт 15 байт, теперь занимает 11% в памяти.

+4   Спам
151 Polle   (27.07.2013 10:52) [Материал]
Добрый день! Вот наконец закончил модель автомобиля под управлением радиомодуля nRF24L01, вот ссылка на видеоролик: http://youtu.be/GngL7pgOk2Q

150 Valera18   (02.04.2013 15:13) [Материал]
Для yurirj

Попробуй подключить "керамический конденсатор" к земле и к ножке SCK (точно не знаю, где-то Я такое уже видел, может поможет).

(((И когда будет возможность попробуй использовать "внешний кварц" с "керамическими конденсаторами"))).

1-30 31-60 61-90 91-120 121-150 151-179
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]






авторизация
Логин:
Пароль: