Подключение радиомодулей HC-12 на основе трансивера Si4463

Подключение HC-12 Si4463
Радиомодули HC-12 построены на трансивере Si4463, и микроконтроллере серии STM8S, трансивер (приемопередатчик) обеспечивает двунаправленную радиосвязь, а микроконтроллер образует прозрачный интерфейс передачи данных, что позволяет с помощью двух модулей организовать беспроводной UART интерфейс. Максимальная заявленная дальность связи может достигать 1,8 км на открытой местности.

Я приобрел модули в Китае, заказать можно здесь, с виду представляют собой миниатюрную плату, размером 27,4х13,2 мм, на которой расположены микросхема трансивера, микроконтроллер, кварцевый генератор, антенный разъем, стабилизатор напряжения.

Модуль HC-12 поддерживает многоканальный режим передачи данных в пределах 433,4-473,0 МГц, с шагом 400 кГц, всего 100 каналов. Максимальная мощность передатчика составляет 100 мВт (+20 дБм), чувствительность приемника лежит в пределах -124…-100 дБм, в зависимости от скорости передачи данных.

Напряжение питания модуля может варьироваться в пределах 3,2…5,5 В, максимальный потребляемый ток составляет 100 мА (в режиме передатчика при максимальной мощности +20 дБм). Модуль имеет 5 выводов: VCC и GND для подключения питания, выводы TX и RX для передачи данных по интерфейсу UART, а также вывод SET для настройки модуля с помощью AT команд.

Радиомодули HC-12 позиционируются в качестве беспроводной замены физического (проводного) полудуплексного соединения UART, полудуплекс означает, что модуль не может вести прием и передачу данных одновременно.

 

Режимы передачи данных модуля HC-12

Модуль имеет 4 режима передачи данных: FU1, FU2, FU3, FU4, которые различаются скоростью передачи данных, и энергопотреблением в режиме ожидания. По умолчанию задействован режим FU3. Модули с разными режимами не могут передавать данные друг другу, необходимо выбрать одинаковые режимы, наиболее подходящие по требованиям к конкретной ситуации. Кроме режима, одинаковыми должны быть скорость передачи данных порта UART, и номер канала.

Количество передаваемых данных (байт) не ограничено (только для режимов FU1, FU3), но следует знать, что при непрерывной передаче большого количества данных, несколько байт могут быть утеряны, из-за воздействия различных помех и других факторов.

В режиме FU3 модуль функционирует на максимальной скорости, ток потребления в режиме ожидания составляет 16 мА. В этом режиме скорость передачи данных по радиоканалу автоматически регулируется в зависимости от установленной скорости порта UART, соотношение скоростей приведено в  таблице ниже:

Скорость порта UART, Бит/сек1200240048009600192003840057600115200
Скорость по радиоканалу, Бит/сек50001500058000236000

Для увеличения дальности связи, рекомендуется снизить скорость передачи данных порта UART.

В следующей таблице представлены данные по чувствительности приемника, в зависимости от скорости передачи данных по радиоканалу:

Скорость по радиоканалу, Бит/сек50050001500058000236000/250000
Чувствительность приемника, дБм-124-116-111-106-100

Как правило, чувствительность уменьшается на 6…10 дБ, а дальность связи в 2 раза. Максимальная дальность связи на открытой местности (по технической документации) для режима FU3 составляет 1000 м.
Режим FU1 является энергосберегающим, ток потребление в режиме ожидания составляет 3,6 мА. Здесь также можно установить 8 различных скоростей порта UART (как в режиме FU3), но скорость передачи по радиоканалу фиксирована, и составляет 250000 Бит/сек, дальность связи небольшая, до 100 м.

FU2 – режим энергосбережения со сверхнизким энергопотреблением, ток потребления в режиме ожидания составляет около 80 мкА. Этот режим поддерживает следующие значения скорости порта UART: 1200, 2400, 4800 Бит/сек. Если до этого UART порт функционировал на более высокой скорости, то модуль автоматически снизить скорость порта до 4800 Бит/сек, изменения вступят в силу после выхода из режима настроек.

Передача данных возможна только небольшими пакетами (не более 20 байт), интервал времени между пакетами не должен быть слишком коротким (желательно не менее 2 сек), иначе возможна потеря данных. Скорость передачи по радиоканалу и дальность связи такие же, как и в режиме FU1.

Режим FU4 предназначен для максимальной дальности связи, ток потребления в режиме ожидания составляет 16 мА. Поддерживается только самая низкая скорость порта UART: 1200 Бит/сек, если установлена более высокая скорость UART порта, то модуль автоматически снизить ее. Скорость передачи по радиоканалу фиксирована и составляет 500 Бит/сек. Передача данных возможна только небольшими пакетами (не более 60 байт), интервал времени между пакетами не должен быть менее 2 сек, иначе возможна потеря данных. Дальность связи на открытой местности может достигать 1800 м.

