Олег Наумов (Все сообщения пользователя)

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
MBee API - установка масок каналов
 
Цитата

3. К сожалению, избавиться от нулей в пакете с помощью битов в текущей версии нельзя, поскольку они вводятся на этапе компиляции.

Это жаль... Ну что ж, пока придется оставить их как есть. Сейчас нет смысла только из-за этого вносить изменения в стандартную прошивку.
А так основные вопросы с настройками решены.
Большое спасибо за ответы!
MBee API - установка масок каналов
 
Попробовал записать в модуль MBee настройки портов ввода-вывода по кластеру 0403, а потом читать их по 0203 и дальше смотреть состояние портов по кластеру 0103.
Цифровые входы и выходы настраиваются. Правда, в поле данных, которое получается по команде 0103, цифровые каналы в любом случае будут занимать 2 байта, так что здесь настройками ничего не выиграешь. Получилось "убрать" один из аналоговых каналов в ответе модуля на команду 0103 (второй аналоговый мне нужен, его оставил).
А вот 8 нулевых байтов от счетных входов в ответе модуля по 0103 убрать так и не получилось (я в основном с этой целью начал данную тему). В байтах 39,40 и 49,50 (см. сообщение от 12.02.2019 15:14:43) обнулял старший бит (т.е. чтобы линия была не задействована), обнулял эти байты полностью - никакого эффекта. Может, я что-то еще не сделал? Как, не меняя прошивку, а только оперируя с битами, передаваемыми модулю по 0403, убрать вывод нулевых байтов от счетных входов?
MBee API - установка масок каналов
 
Цитата

1. Выбирается незанятая пользовательская линия из массива UserBinaryIoControl. Для нее настраиваются привязки к конкретному порту и номеру бита CC2530.

"Незанятая" - это в смысле одна из SysmcUserBinaryIoControl, которые идут после COUNT2? (см. пост от 12.02.2019 15:14:43) Но, во-первых, мне это не нужно (наоборот, я хотел сократить количество передаваемых данных), во-вторых, все порты I/O СС2530 уже распределены, так что новую линию можно будет получить, только если "переписать" ее по адресу какой-то старой.
Цитата

2. Для данной линии порта настраиваются регистры P0OUT, P1OUT, P2OUT, P0DIR, P1DIR, P2DIR, в зависимости от выбранной линии.


PxDIR находил в вашем коде, PxOUT - нет. Или это имеется в виду здесь:
#define P0_OUTPUTS 0x32
и т.д.?
Цитата

4. Управление выбранной линий осуществляется с помощью кластеров BINARY_OUT_ONx и BINARY_OUT_OFFx
BINARY_OUT тоже не находил ни в вашей документации, ни в уже выложенном здесь коде...
MBee API - установка масок каналов
 
Спасибо за ответы!

В первом приближении разобрался (насколько хорошо, покажет практика...)
Теперь давайте перейдем к настройке портов ввода-вывода, по кластеру 0403. Какой у него формат?
MBee API - установка масок каналов
 
(разбил сообщение на два, т.к. получается много текста)
Здесь в основном разобрался. Что осталось неясного:
1) значение SysmcSleepStatusControl (байт 35) равно 0хЕ4, а в дефайне 0хА4 - так и должно быть? (т.е. бит 7 включен, на плате светодиод выхода D01 горит все время)
2) SystemLed - в байте 36 значение 0хЕ1, в байте 42 - 0хА1, тоже вопрос - так и надо? (по факту светодиод на плате не горит, т.е. бит 7 сброшен в 0)
3) просто для ясности - в байт 41, который здесь пустой, пишется SLEEP REQUEST, если модуль будет прошит как конечное устройство?
4) "хвост" поля данных, байты с 51 по 57 - они для чего-то нужны, или там просто мусор?

Кстати, опрос модуля-координатора дает практически такой же фрейм, байты 53-57 отличаются, а все остальное то же.
Если эти моменты прояснятся, то можно будет переходить к записи настроек по 0403...
MBee API - установка масок каналов
 
