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

Радиомодули 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
Просмотров: 159864 | Комментарии: 179 | Теги: радиопередача, SPI, ATmega8 | Рейтинг: 4.9/28
Всего комментариев: 179« 1 2 3 4 5 6 »
149 Valera18   (02.04.2013 14:55) [Материал]
Для yurirj

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

148 Valera18   (02.04.2013 14:36) [Материал]
Для yurirj

Вы написали: "на одной плате - ATMEGA8-16PU , на второй платке - atmega8A - AU"
Питание ATMEGA8-16PU - от 4.5V до 5.5V

147 Valera18   (02.04.2013 14:32) [Материал]
Для yurirj

Да, какая-то ерунда происходит с Atmega8.

Проверь: вот фьюзы с рабочего приёмника на Atmega8A:
http://s1.ipicture.ru/uploads/20130402/o6Zb1Mcf.jpg

Может у Тебя программа Bascom-AVR портачит при программирование.

146 Valera18   (02.04.2013 00:02) [Материал]
Для yurirj

(((А Вы уверены в работоспособности Atmega ? может Вы сбили какие-то значения во фьюзах Atmega, когда настраивали, поэтому Atmega теперь косячит.)))

145 Valera18   (01.04.2013 22:38) [Материал]
Для yurirj

Попробуй убрать все значения "Const Write_reg = &H20" и так далее.

В настройках, сложи значения, и запиши в ручную, пример:
D_bytes(1) = Write_reg + Tx_addr
Write_reg = &H20
Tx_addr = &H10
следовательно D_bytes(1) = &H30 , и так со всеми, может поможет.

Мысли: у Atmega какая-то рассинхронизация, может из-за внутреннего кварца, может проблема где-то в настройках "Фьюзах".

144 Valera18   (01.04.2013 21:23) [Материал]
Для yurirj

Попробуй изменить частоту (у приёмника и передатчика) на другую.
Call W_register(2)
D_bytes(1) = Write_reg + Rf_ch 'Настройка каналов
D_bytes(2) = 40 'Частота 2440 MГц
нужно в настройках изменить число 40 на более высокое (диапазон от 0 до 125).
Попробуй на улице.

Может у Тебя Atmega8 портачит (порты подпалённые), поэтому не работает.

143 max   (01.04.2013 18:50) [Материал]
Я подключал к Т2313, М128, М168 - все работает без проблем. AVCC подключаю через емкость 0,1 мкФ на землю. Представь схемы, код и фьюзы.

+1   Спам
142 yurirj   (31.03.2013 19:10) [Материал]
насчет AVCC .. сейчас подключу конечно.. но я сейчас проверил - там уже "по умолчанию" - то же напряжение, что и на VCC - такое впечатление, что они соединены внутри микросхемы... но раз говорите - сейчас буду подпаивать...

141 Valera18   (31.03.2013 19:01) [Материал]
Для yurirj

Да, подключи AVCC к (+) плюсу. Был случай с Attiny26, не работала, оказалось без AVCC не работает, поэтому лучше и на Atmega8 тоже подключать к (+) плюсу. Лично Я всегда подключаю.
И "все" VCC подключи к (+) плюсу, и "все" GND к (-) минусу.

Насчёт распечатки сказать не смогу, Сам не пробовал значение "Gosub Dump_registers".

140 yurirj   (31.03.2013 18:58) [Материал]
Gosub Dump_registers включал....
Посыпалось много данных.... но я не знаю что должно быть , а что - неверно... могу включить и распечатку Вам показать..

139 Valera18   (31.03.2013 18:50) [Материал]
Для yurirj

Вообще, есть какие-то считывание у "Передатчика", можно попробовать скопировать и на "Приёмник":
http://avrproject.ru/nrf24l01/reciever.rar
нужно включить значение "Gosub Dump_registers", в главном цикле Do.
Может пригодится для проверки "модулей".

138 yurirj   (31.03.2013 18:47) [Материал]
AVCC я вобще не подключал.... только VCC и GND ... а что это надо было сделать обязательно ??
Прошивается то правильно - я пробовал разные варианты - когда менял частоту и длительность пауз - видно сразу - то быстро мигает диодом , то медленнее...

137 yurirj   (31.03.2013 18:36) [Материал]
CSN ( она же SS - если по обозначению ATMEGA ) - да... на B2 - и на передатчике и на приемнике

136 Valera18   (31.03.2013 18:31) [Материал]
Для yurirj

Ножка CSN "модуля nRF24L01" подключена к PORTB.2 ?
У Atmega8 ножка AVCC подключена к (+) плюсу питания?
Программатор после прошивки проверяет прошитые данные, может не верно пришивает?

135 yurirj   (31.03.2013 18:26) [Материал]
по поводу буфера - тоже пробовал - подавал на IRQ - принудительно "0" - и смотрел что принимается - принимается всегда Pload : 0000000