В следующей таблице представлены характеристики радиомодуля HC-12 при различных режимах:

РежимFU1FU2FU3FU4
Ток потребления в режиме ожидания3,6 мА80 мкА16 мА16 мА
Время передачи данных15…25 мс500 мс4…80 мс1 секПередача одного байта
Задержка цикла (время от передачи и до получения пакета данных)31 мсСкорость UART 9600 Бит/сек
Передача одного байта
31 мсСкорость UART 9600 Бит/сек
Передача 10-ти байт
Дальность связи при максимальной мощности передатчика +20 дБм100 м100 м600 м при 9600 Бит/сек1800 м при 1200 Бит/секЗначения даны для идеальных условий на открытой местности
1000 м при 2400 Бит/сек

Измерение задержки цикла производится, когда на одном модуле замкнуты вывода RX и TX (то есть принятые модулем данные снова отправляются), а с помощью второго модуля отправляют и принимают данные.

 

Описание AT команд и настройка параметров модуля HC-12

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

Второй режим (командный) предназначен для настройки параметров и управления функциями модуля.  Переключение в этот режим осуществляется установкой низкого логического уровня на входе SET. Имеется два способа входа в командный режим:

  1. Установка низкого логического уровня на входе SET, во время нормальной работы модуля (питание все время присутствует).
  2. Установка низкого логического уровня на входе SET (подключение к шине GND), перед подачей питания на модуль.

Любой из этих способов приведет к переключению модуля в командный режим, отличие второго способа в том, что модуль примет фиксированные настройки порта UART, а именно: скорость 9600 Бит/сек, 8 бит данных, без проверки четности, 1 стоп-бит (8N1). Таким образом, этот способ удобен, когда настройки порта UART неизвестны.

При входе в командный режим (после установки низкого уровня на входе SET) необходимо выдержать паузу не менее 40 мс, перед тем как передавать команды на модуль.  После изменения параметров модуля, новые настройки вступят в силу после выхода из командного режима. Для выхода из командного режима и переключения в режим передачи данных, необходимо установить высокий логический уровень на входе SET, после чего выдержать паузу не менее 80 мс, необходимую для применения новых настроек и переключения режимов.

Вывод SET подтянут к высокому логическому уровню внутри модуля, для управления требуется выход с открытым коллектором.

В командном режиме модуль HC-12 поддерживает стандартные AT команды, любая команда начинается с символов AT, в конце команды должен присутствовать символ возврата каретки <CR> (шестнадцатеричное значение 0x0D, в языках программирования “\r”). Ответное сообщение модуля отличается от стандарта AT команд, ответ непосредственно начинается с сообщения и заканчивается символами <CR> и <LF>, в то время в стандарте, ответное сообщение начинается и заканчивается символами <CR><LF>, где <LF> – символ перевода строки, шестнадцатеричное значение 0x0A, в языках программирования “\n”. С помощью USB-UART преобразователя модуль можно подключить к компьютеру и установить соединение, например, с помощью терминальной программы Terminal 1.9b.

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

ОписаниеТестовая команда
ФорматAT
ОтветОК

 

ОписаниеКоманда установки скорости порта UART
ФорматAT+B<скорость передачи>
Параметр<скорость передачи>: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 Бит/сек
Пример командыAT+B4800
ОтветOK+B4800Скорость порта UART равна 4800 Бит/сек
ПримечаниеПо умолчанию скорость равна 9600 Бит/сек

 

ОписаниеКоманда установки номера канала
ФорматAT+С<номер канала>
Параметр<номер канала>: 001…127
Пример командыAT+C001
ОтветOK+C001Номер канала равен 001
ПримечаниеПо умолчанию номер канала равен 001, рабочая частота 433,4 МГц
Каналу под номером 100, соответствует частота 473,0 МГц, шаг канала 400 кГц
Не рекомендуется устанавливать канал с номером более 100

 

ОписаниеКоманда установки режима передачи данных
ФорматAT+FU<номер>
Параметр<номер>: 1…4
Пример командыAT+FU2
ОтветOK+FU2Установлен режим передачи данных FU2
OK+FU2,B4800Установлен режим FU2, автоматическая установка скорости 4800 Бит/сек (только после выхода из командного режима), при условии, что команда передана на скорости более 4800 Бит/сек.
Пример командыAT+FU4
ОтветOK+FU4Установлен режим передачи данных FU4
OK+FU4,B1200Установлен режим FU4, автоматическая установка скорости 1200 Бит/сек (только после выхода из командного режима), при условии, что команда передана на скорости более 1200 Бит/сек.

 