Добрый день!
Сделал анализ сообщений от модулей, приходящих в ответ на команду 2401 с кластером 0203. Ориентируясь на те структуры, которые вы выложили здесь.
Ниже - ответ от модуля, установленного на плате MB-Tag и прошитого как роутер (из всего фрейма показано только поле данных):
01 05 01 00 34 00 32 08 01 C0 00 00 00 00 00 00 FC FB 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C0 80 A5 E4 E1 80 8E 82 83 00 A1 80 8F A4 A5 8E B0 82 83 00 00 00 00 30 00 FF
Здесь 58 байт (нумерацию сделал от 0 до 57), что совпадает с
37 + KEYS_MAX_COUNT + MAX_USER_BINARY_IO = 37 + 5 + 16 = 58. Хорошо.
Первые 32 байта - регистры СС2530. Далее идут настройки (в строках по порядку: номер байта, HEX-код, бинарный код, что означает):
32 C0 1100 0000 SysmcAdcMAsk
33 80 1000 0000 HalAdcGetReference
34 A5 1010 0101 SysmcSensorPowerControl D02
35 E4 1110 0100 SysmcSleepStatusControl D01 (not A4!)
36 E1 1110 0001 SysmcSystemLedControl // A1 or E1 ?
37 80 1000 0000 SysmcButtonControl[0] SYSTEM BUTTON
38 8E 1000 1110 SysmcButtonControl[1] DI1
39 82 1000 0010 SysmcButtonControl[2] COUNT1
40 83 1000 0011 SysmcButtonControl[3] COUNT2
41 00 0000 0000 SysmcButtonControl[4]
42 A1 1010 0001 SysmcUserBinaryIoControl[0] SYSTEM LED
43 80 1000 0000 SysmcUserBinaryIoControl[1] SYSTEM BUTTON
44 8F 1000 1111 SysmcUserBinaryIoControl[2] DI2
45 A4 1010 0100 SysmcUserBinaryIoControl[3] D01
46 A5 1010 0101 SysmcUserBinaryIoControl[4] D02
47 8E 1000 1110 SysmcUserBinaryIoControl[5] DI1
48 B0 1011 0000 SysmcUserBinaryIoControl[6] D03
49 82 1000 0010 SysmcUserBinaryIoControl[7] COUNT1
50 83 1000 0011 SysmcUserBinaryIoControl[8] COUNT2
51 00 0000 0000 SysmcUserBinaryIoControl[9]
52 00 0000 0000 SysmcUserBinaryIoControl[10]
53 00 0000 0010 SysmcUserBinaryIoControl[11]
54 00 1101 0111 SysmcUserBinaryIoControl[12]
55 30 0000 1101 SysmcUserBinaryIoControl[13]
56 00 0000 0000 SysmcUserBinaryIoControl[14]
57 FF 1001 1101 SysmcUserBinaryIoControl[15]
MBee API - установка масок каналов
 
По тому, что вы выложили, появились вопросы...

1)
Цитата

#define P2_OUTPUTS 0x01 //Выход D03 на плате MB-Tag v2.1

тут имеется в виду 1.1 или 1.2? платы 2.1 я у вас вроде не видел...
(на всякий случай - у меня MB-Tag версии 1.1)
2)
Цитата

#define HAL_ADC_REF_125V 0x00 /* Internal Reference (1.25V-CC2430)(1.15V-CC2530) */

здесь что-то не понял: модули MBee-2.4-2.1 сделаны на СС2530, почему тогда опорное напряжение ставится 1,25 В, а не 1,15 В, как указано в комментарии?
3)
Цитата

Младшие 5 бит определяют номер линии вывода. Р0.0 соответствует номер 0, Р2.2 - номер 18
Бит 5 определяет активный уровень 1 - высокий, 0 - низкий.
Бит 7 включение/выключение вывода. 1 - включен, 0 - выключен.
Бит 8 определяет задействована линия или нет.