134 yurirj   (31.03.2013 18:23) [Материал]
скажите пожалуйста, а я могу проверить как то работоспособность самих модулей ?? Например - записью-чтением каких нибудь регистров ?? Может у меня неправильно изначально настраиваются они ??

133 Valera18   (31.03.2013 18:21) [Материал]
Для yurirj

Попробуй подключить Приёмник к UART, и смотреть что принимает.
((Тогда, нужно убрать "If Irq = 0 Then", чтобы постоянно считывала буфер))

132 yurirj   (31.03.2013 18:13) [Материал]
питание - через КРЕН - 3.3 в .. сжечь вроде не должен был...
Start-up time: 6 CK + 64 ms - конечно попробую... но я вроде все перепробовал - и 64 и 4 и 0 ... но сейчас ..буду пробовать
приемник НИ РАЗУ не принимал сигнал...

131 Valera18   (31.03.2013 18:04) [Материал]
Для yurirj

Очень странно.
За всё время приёмник хоть раз принимал сигнал?
Проверьте ножку CSN и SCK, Вы их не перепутали?
Используете Atmega8 (приёмник и передатчик)?
Питание 3,3V для NRF24L01. Вы не могли случайно сжечь?
Может происходит начальная просадка напряжения?

Вы написали:
Boot Flash section size=1024,
Brown-out detection level at VCC=2.7 V;
Int. RC Osc. 8 MHz; Start-up time: 6 CK + 0 ms
попробуйте изменить на Start-up time: 6 CK + 64 ms, вроде так, первоначальная задержка на 64 ms

130 yurirj   (31.03.2013 17:38) [Материал]
Порты подключены правильно... проверял несколько раз... мало того, порты тоже менял - подключал и на D и на B // приемник подключил так :

Config Portb.1 = Output : Ce Alias Portb.1 'CE pin is output
Config Portb.2 = Output : Ss Alias Portb.2 'SS pin is output
Config Pinb.0 = Input : Irq Alias Pinb.0 'IRQ pin is input
Config Portd.3 = Output : Red_led Alias Portd.3
а передатчик по другому...

Config Portb.1 = Output : Ce Alias Portb.1 'CE pin is output
Config Portb.2 = Output : Ss Alias Portb.2 'SS pin is output
Config Pind.7 = Input : Irq Alias Pind.7 'IRQ pin is input
Config Portd.4 = Output : Red_led Alias Portd.4

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

129 Valera18   (31.03.2013 16:23) [Материал]
Для yurirj

Частота у Atmega может быть любой, даже разная у обоих.
Вероятно, проблема в портах (не правильно написаны).

Проверьте прошивку (как выставлены порты):
Config Portd.5 = Output : Ce Alias Portd.5 'CE pin is output
Config Portb.2 = Output : Ss Alias Portb.2 'SS pin is output
Config Pind.7 = Input : Irq Alias Pind.7 'IRQ pin is input
сверьте с картинкой, попробуйте подключить так-же. Если используете "оптимизированную прошивку" проверьте как прописаны порты, и измените на те которые на картинке.

Если всё подключено по картинке, в прошивке порты верно выставлены, тогда заработает сразу. Для первого раза Фьюзы можно не трогать, на заводских (первоначальных) фьюзах оставить.