ОписаниеКоманда установки мощности передатчика
ФорматAT+P<значение>
Параметр<значение>:
1=-1 дБм (0,8 мВт)
2=+2 дБм, (1,6 мВт)
3=+5 дБм (3,2 мВт)
4=+8 дБм, (6,3 мВт)
5=+11 дБм, (12 мВт)
6=+14 дБм, (25 мВт)
7=+17 дБм, (50 мВт)
8=+20 дБм (100 мВт)
Пример командыAT+P6
ОтветOK+P6Мощность передатчика равна 14 дБм
ПримечаниеПо умолчанию мощность передатчика равна +20 дБм
Падение мощности на 6…10 дБм, пропорционально уменьшению дальности связи в 2 раза

 

ОписаниеКоманда запроса значения параметра
ФорматAT+R<параметр>
Параметр<параметр>: B–скорость порта UART, C–номер канала, F–режим передачи данных, P–мощность передатчика
Пример командыAT+RF
ОтветOK+FU3Текущий режим передачи данных равен FU3

 

ОписаниеКоманда запроса всех параметров
ФорматAT+RX
ОтветOK+B9600
OK+RC001
OK+RP:+20dBm
OK+FU3
скорость порта UART 9600 Бит/сек
номер канала 001
мощность передатчика +20 дБм
режим передачи данных FU3

 

ОписаниеКоманда установки параметров порта UART
ФорматAT+U<параметр1><параметр2><параметр3>
Параметр<параметр1>: 8 – 8 бит данных, 9 – 9 бит данных
<параметр2>: N – без бита четности, E – с битом проверки на четность, O – с битом проверки на нечетность
<параметр3>: 1 – 1 стоп бит, 2 – 2 стоп бита, 3 – 1,5 стоп бита
Пример командыAT+U8O1
ОтветOK+U8O18 бит данных, бит проверки на нечетность, один стоповый бит

 

ОписаниеКоманда проверки версии программного обеспечения модуля
ФорматAT+V
ОтветHC-12_V2.3Версия 2.3

 

ОписаниеКоманда перехода в спящий режим
ФорматAT+SLEEP
ОтветOK+SLEEPСпящий режим активирован
ПримечаниеПосле передачи команды, необходимо выйти из командного режима, после чего модуль перейдет в спящий режим, ток потребления составляет 22 мкА. В спящем режиме модуль не реагирует на данные передаваемые по UART.

Для выхода из спящего режима, необходимо заново войти в командный режим.

 

ОписаниеКоманда возврата к заводским настройкам
ФорматAT+DEFAULT
ОтветOK+DEFAULTзаводские настройки восстановлены
ПримечаниеЗаводские настройки: скорость порта UART 9600 Бит/сек, номер канала 001, режим передачи данных FU3, мощность передатчика +20 дБм

Все настройки модуля сохраняются в энергонезависимой памяти, и не сбиваются при отключении питания.

 

Подключение модуля HC-12 к микроконтроллеру

Для тестирования я использовал микроконтроллеры PIC16F628A, из-за наличия аппаратного USART модуля, что упрощает подключение радиомодулей HC-12. Схема подключения представлена ниже:
HC-12 схема подключения
В схеме передатчика с помощью двух кнопок (SB1, SB2) можно управлять двумя каналами на приемнике, к которым подключены светодиоды HL3 (1 канал) и HL2 (2 канал). Я реализовал обратную связь между передатчиком и приемником, при получении команды включения/выключения приемник активирует соответствующий канал и передает сигнал подтверждения, передатчик принимает сигнал и включает двухцветный светодиод HL2, зеленый цвет – канал включен, красный – выключен. Таким образом, модули HC-12 построенные на трансивере Si4463 предоставляют возможность контроля состояния каналов при отсутствии прямого обзора.

В программы микроконтроллеров заложены функции настройки и автоматического соединения с радиомодулями по UART интерфейсу, то есть сначала микроконтроллер перебирает значения скорости порта UART в пределах 1200-19200 кБит/сек, пока не получит правильный ответ от модуля. Если скорость порта радиомодуля выше 19200 кБит/сек, то микроконтроллер не сможет установить соединение, так как USART модуль микроконтроллера не поддерживает высокие скорости при тактовой частоте 4 МГц.

После определения скорости выполняется настройка параметров модуля. Настройки зависят от выбранного режима передачи данных, который необходимо предварительно запрограммировать в EEPROM микроконтроллера. В ячейку EEPROM с адресом 0x00 необходимо записать число от 1 до 4, что соответствует режимам FU1-FU4, если в ячейку ничего не записано, по умолчанию будет выбран режим FU3.

Настройки режимов в основном отличаются скоростью порта UART, но два параметра одинаковы и задаются для всех режимов, это номер канала – 001, и мощность передатчика +20 дБм. Для режима FU3 задается скорость 2400 кБит/сек, чтобы обеспечить наибольшую дальность связи. Для режима FU4 доступна лишь одна скорость: 1200 кБит/сек, для остальных режимов 4800 кБит/сек.

Микроконтроллер записывает настройки в модуль HC-12 при включении (после подачи питания), успешная настройка подтверждается однократным миганием светодиода HL1 в течение одной секунды, данное оповещение имеется у обоих устройств (передатчик/приемник). Если в процессе настройки произошла ошибка, либо нет соединения с модулем, то светодиод HL1 начнет непрерывно мигать, и на этом программа зациклится.

