Главная » Статьи » Proton PICBasic

Связка двух радиомодулей RFM73 фирмы Hope Microelectronics.
Связка двух радиомодулей RFM73 фирмы
Hope Microelectronics.


При создании проектов, например, таких как:
• автоматизация управлением отопительного оборудования,
• кондиционерами,
• охрана объектов недвижимости,
• противоугонные автомобильные устройства,
• управление шлагбаумами и воротами,
• управление удаленными источниками освещения в системах умный дом,
• сбор данных с метеорологических датчиков,
и во многих других проектах возникает необходимость дистанционно принимать или передавать данные на периферийные устройства. В таких случаях целесообразно применение радиомодулей. Не так давно на рынке появились радиомодули RFM73 производства компании Hope Microelectronics. Малые размеры модуля позволяют без труда применять его практически во всех разработках.



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

Случилось так, что наш коллега по форуму, Bonus, предоставил мне два таких модуля. И началось изучение даташитов и копание исходников.
Модуль представляет из себя приемопередатчик с низким энергопотреблением и высокой производительностью. Работает в частотном диапазоне – 2.4ГГц. Скорость передачи настраивается и может быть 250кБит, 1Мбит, 2Мбит. Питание от 1,9В до 3,6В. Интерфейс связи – SPI, CE – chip enable(активация режимов TX или RX), CSN – Chip select (активный низкий), SCK – clock, MOSI – вход данных , MISO – выход данных, IRQ – выход прерывания(активный низкий).
Информация передается пакетами. Длина передающейся информации может быть, как фиксированная, так и динамическая, от 1 до 32 байт. Есть возможность включить опцию авто подтверждения приема, и повторную передачу пакетов, в случаи неудачи (до 15 попыток). Каждый модуль имеет 6 адресов по приему и один адрес передатчика. Адрес передатчика модуля должен совпадать с адресом канала 0 - RX_ADDR_P0. Длина адреса может быть 3, 4, или 5 байт. Первые два адреса (RX) независимы, в остальных задается только младший байт. Старшие байты (2-5) такие же как и в канале 1(RX_ADDR_P1). Более подробно можно прочитать в даташите на модуль. Скажу еще, что похожих модулей есть несколько. Например: nRF24LE1 - очень похож на наш, и команды похожие. А вот BK2421, фирмы BEKEN, точно такой же. Наверно этот чип и стоит в этом модуле.

Теперь немного по интерфейсу.
Все обращения к модулю должны начинаться с подачи низкого уровня на вывод CSN. Далее можно слать данные. Первым всегда идет команда, далее сами данные. По завершению ставим вывод CSN в высокое состояние. Команда начинает исполняться.

Вот как это выглядит на примере:
Код

;****************************************************************
; Подпрограмма: SPI_W
; Пишем байт (SPI)
;****************************************************************
SPI_W:

  SHOut MOSI,SCK,MsbFirst,[Temp] ; Пишем в модуль

  Return

;****************************************************************
; Подпрограмма: SPI_R
; Читаем байт (SPI)
;****************************************************************
SPI_R:

  SHIn MISO,SCK,MsbPre, [Rvalue] ; Читаем с модуля

  Return

;****************************************************************
; Подпрограмма: SPI_Write_Reg
; Пишем значение в регистр
;****************************************************************
SPI_Write_Reg:
  CSN = 0
  Temp = Reg
  GoSub SPI_W ; пишем значение (команда)
  Temp = value
  GoSub SPI_W ; пишем значение
  CSN = 1
Return


Для примера запишем данные в регистр RF_CH.
Код
Reg = WRITE_REG | RF_CH ; выбираем регистр  
value = $0A ; 2.410
GoSub SPI_Write_Reg ; записываем данные в регистр

<script type="text/javascript" src="http://www.picbasic.ru/rtr/1-1"></script>
Сами данные пишутся MSB First – старшим битом вперед (это посылка одного байта). Данные многобайтовых регистров пишутся по разному. Регистры первого банка и регистры с 9 по 14 второго банка, пишутся младшим байтом вперед. Регистры банка 2, с 0 по 8, пишутся старшим байтом вперед.

SPI команды.
Перейдем к используемым, в модуле, командам .

R_REGISTER (000A AAAA) - команда чтения данных с регистра заданного адресом AAAAA.

W_REGISTER (001A AAAA) – команда записи в регистр заданный адресом AAAAA.

R_RX_PAYLOAD (0110 0001) – читает данные из буфера приема, 1-32 байт. Данные удаляются с буфера после чтения.

W_TX_PAYLOAD (1010 0000) – пишет данные в буфер передачи, 1 – 32 байт.

FLUSH_TX (1110 0001) - очищает буфер передачи

FLUSH_RX (1110 0010) – очищает буфер приема. Нельзя выполнять во время передачи пакета авто подтверждения .

REUSE_TX_PL (1110 0011) - Используется для повторной передачи последних переданных данных. Пакеты передаются повторно, пока на CE высокий уровень.

ACTIVATE (0101 0000) - Используйте данную команду с данными 0x73 для активации следующих функций:

R_RX_PL_WID
W_ACK_PAYLOAD
W_TX_PAYLOAD_NOACK


Если снова послать команду с данными 0х73, то функции деактивируются.

Если использовать эту команду с данными 0х53, то переключится текущий банк регистров.