Наверно, "Бит 6", если нумеровать с 1 по 8? (хотя с 0 по 7, наверно, было бы удобнее...)
4)
Цитата

#elif (SYSMC_MODULE_ID == MODULE_MBee2_1) || (SYSMC_MODULE_ID == MODULE_MBee3_1)
#define DI1_INPUT_CONTROL_DEFAULT 0x8E //P1.6 вход DI1 на плате MB-Tag v1.1.
#define COUNT1_INPUT_CONTROL_DEFAULT 0x82 //P0.2 вход COUNT1 на плате MB-Tag v1.1.
#define COUNT2_INPUT_CONTROL_DEFAULT 0x83 //P0.3 вход COUNT2 на плате MB-Tag v1.1.
#define SYSMC_SENSOR_POWER_CONTROL_DEFAULT 0xA5//P0.5 выход включения питания внешних устройств.
#define SYSMC_SLEEP_STATUS_CONTROL_DEFAULT 0xA4 //P0.4 выход SLEEP_STATUS.
#define DO3_OUTPUT_CONTROL_DEFAULT 0xB0 //P2.0 на плате MB-Tag v1.1 используется как цифровой выход.
#define SLEEP_REQUEST_INPUT_CONTROL_DEFAULT 0x8F //P1.7 вход SLEEP_REQUEST. Определяется для всех конфигураций. Для Координатора и Маршрутизатора выполняет роль цифрового входа общего назначения.

Здесь тоже одна неясность. Расписал биты в этих дефайнах, самый старший бит (8-ой, если нумеруем с 1-го по 8-й) везде "1", то есть все линии задействованы. С адресами (младшие 5 бит) разобрался, тут все просто. В цифровых выходах (Р0.4, Р0.5, Р2.0) шестой бит установлен в "1", то есть активный уровень - высокий, у всех остальных - низкий. Это тоже понятно. А вот седьмой бит везде нулевой, то есть данные выводы все выключены? Или я что-то путаю?

Просьба пока ответить на эти вопросы, а я проанализирую еще ответ модуля на команду 0203 и сопоставлю это описание с теми байтами, которые мне реально приходят...
MBee API - установка масок каналов
 
Добрый день!

Цитата

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

Я записываю :)
Пока выявил следующее (приведу здесь, т.к. некоторые ошибки/неточности имеют прямое отношение к данной теме).
Файлы документации, которые смотрел:
- «Беспроводная система MB-Zigbee. Техническое описание» (далее «td_mbzigbee.pdf»);
- «Беспроводные модули MBee. Прикладной программный интерфейс MBee API» (далее «sw_api_31.pdf»);
- «Z-Stack Monitor and Test API» SWRA198 v1.4 (далее «Z-Stack MT API»).