В целях энергосбережения микроконтроллер в передатчике переходит в спящий режим, если в течение определенного времени не будут нажаты кнопки SB1, SB2. Для режимов FU1, FU3 время ожидания для перехода в “сон” составляет 1,5 секунды, для FU2 – 3 секунды, FU4 – 5 секунд. Перед уходом в “сон” все светодиоды гаснут, радиомодуль переводится в спящий режим, общий ток потребления устройства снижается до 26 мкА. В микроконтроллере включены прерывания по изменению уровня на входах RB4-RB7, к которым подключены кнопки, незадействованная линия RB7 настроена на выход с низким логическим уровнем, в целях устранения ложного “пробуждения” микроконтроллера, так как индивидуальная настройка прерываний для каждой линии отсутствует.

В схеме приемника переключателями SA1, SA2 можно задать режим работы соответствующего канала. В разомкнутом состоянии действует режим чередования, то есть, каждое нажатие кнопки на передатчике вызывает поочередное включение/выключение канала. Замкнутое состояние переключателей активирует режим повторения, канал включен, пока нажата кнопка на передатчике.

Примечание из даташита: если модуль продолжительное время работает в режиме передатчика при напряжении питания более 4,5В, то в разрыв цепи питания необходимо установить диод, в целях снижения перегрузки стабилизатора напряжения на плате модуля.

Программы передатчика и приемника (неполный код) представлены ниже:

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

Как я и говорил, в микроконтроллере задействован аппаратный USART, прием данных от радиомодуля ведется в подпрограмме обработки прерываний, полученные данные сохраняются в регистры ОЗУ (начиная с регистра data_rx) с помощью косвенной аддресации. В командном режиме (когда на линии микроконтроллера set_hc12 низкий лог. уровень) данные по UART принимаются до получения символа <LF> (0x0A), который является завершающим в сообщении. Далее устанавливается флаг получения ответа от модуля flag,0. Сообщение анализируется с помощью подпрограммы sravn_otv, где происходит сравнение с правильными ответами, которые хранятся в таблице данных tab1.

В прозрачном режиме (когда линия set_hc12 настроена на вход) по UART ведется прием данных, полученных по радиоканалу от другого модуля. Длину пакета данных, которыми обмениваются радиомодули, я установил на уровне 3-х байт (в счетчик tmp_byte записывается число 3), причем первый байт синхронизирующий, его значение всегда равно 64 (ASCII вариант @).  Только после приема синхронизирующего байта, разрешается прием остальных двух байт, это сделано на случай потери синхронизации, например, если один или несколько байтов в пакете данных будут утеряны. После приема правильного пакета данных, устанавливается ранее упомянутый флаг flag,0.

AT команды передаются с помощью подпрограммы message, команды хранятся в таблице данных tab. Перед вызовом подпрограммы, в аккумулятор (W) надо записать число: порядковый номер первого символа соответствующей команды в таблице данных, то же самое справедливо и для подпрограммы сравнения ответов sravn_otv.

Подпрограмма настройки режимов zap_regim выполняет автоматическое соединение с радиомодулем, путем перебора скорости UART микроконтроллера в пределах 1200-19200 Бит/сек, при этом проверяется правильный ответ от модуля (OK) на команду AT, после чего определяется режим передачи данных, считанный ранее из EEPROM (ячейка 0x00) в регистр regim. Далее в соответствии с режимом выполняется настройка параметров радиомодуля.

Большинство временных задержек организованы на основе таймера TMR1, в частности кнопки SB1, SB2 опрашиваются не ранее 250 мс с момента последнего нажатия. В программе приемника дополнительно используется таймер TMR0, для организации задержки включенного состояния выходного канала в режиме повторения (канал включен, пока нажата кнопка на передатчике), задержка составляет 300 мс.

Настало время тестирования, и я провел измерение дальности связи модулей HC-12 в условиях городской застройки для различных режимов и условий, результаты объединил в следующую таблицу:

Внешние условия, тип антенныРежим передачи данных
FU1FU2FU3FU4
Прямая видимость, штыревая антенна

150 м (450 м)

150 м (400 м)600 м (1 км)1 км *
Прямая видимость, спиральная антенна100м (250 м)100м (200 м)400 м (550 м)
Непрямая видимость (среди многоэтажек), штыревая антенна~200 м~500 м
* ПримечаниеНа расстоянии более 1 км измерения не проводились

Таблица содержит данные по дальности уверенной связи, а в скобках указано максимальное расстояние, на котором удалось поймать сигнал обратной связи (зона слабого и неуверенного приема). В качестве штыревой антенны использовался медный одножильный проводник длиной 17 см.