128 yurirj   (31.03.2013 14:47) [Материал]
Уважаемый Valera18!!
Бьюсь с этими NRF уже 4-й месяц... испробовал все - и заказывал уже разные ( в разных корпусах) и пробовал менять частоту в настройках SPI и длительность пауз ( думал что не успевает на большой частоте работать) Но все - бестолку.. это стало для меня просто какой то "идеей фикс" - заставить их работать...но что то не получается..
ATMEG-и работают от внутреннего кварца.(может здесь "собака порылась" ?? Говорят, что если хоть чуть чуть не совпадает частота - они не запустятся.. Передатчик вроде передает - смотрел логическим анализатором - по крайней мере на MOSI импульсы поступают... а вот на приемнике - на выходе IRQ - всегда тишина - ничего нету....
Может у меня фьюзы не так выставлены ( читал в переписке что было такое) ?
У меня выставлено -
Boot Flash section size=1024,
Brown-out detection level at VCC=2.7 V;
Int. RC Osc. 8 MHz; Start-up time: 6 CK + 0 ms
а если в HEX ? то 0xD9, 0xC4 правильно ли это ??
Где мне рыть ??? что посоветуете ??

127 Valera18   (12.02.2013 21:43) [Материал]
Для kip96

Да, верно, Int0 для выхода из Powerdown, подтяните 10 КОм к +питания.
В Attiny2313 SPI интерфейс какой-то другой, как Я не мучил Attiny2313 в приёмнике задействовать с "модулем nRF24L01" не удалось, зато как передатчик работает отлично.
Ещё можно задействовать в прошивке: TX Flussing TX буфера, проверка приёма, про который вы рассказывали.
Удачи.

126 kip96   (12.02.2013 21:29) [Материал]
Про питание- при включении приёмник в терминал выдавал. Но приёмник не принимал. Толи nRF24L01 такой попался, толи SPI при низком напряжении глючил, не знаю.
Про алгоритм понял. И Int0 для просыпания, так? А то думаю к чему, подпрограммы от прерывания нет. Ясно. Спасибо. Делать буду Меге48. Они дешевле 2313, а возможностей больше. Термометр- аналоговый. На TC1047AVNBTR (V=T+500mV). т.е можно мерять отрицательную температуру без смещения. Уже юзал, понравилось. Передатчики будут одинаковые. Три свободных пина Меги отведу под адресс. Замыкая их на минус будет определяться адресс передатчика.(ну вообщем как на памяти и2с) Ну и передатчики, где нужно, будут управлять нагрузкой, по команде с "центра". Алгоритм будет как у Вас. Дальше поглядим.
Почему 2313 не может работать на приём?

125 Valera18   (12.02.2013 20:50) [Материал]
Для kip96

Насчёт питания "модуля nRF24L01".
Возможно от 3V не заработало, так как использовали Atmega8 (2,7V), просело напряжение (точно не знаю, не пробовал понижать напряжение у Atmega8).
Пробовал "передатчик на Attiny2313", работоспособность сохранялась до 1,9V, "приёмник на Attiny2313" невозможен.

124 Valera18   (12.02.2013 20:35) [Материал]
Для kip96

http://avrproject.ru/publ/peredacha_izmerennoj_temperatury_po_radiokanalu_svjazka_nrf24l01_i_ds18b20/1-1-0-106#comments
Из 22 комментария, прошивка:
http://yadi.sk/d/EOz1gCU063aZK

Принцип работы "приёмопередающего моста с режимом энергосбережения":
1. Приёмник выставляет "адрес" первого передатчика.
2. Приёмник отправляет "простой сигнал" первому передатчику, после приёмник переключается на приём.

а). Первый передатчик принимает "простой сигнал" и просыпается из (Powerdown).
б). Первый передатчик отправляет "данные, число 28" (температуру, если вы добавите "код" опроса DS18B20).
с). Первый передатчик переключается на приём и засыпает (Powerdown).

3. Приёмник получает "данные, число 28" и выводит на LCD.
4. После приёмник меняет "адрес" на второй передатчик, и все действия повторяются...

Внимание, прошивка тестовая, не проверял, была написана как ответ на вопрос.

123 Valera18   (12.02.2013 20:12) [Материал]
Для kip96

Насчёт прошивки с работой "трёх передатчиков и одного приёмника".

http://avrproject.ru/publ/peredacha_izmerennoj_temperatury_po_radiokanalu_svjazka_nrf24l01_i_ds18b20/1-1-0-106#comments

Прочти "22 комментарий" и "30 комментарий". В "22 комментарии" есть ссылка на прошивку.
Прошивка - это только приёмопередающий мост, для термометров DS18B20 нужно добавить в прошивку "код опроса DS18B20", в этом сложности быть не должно, так как "код" опроса есть в свободном доступе.

122 kip96   (12.02.2013 19:12) [Материал]
"Максимальное количество повторных попыток, TX Flussing TX буфера сейчас!" надо заменить на "Максимальное количество повторных попыток связаться с приёмником.Приёмник не обнаружен."
Блин пол дня мучал. Чёт не подумал, что он держит обратную связь без установок.Надо даташит помучать и попробывать это как-то использовать. Как ни странно, приёмник не работал при 3вольтах. По этому и провозился. Поднял до 3,3 и заработало!
На счёт радиомаяка- трудно использовать по силе сигнала. На таких частотах, передатчик за стеной в 5 метрах будет плохо принимать, чем за 50 метров по воздуху. Как определить? Да и множество отражённых сигналов будут вносить погрешность. Скорее эта функция нужна для настройки передатчика на излучаемую мощность, для экономии энергии.
Valera18, каков алгоритм работы с тремя передатчиками.Если описывали, ссылочку плиз, а то чуго-то не встретил. Спасибо.

121 exersizze   (12.02.2013 18:43) [Материал]
Ага, передатчик ждет подтверждения того что приемник поймал передачу. Если ответа нет, то шлет в терминал предупреждение. 
ЗЫ: комменты к коду конечно жгут, гугл постарался на славу 8) 

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

120 kip96   (12.02.2013 14:17) [Материал]
Респект авторам! Пришли модули , запустил и сразу вопрос. Передатчик выдаёт "Максимальное количество повторных попыток, TX Flussing TX буфера сейчас!". Что это означает.
Собственно пока приёмник не включен, передатчик выдаёт это. Передатчик после передачи пакета ждёт ответ?

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






авторизация