1) В файле «td_mbzigbee.pdf», стр. 14-15: код команды AF_DATA_REQUEST – 0х2401, а не 0х2421.
2) Там же, стр. 14: длина поля DATA указана 0х0А-0х5А, в то время как в «sw_api_31.pdf» и «Z-Stack MT API» указано 0х0А-0х8А.
3) В файле «td_mbzigbee.pdf», стр. 17: после длины поля AfData вначале идут не температура с напряжением питания, как в таблице 12, а пять байт Version (номер транспортного протокола, уровень выходной мощности передатчика и пр.), потом Sampling Period, потом идут маски и значения цифровых и аналоговых каналов. И только потом идут напряжение питания и температура, причем напряжение до, а не после температуры. В то же время в «sw_api_31.pdf» (п.9.1) формат поля приведен верно.
4) В файле «sw_api_31.pdf», стр. 13 и далее: ответная команда AF_DATA_CONFIRM написана как имеющая код 4882, тогда как на самом деле у нее код 4480 – это и в документации от TI указано («Z-Stack MT API», с.10), и в реале от модуля приходит фрейм именно с таким Command ID.
5) Команда AF_DATA_RESPONSE: длина поля DATA (LEN) в «td_mbzigbee.pdf» (стр. 16) указана 0х11-0х61, в «sw_api_31.pdf» (стр.14) - 0х12-0х50. Длина поля AfData: в «td_mbzigbee.pdf» (стр.17) указана от 0 до 80 байт, в «sw_api_31.pdf» (стр.14) – от 1 до 63 байт.
6) В файле «sw_api_31.pdf», стр. 22: указано, что значение в 1480 отсчетов соответствует температуре 20 градусов, а в формуле стоит 25 градусов. Так какая должна браться температура?
7) В файле «sw_api_31.pdf», стр. 28: указано, что формула для преобразования отсчетов АЦП в напряжение Vdd для опорного напряжения 3,3 В V=ADC*3.3/2047. В аналогичной формуле в файле «td_mbzigbee.pdf» там стоит 3,45 В (стр. 17). Почему 3,45? Допустим, на плате MB-USBridge в цепи питания стоит стабилизатор, который обеспечивает на выходе 3,3 В – тогда первой формулой можно пользоваться. А если модули стоят, скажем, на плате MB-Tag, где нет стабилизации Vdd? Контролировать напряжение образцовым вольтметром, записывать отсчеты ADC и опытным путем находить нужный коэффициент? Не очень удобно.

Особенно интересуют ответы на п. 6 и 7.

А я пока изучаю то, что выложено в вашем посте...
MBee API - установка масок каналов
 
Да, если бы для модулей MBee была программа с функционалом как у XCTU - было бы шикарно.
Но будем обходиться тем, что есть.
На самом деле анализ приходящих фреймов и формирование нужного фрейма для отправки модулю не сложные - я проработал многие команды, приведенные в вашей документации, все получилось (были кое-где ошибки или опечатки, но в итоге разобрался опытным путем, как должно быть). Единственная проблема - отсутствие описания многих кластеров (какой байт в поле данных что означает), или примеров фреймов с разбором (как в конце документа "Беспроводные модули MBee. Прикладной программный интерфейс MBee API"). Если они есть, то разобраться и реализовать нужные настройки я смогу.
Поэтому давайте продолжим анализ кластеров 0203 и 0403.
Как я ранее писал, я уже считывал настройки модулей по кластеру 0203, ответ модуля приходит нормально. Первые 32 байта выделил, идущий следом SysmcAdcMAsk равен С0, как и при чтении через кластер 0103. Теперь осталось разобраться с остальными полями - что они означают и сколько там байт может быть.
MBee API - установка масок каналов
 
Лучше всего было бы описание данных в виде байтов в hex-формате, как в документации. Но и в Си-коде я тоже разберусь.
Теперь начинает проясняться. Выходит, что (на примере фрейма из моего предыдущего поста):
- 01BE - это digData (в битовом представлении это 16 DIO);
- 0000 и 0000 - это данные двух аналоговых каналов (на плате MB-Tag они пока не подключены никуда, поэтому здесь нули понятны);
- с Vdd и температурой разобрались;
- а счетные входы в "Структуре данных..." не были описаны, поэтому я про них и забыл.
Цитата

В документации на MB-ZigBee есть упоминание о Приложении «Управление конфигурацией выводов» (п.4.2). В действительности это приложение не существует в оформленном виде, поскольку, как я уже писал, в большинстве случаев хватает настроек "по-умолчанию".
Если Вас устраивает способ описания формата, который использовался в этом посте, то можно будет поступить подобным же образом и при описании фреймов 0x403/0x203.

Ага, понятно, эту фразу я читал, но т.к. самого приложения не нашел, то перешел к другим документам в дальнейшем поиске...
Тогда прошу дать описание кластеров 0203 и 0403 - буду дальше разбираться.
Спасибо за ответ!
Страницы: 1 2 След.