Режим FU4 отличается значительной задержкой передачи данных, около 1 сек, то есть для получения ответа от приемника после отправки команды потребуется не менее 2 сек, кроме этого не рекомендуется отправлять пакет данных чаще, чем один раз в 2 сек. Данные особенности не позволяют использовать режим повторения (канал включен пока нажата кнопка на передатчике) для каналов на приемнике, только режим чередования. То же самое относится к режиму FU2 (режим сверхнизкого потребления), где задержка передачи данных составляет 0,5 сек. У меня не было возможности протестировать модули на расстоянии более 1 км, мешала городская застройка, не было прямой видимости, поэтому пока не могу судить о максимальной дальности связи (для режима FU4 заявленная дальность составляет 1,8 км).

В режиме FU2 я заметил особенность, при снижении скорости UART модуля до 1200-2400 Бит/сек, сигнал обратной связи от приемника начинал пропадать, и не достигал передатчика (независимо от расстояния), хотя команда до приемника доходила. На скорости 4800 Бит/сек таких проблем не возникало.

В устройствах (передатчик/приемник) микроконтроллеры работают от внутреннего тактового генератора в 4 МГц, при больших перепадах температуры окружающего воздуха лучше использовать внешний кварцевый резонатор, так как возможен уход рабочей частоты и нарушение функционирования UART интерфейса между модулем и микроконтроллером.

В общем радиомодули HC-12 показали себя очень хорошо, обладают широко распространенным интерфейсом связи UART, достаточно простые настройки, большая дальность связи, возможность реализации обратной связи. До этого я тестировал радиомодули WL101-341 WL102-341, а также комплект XY-MK-5V FS1000A, это простые менее навороченные модули, и значительно дешевле по стоимости.

Заказать модули можно по следующей ссылке HC-12
HC-12 внешний вид
Прошивка МК и исходник передатчика и приемника

По ссылке ниже представлена модифицированная прошивка, изменена скорость передачи данных для режима FU3 на 4800 Бит/сек.
Модифицированная версия прошивки

Обновление от 24.02.18:
Частота внутреннего генератора микроконтроллера зависит от напряжения питания и температуры окружающей среды, поэтому возможен уход частоты и некорректная работа UART модуля микроконтроллера. Поэтому для большей надежности к микроконтроллеру в передатчике и приемнике можно дополнительно подключить кварцевый резонатор на 4 МГц, схема подключения представлена ниже:
Схема подключения кварцевого резонатора

Ниже приведены ссылки на прошивки под кварцевый резонатор:
Прошивка передатчика и приемника под кварцевый резонатор 4МГц

Модифицированная версия под кварцевый резонатор, изменена скорость передачи данных для режима FU3 4800 Бит/сек.
Модифицированная версия под кварцевый резонатор 4МГц