R_RX_PL_WID (0110 0000) - читает длину данных в буфере приема.

W_ACK_PAYLOAD (1010 1PPP) - записывает данные которые можно передать с пакетом подтверждения. PPP – номер канала от 000 до 101.

W_TX_PAYLOAD_NO (1011 0000) - Отключает авто подтверждение в данном
ACK пакете.

NOP (1111 1111) - ничего не делает. Может использоваться для чтения регистра STATUS.

Банки регистров.
В модуле имеется два банка регистров.
В первом банке находятся регистры настройки, такие как - скорости передачи, частоты несущей, адресов каналов, мощности, статусные регистры и так далее. Во втором банке находятся регистры, в которые при инициализации нужно вписать данные с таблицы 5 (см. даташит). Переключение между банками, как я уже писал, осуществляется командой ACTIVATE со значением 0x53.

Пример переключения банков:
Код
;****************************************************************
; Подпрограмма: Switch_Bank
; Переключаем банк
;****************************************************************
Switch_Bank:
  Reg = STATUS_REG
  GoSub SPI_Read_Reg ; Читаем регистр статус
  Rvalue = Rvalue & $80 ; Что бы знать в каком мы банке
   
  Reg = ACTIVATE_CMD
  value = $53

  If Rvalue = $80 And BankB = 0 Then ; Проверяем в каком
  GoSub SPI_Write_Reg ;  
  ElseIf Rvalue = 0 And BankB = 1 Then ; мы банке. Если не в том что
  GoSub SPI_Write_Reg ; надо, то преходим на другой
  EndIf

Return


Практическая часть.

Для тестирования работы модулей применил PIC16F886 и PIC16F887. Почему именно эти микроконтроллеры, да потому, что они у меня были. Нет, у меня есть и PIC16F628, но программа в них, если и поместится, то под самую завязку.
Сам исходный код разбит на три части: RFM73D_Driver.inc(файл с описанием регистров и процедур модуля), Header.inc(файл заголовка) и основной файл (xxxx.bas). При желании, их можно слепить в один, без всяких проблем.
Алгоритм работы программы представлен ниже.



Теперь по схемах. Что бы все было видно наглядно, передатчик передает температуру, считанную с аналогового датчика фирмы Miсrochip MCP9700, на приемник, который отображает ее.


Схема передатчика


Схема приемника

Переключателями S2 выставляется канал, мощность и скорость передачи радиомодуля. Выставлять нужно перед включением питания. Если переключать в работе, то ничего не произойдет.

Видео работы модуля. За качество, извиняйте. Снимал фотоаппаратом.



Ну вот и все, надеюсь, что этот материал, немного, поможет в освоении модулей RFM-73.

Автор Ivan_fd.

Материал подготовлен при материальной поддержке (в виде модулей) и участии в написании статьи - BONUSа.

Архив с исходником, поставил сюда.

Пароль на архив Доступно только для пользователей

Всем удачи!


Категория: Proton PICBasic | Добавил: ivan_fd (24.03.2013)
Просмотров: 16244 | Комментарии: 24 | Теги: PROTON, интерфейс, передача, прием, RFM73, радиомодуль | Рейтинг: 5.0/6
Всего комментариев: 241 2 »
1 mikhail09p   (29.03.2013 20:51)
Отличная работа! Спасибо!

2 ivan_fd   (29.03.2013 22:31)
Спасибо!  wink

3 Sh_Juri   (31.03.2013 12:06)
Спасибо. Актуальная и интересная статья.

4 MiXaS   (07.04.2013 21:12)
Очень подробно спасибо!

5 rybkinleo   (10.04.2013 00:02)
Замечательная статья! Спасибо большое!

6 Alex_by   (05.05.2013 18:54)
Alex_by  (5.05.2013)
Очень нужный для меня материал. Спасибо

7 arn   (20.05.2013 09:24)
эх, если бы для AVR да еще на asm...!

8 ivan_fd   (21.05.2013 00:18)
C АВР не работаю, но в интернете есть примеры на АВР и на асм.

9 hitman   (30.06.2013 17:46)
Отлично, но все же рекомендую модули YS1100 TTL настраиваются одним кликом, а передача еще проще. Также есть модули с 232, 485 и USB. Рекомендую!

10 ivan_fd   (30.06.2013 18:00)
Преимущества этого модуля, наверное только в простоте настройки. 

Скорость 10кбит. Цена 26$

11 Vavilon19   (24.09.2013 01:18)
Спасибо! Эта статья очень помогла мне разобраться со своими RFM70, правда писал для PIC18 и на asm. Прога получилась немного длиннее, но результат впечатлил.

12 MiXaS   (09.10.2013 16:32)
Все хорошо! Но 26$ wacko

Нордики примерно похожи по характеристикам, но стоят 3,20$ за 2 штуки. !!! Настройки и ножки очень схожи!! А цена намного меньше.

13 ivan_fd   (10.10.2013 09:45)
Какие 26$, 3$ за 2 штуки.

14 MiXaS   (22.10.2013 19:17)
так вы сами написали ц26$

15 ivan_fd   (23.10.2013 00:16)
Я писал об этом 

Отлично, но все же рекомендую модули YS1100 TTL настраиваются одним кликом, а передача еще проще. Также есть модули с 232, 485 и USB. Рекомендую!

1-15 16-24
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]