У этой записи 54 комментариев

  1. Круто!!!
    Мои HC-12 уже три недели едут с Али.Подпрыгиваю от нетерпения.
    Буду пробовать.UART по проводу я делал.
    Работает без ошибок.

    1. И как бы увеличить скорость передачи данных.
      Читай-уменьшить время передачи до минимума?
      Пусть в ущерб дальности.

      1. Максимальная скорость передачи данных обеспечивается в режиме FU3, при скорости порта UART от 57600 Бит/сек, исходя из таблиц в спецификации минимальное время передачи 4 мс, быстрее никак)

  2. Решаю тему работы пяти трансиверов,объединеных в сеть.
    Каждый должен общаться с каждым.Может возникнуть ситуация одновременного включения передатчиков.Но расхронизация может в 0.01 секунды.Никак не могу обойти коллизию.
    Может что посоветуете?

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

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

      1. здравствуйте.
        как синхронизировать часы на разных девайсах ?
        тоже ситуация когда может быть несколько трансов и все должны общаться.

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

  3. У вас ошибочка в таблице чувствительности в первой колонке. Вместо 5000 должно быть 500.

  4. У меня версия прошивки 2.4. На скоростях выше 2400 в FU3 работает нормально (ожидаемо). А вот на 1200 и 2400 вообще не работает. Менял каналы, устанавливал мощность передачи пониже – не связываются. Только подниму скорость на 4800 – коннект моментальный. Так и не понял причину нестыковки.
    По поводу взаимодействия нескольких трансиверов.
    Дело в том, что 4463 это пакетный полудуплексный трансивер. То есть пока он не примет весь пакет, он не выставит сигнал наличия данных в приемном буфере. Соответственно, только сканируя наличие входящих данных, невозможно узнать наличие передачи в данный момент с другого модуля. Поэтому, кмк, единственным решением разграничения времени передачи разными трансиверами будет передача только в своем тайм-слоте и коррекция таймслота по предыдущим передачам других модулей.
    Поясню. Пускай ширина таймслота 10мс. Каждому трансиверу назначаем номер и в пакете передаем номера источника и получателя. Все стоят на приеме. Как только получен пакет, смотрим на отправителя. Допустим, мы номер 5. А пакет пришел от номера 2. Значит мы еще ждем (5-2-1) = 2*10 = 20мс (то есть пока передадут 3 и 4 модули). А если принят пакет от 4 модуля, то осталось ждать (5-4-1) = 0мс, то есть уже надо передавать. Таким образом, вся сеть постоянно подстраивается под таймслот и выпадение одного из трансиверов не остановит передачу другим, просто будет пропущен один таймслот вхолостую.

    1. У меня модули версии 2.3, режим FU3 на скорости 2400 Бит/сек функционирует нормально, пока ничего не могу сказать по вашей проблеме, если попадутся модули версии 2.4 обязательно проверю.

      Вы описали интересный способ передачи данных в сети из нескольких трансиверов, возьму на заметку.

      1. Вам повезло больше 😉 А проверяли на столе рядышком? Я в терминалке все смотрел и модули рядом на столе. Попробую еще разнести их подальше, может оглушают друг друга.

        1. Да на близком расстоянии около 15-20 см, и вплоть до 1 км. Я в терминале не смотрел, у меня собраны передатчик и приемник описанные в этой статье.

    2. Иными словами-пока все не примет передача невозможна?
      То есть на очереди передачи он на втором месте.
      И на оборот.

  5. Афигеть!!!!
    Получил наконец свои модули.
    Прописал UART на передатчик и на приемник на разных макетках.
    И оно все заработало.
    Брал с потолка разные цифры (123,112,42 и т.д.) и посылал передатчиком.
    Контролировал индикатором TIC55.
    И оно все принимает.Без ошибок.Никаких танцев с бубном.Даже скушно.
    Будем развивать тему дальше.
    И это после почти двух-трех безрезультатных месяцев стражений с NRF24L01.

    1. Отлично! Все верно здесь ничего сложного нет, модули просты в подключении. А NRF24L01 там целые дебри в даташите, замучаешься все изучать, поэтому у меня даже желания не возникло возиться с ними.

      1. И все же.
        Спасибо вам Руслан.
        Хоть пинаете в нужную сторону.
        А то ведь часто не знаешь где взять и с чего начать.
        А тут посмотришь что люди делают и …….

        1. Руслан.
          Признаться я новичок по работе с АТ командами.
          Не могли бы вы написать подробную статью по этому поводу?
          Что то ничего не могу найти в интернете.
          Очень хочется пообщаться с HC-12.
          Да и вообще восполнить этот пробел.

          1. А что конкретно в командах вам не понятно? Все команды для модулей я привел в этой статье. И основное отличие от стандарта AT команд тоже указал.

            1. AT+SLEEP так нужно отправлять?
              Последовательно по буквам?
              A .129 B’10000001′ 0X81
              T .148 B’10010100′ 0X94
              + .107 B’01101011′ 0X6B
              S .147 B’10010011′ 0X93
              L .140 B’10001100′ 0X8C
              E .133 B’10000101′ 0X85
              E .133 B’10000101′ 0X85
              P .144 B’10010000′ 0X90

              1. Все я напутал.
                Но въехал все же…

  6. Я заказал E30-ttl10 – при питании 3.3В и дефолтных настройках дальность составила в прямой видимости около 500 метров(антенна кручёная спиралька)! После установки на сервер антенны – прямой штырь и питании 5В – дальность стала около 700 метров! Если скорость радиоканала не поднимать – работает изюмительно!(проверял на максимальной скорости – дальность падает почти в два раза)
    По потреблению – в режиме сна – вообще мкамперы, передача 6 байт- по времени около 30млсек – дальше опять спать!
    Почему я с ними начал работать – из 5 NRF24l01 – только одна дала заявленный ток в спящем режиме – а так до 6 млА доходила! При батарейном питании – это смерти подобно!

    1. Серию E30 китайцы сделали на много правильнее, чем НС-12. У НС-12 основная проблема в том, что скорость в эфире зависит от скорости порта. При односторонней связи это еще катит, но когда обмен типа “запрос-ответ”, то теряем слишком много времени. К примеру, работаем на низкой скорости и один пакет передается 10мс. Значит тратим 10мс на закачку в НС-12, затем он передает до 10мс (от чего зависит не знаю, то он сразу передает, то ждет наполнения буфера), и опять 10мс на выкачку приемником из буфера. Если должна быть ответка, то опять 10 мс закачка, эфир и 10мс выкачка. А вот E30 позволяет закачку-выкачку делать на максимальной скорости, то есть в нашем случае только на эфир тратим 10+10, а на обмен в разы меньше. Ди а вариантов скорости в эфире у E30 больше, что позволяет балансировать дальность-скорость. Жаль, цена больше, хотя внутри там тот же трансивер и мелкий дешевый МК.

    2. По поводу NRF24l01. У меня уже больше двух лет работают три разных устройства на батарейном питании.
      Самое прожорливое при питании од двух батареек АА в режиме сна “кушают” около 2,3мкА (ATMega168P, nRF24L01+, BMP085, SHT10). Батарейки за два года разрядились 3,25V до 3,07V, так как на протяжении всей работы, проводились эксперименты по продолжительности времени между пробуждениями МК.

      1. Здравствуйте, Виктор! Подскажите где взять рабочий вариант схемы с NRF24L01 с прошивками? Какие вы делали.

        1. Здравствуйте, Олег! Не знаю, смогу ли вам помочь. Я писал тогда на AlgorithmBuilder под свои проекты.

  7. собрал приемник и передатчик по вашей схеме проверил установки hc-12 с помощью терминал
    при включении все как описано, светодиоды включаются на секунду при загрузке,но передачи нет,ток передатчика при нажатии кнопок 18 миллиампер, перепрошил ,перепроверил правильность монтажа, hc-12 проверял в режиме U3. пару раз включались светодиоды на приемнике когда я передатчик держал в руке.Питание от сетевых источников +5в.

    1. Если светодиод загорается на 1 сек, значит микроконтроллер соединяется с модулем и прописывает в него настройки. Возможно передатчик и приемник настраиваются на разные режимы, надо выставлять одинаковые режимы и на передатчике и на приемнике, то есть в EEPROM микроконтроллера записывать одинаковые цифры для обоих микроконтроллеров.

      Попробуйте стереть EEPROM и ничего туда не записывать, в этом случае по умолчанию должен установиться режим FU3.

      Попробуйте запитать передатчик и приемник от аккумуляторов либо батареек, отдельно для передатчика и приемника.

      Может дело в антеннах, используйте для начала одножильный провод длиной 17 см.

  8. OK+B9600[.][.]OK+RC001[.][.]OK+RP:+20dBm[.][.]OK+FU3[.][.]
    это это я записываю в hc-12 ,выпаиваю и проверяю hc-12, вместо B9600 записано B2400
    может это записывает микроконтроллер.

    1. Да, это записывает микроконтроллер (скорость 2400 кБит/сек для режима FU3), вы статью читали? Я специально написал такой код чтобы микроконтроллер все сам настраивал.

  9. да спасибо ,я все читал.Версия hc-12_v2.4 ,будем работать над проблемой

  10. Если несколько HC-12 настроенs на один канал, при передаче с одного принимать будут все? То есть устанавливается ли связь устройство-устройство или все видят всех? Хочу сделать беcпроводное подобие RS-485.

  11. здравствуйте,проверял команды AT на модуле HC-12 , не проходит команда AT+U801 отвечает ошибка ,с другими командами все ok. может нужно перепрошить HC-12
    верси_v2.4

    1. В команде AT+U801, после цифры 8 должна быть буква, а не число, например N – без бита четности, E – с битом проверки на четность, O – с битом проверки на нечетность, вы случаем цифру не поставили вместо буквы?

      И хотел узнать, у вас заработали прошивки приемника и передатчика? В комментариях пользователь sslobodyan писал что у него модули не связывались в режиме FU3 на скорости 2400 Бит/сек, версия его модулей была также 2.4, по его словам связь устанавливалась только на скорости 4800 Бит/сек и выше, может у вас такая же проблема? Просто у меня нет модулей с версией 2.4, есть только 2.3, и проверить я не могу пока.

      Может мне стоит подредактировать прошивки и поднять скорость для режима FU3 до 4800 Бит/сек (на данный момент в прошивках скорость для FU3 2400 Бит/сек).

  12. спасибо за внимание. пока запустить не удалось , точно команду записал неправильно .
    если у вас есть возможность подредактировать прошивки было хорошо. очень нужен ваш проект.

    1. Я модифицировал прошивку, скачать можно в конце статьи, пробуйте.

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

  14. проверял на дальность,работает не далее семи -восьми метров.Дальше явно теряется раборчивость приема .Ток потребления во время передачи 16ma.Подключал разные антенны. Не понравилось управления включение -выключение,при одном нажатии может два -три раза включится и выключится управление, а с дальностью не понятно ,явно не выходит на штатную мощность .

    1. Возможно уходит частота внутреннего генератора микроконтроллера, и от этого невысокая дальность связи (срывается синхронизация UART модуля), подключите кварцевый резонатор на 4 МГц к микроконтроллерам в передатчике и приемнике, и прошейте новыми прошивками под кварц, я все описал в конце статьи.

      При кратковременном нажатии кнопки передатчика, выход приемника не может включится выключится много раз, может вы что-то путаете? именно на выходе приемника срабатывает много раз?

      В программе стоит пауза как минимум 0,25 сек на опрос кнопок в передатчике, так что при кратковременном нажатии (которое длиться примерно 0,1 сек) выход приемника не успеет много раз переключится, если кнопку удерживать то выход приемника будет постоянно переключаться минимум каждые 0,25 сек.

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

      Когда снова нажимаем кнопку на передатчике, выходной канал на приемнике отключается, сигнал обратной связи поступает на передатчик, где включается красный светодиод, который оповещает о том, что один из каналов на приемнике отключился. Далее если кнопки не будут нажаты, передатчик переходит в спящий режим и отключает светодиод. Красный и зеленый это сигнал обратной связи, зеленый – означает что включился один каналов на приемнике, при этом не важно какой из 2-х каналов, красный означает что один из каналов выключился. Надеюсь понятней стало.

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

  16. прошивка с внешним генератором не пошла совсем , загружается, но связи нет.
    Вторая с внешним генератором FU3-4800_xt4Mxz работает один канал. Кнопка передачи на 10 контакт при включении срабатывает примерно через 1 сек не останавливаясь. Видимо прблемы с hc_12.Дальность связи примерно метров 7.с уважением CC.

    1. Даже не знаю в чем еще может быть проблема, возможно модули неисправны. Чтобы выяснить надо модули подключить к двум разным компьютерам через USB-COM преобразователи, и просто вручную с одного компьютера послать данные на второй компьютер.

      А режим не пробовали менять? при программировании микроконтроллера в ячейку EEPROM с адресом 0x00 необходимо записать число от 1 до 4, что соответствует режимам FU1-FU4, по умолчанию если ничего не записано включается режим FU3. Попробуйте режим FU1, он почти идентичен режиму FU3, только дальность связи до 100м, и потребление меньше в 4 раза.

      Может быть у вас при программировании микроконтроллеров в EEPROM записываются разные данные? посмотрите какие данные записывается в EEPROM при программировании.

      1. У меня сейчас абсолютно такая же проблема, только с ардуинами. Передаю байтики от одной к другой. Дальность передачи в районе 6 метров, при том уже на расстоянии 5 метров рука становится преградой сигналу. Тоже думаю в чем может быть дело

        1. Читайте сообщение admin выше.
          Проверьте все терминалом.

  17. при программировании в EEPROM ничего не записывается , с миганием канала мой косяк, замкнула дорожка.

  18. Подскажите, есть подобный модуль с возможностью выставления нестандартных скоростей? Например скорость 31 250 бит/сек.

  19. Здравствуйте !
    в описании модуля указано что при подаче лог. “0” на вход SET HC-12 он переходит в режим с фиксированными параметрами связи – 9600,8n1, на самом деле если Вы заранее изменили параметры скорости или четности командами АТ , то связаться с фиксированными параметрами не удаться.При изучении листинга программы при вызове функции kont_hc12, начиная со скорости 9600 Вы пытайтесь получить ответ от модуля, при отсутствии ответа начинайте перебирать скорости.Вот это непонятно для чего это сделано или производитель HC-12 просто обманывает о фиксированной скорости ?

    1. Приветствую, в коде просто идет перебор скорости, позволяющий автоматически установить связь с модулем HC-12, без предварительной настройки. То есть, если скорость порта модуля HC-12 находится в пределах 1200-19200 Бит/сек, то микроконтроллер подберет скорость автоматически.

      Функция модуля с фиксированными настройками здесь в коде не используется. Чтобы использовать эту функцию, нужно установить лог.0 на входе SET модуля до ПОДАЧИ ПИТАНИЯ! Чтобы это реализовать микроконтроллер должен еще дополнительно управлять питанием модуля.

      1. Здраствуйте) Скажите, возможно ли создать модель HC-12 для работы в протиус и могли бы вы это сделать?

  20. Здравствуйте! Появилась необходимость использовать модули для считывания водянных счетчиков (через сухой контакт) в режиме переключателей, FU2 для экономии энергии. Есть ли модифицированные прошивки с уникальным идентификатором модуля, и возможно ли это сделать, например, указав свой номер через AT комманду, и чтобы к каждой строке приписывался идентификатор модуля?? чтобы можно было бы их отличать на приемнике? спасибо

  21. Здраствуйте! Использую hc12 для получения технической информации до 1200 м со скважин. В жару летят модули. Думаю уходит частота. Не могу разобраться как залить прошивку на 4мГц кварц. Если есть возможность, напишите, как залить прошивку через USBASP или иным способом, какая нужна программа для заливки, как расключить ноги.

  22. кто нибудь работал с этим модулем только транс si4438? какие отличия?

  23. олег
    Уважаемый admin, у модулей из разных партий часта кварца 30 Мгц не всегда равна 30 , а имеет разброс + -, а так как si умножает частоту раз в 14 происходит сдвиг рабочей частоты канала да 20 Кгц. Ширина канала всего 15 Кгц, соответственно резко подает дальность связи или полная потеря связи.
    Вопрос: может ВЫ встречали возможность корректировки с помощью АТ команд, регистра si отвечающего за умножитель частоты. Или возможно есть альтернативные прошивки STMки с такой возможностью.

Имя (обязательно)Email (обязательно)Веб-сайт

Добавить комментарий