MBee API - установка масок каналов

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1 2 3 След.
Ответить
RSS
MBee API - установка масок каналов
 
Добрый день!

Разбираюсь с MBee API по документу "Беспроводные модули MBee. Прикладной программный интерфейс MBee API".
Возник такой вопрос. В разделе "Структура данных цифровых и аналоговых входов" описаны поля данных, но не сказано, как именно устанавливать маски цифровых каналов, аналоговых каналов и дополнительных параметров, чтобы получать от модуля только интересующие значения. В описании MB-ZigBee (td_mbzigbee.pdf) также ничего не нашлось. Просьба указать, как можно выставить биты в этих масках. Или дать ссылку на описание, если оно где-то есть.
 
Здравствуйте! Когда мы разрабатывали ПО MB-ZigBee, мы старались сделать такие настройки линий ввода/вывода "по умолчанию", чтобы можно было решить подавляющее большинство задач, связанных с беспроводными системами, основанными на протоколе ZigBee. И действительно, за годы, прошедшие с момента релиза данного ПО, Вы оказались первым, кому такие изменения понадобились :) У нас в документации есть даже ссылка на Приложение с описанием настроек линий ввода/вывода, но самого этого приложения нет, чтобы не загромождать и так объемный документ. На самом деле MB-ZigBee обеспечивает полный доступ к настройкам портов по эфиру через кластер IO_CONFIG (0x0203 – считать, 0x0403 - установить). Однако, чтобы понять как и чего настраивать, надо неплохо владеть чипом CC2530. Если для Вас необходимо какое-то разовое изменение, то мы можем подготовить для вас специальную прошивку с требуемыми Вам значениями "по умолчанию". Если же Вам необходимо регулярно вносить изменения в конфигурацию линий ввода/вывода, то мы можем выслать вам описание формата данных для кластера IO_CONFIG в виде С-структур. А от вас потребуется проштудировать datasheet на CC2530...
 
Спасибо, но я надеюсь, что масштабными изменениями заниматься не придется...
Немного поясню, чем вообще был вызван вопрос. Есть простенькая сеть - три устройства MBee-2.4-2.1. Один из них на плате MB-USBridge, подключен к компу, работает координатором. Два других установлены на платы MB-Tag, прошиты как роутеры (или конечные устройства, тут без разницы). Координатор, когда нужно, опрашивает другие устройства и получает от них данные (пока - Vdd, температура, один аналоговый сигнал, один дискретный). Сеть развернулась нормально, устройства видят друг друга, запросы-ответы получаются - тут проблем нет, все работает прекрасно. Делаю опрос роутеров командой 2401 с Cluster ID = 0103 - получаю фрейм с таким полем данных, например:
02 F5 1A 02 21 00 00 FF 01 C0 0F BE 01 00 00 00 00 63 07 9E 05 00 00 00 00 00 00 00 00
Начальные позиции этой структуры понятны - Version, Sampling Period, потом должны быть маски каналов (в данном случае, как я понимаю, это 01FF, C0 и 0F)… а вот что потом, каким каналам какие позиции в этом поле данных соответствуют? Вот этого описания и не нашел нигде. Опытным путем установил, что 07 63 - это должно быть Vdd, а 05 9E - температура (с учетом LSB). Но если они идут последними (ориентируюсь на документацию), откуда после них столько нулевых байтов?
То есть прежде всего хочу детально разобраться, что приходит во фрейме и как это вообще настраивается. А уж потом можно будет решить, имеет ли смысл лезть в прошивку, чтобы убрать лишние данные (которых получается намного больше, чем полезных).
Смотрел в "Z-Stack Monitor and Test API" от TI - там тоже нет нормального описания. Настройки портов ввода-вывода (через кластер 0203) я пробовал считывать, но дело в том, что описания ответа модуля на этот запрос тоже нет нигде нормального, а без описания разобраться в той куче байт, что пришла в ответ, невозможно. Вот поэтому и прошу помощи у разработчиков...
Странно - неужели такой вопрос ни у кого раньше не возникал?.. Вроде же рядовая задача.
Кстати, в вашей документации что-то не нашел "ссылки на Приложение с описанием настроек линий ввода/вывода" - можете сказать, где это, или дать само приложение?
 
Добрый день! Извините, пожалуйста, за не очень оперативные ответы - загрузка очень большая. Давайте разбираться по частям. Для краткости форматы описываются с помощью конструкций C. Если это будет непонятно, то будем искать другой способ. Подскажите только, пожалуйста, какой. Итак:
Формат фрейма Cluster ID = 0103:

#define ADC_COUNT_MAX 8 //Максимальное количество данных АЦП.

#define COUNT_INPUTS_ENABLE //Включает поддержку счетных входов.

#if defined(COUNT_INPUTS_ENABLE)
#define COUNT_INPUT_MAX_NUMBER 2 //Число поддерживаемых счетных входов.
#endif

typedef unsigned long counterValue_t;

typedef struct
{
uint16 sPeriod;
uint16 digMask;
uint8 adcMask;
uint8 extMask;
uint16 digData;
uint16 adcData[ADC_COUNT_MAX];
uint16 adcPVdd;
uint16 adcTmpr;
#if defined(COUNT_INPUTS_ENABLE)
counterValue_t counter[COUNT_INPUT_MAX_NUMBER];
#endif
} SysmcIoSample_t;

Перед этими байтами передаются 5 байт номера версии. Восемь нулей в конце - это состояние счетных входов, которые по умолчанию поддерживаются в количестве 2 штук.
Поле extMask показывает включены ли в пакет поля с температурой, напряжения питания и счетчиков:

//Биты маски extMask.
#define VDD_MASKBIT 1
#define VTEMP_MASKBIT 2
#if defined(COUNT_INPUTS_ENABLE)
#define COUNTER1_MASKBIT 4
#define COUNTER2_MASKBIT 8
#define COUNTER3_MASKBIT 16
#define COUNTER4_MASKBIT 32
#endif

С помощью кластера 0x403 можно управлять ВСЕМИ регистрами СС2530, отвечающими за настройки линий входа/выхода, а также таймерами, формирующими ШИМ. В документации на MB-ZigBee есть упоминание о Приложении «Управление конфигурацией выводов» (п.4.2). В действительности это приложение не существует в оформленном виде, поскольку, как я уже писал, в большинстве случаев хватает настроек "по-умолчанию".
Если Вас устраивает способ описания формата, который использовался в этом посте, то можно будет поступить подобным же образом и при описании фреймов 0x403/0x203.
 
Лучше всего было бы описание данных в виде байтов в hex-формате, как в документации. Но и в Си-коде я тоже разберусь.
Теперь начинает проясняться. Выходит, что (на примере фрейма из моего предыдущего поста):
- 01BE - это digData (в битовом представлении это 16 DIO);
- 0000 и 0000 - это данные двух аналоговых каналов (на плате MB-Tag они пока не подключены никуда, поэтому здесь нули понятны);
- с Vdd и температурой разобрались;
- а счетные входы в "Структуре данных..." не были описаны, поэтому я про них и забыл.
Цитата

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

Ага, понятно, эту фразу я читал, но т.к. самого приложения не нашел, то перешел к другим документам в дальнейшем поиске...
Тогда прошу дать описание кластеров 0203 и 0403 - буду дальше разбираться.
Спасибо за ответ!
 
Здравствуйте! Ниже приведен формат поля данных, передающийся при запросе кластера 0x203.
void GetIoConfigFromRegisters( uint8 *nvConfig, uint8 *sysmcUserBinaryIoControl )
{
uint8 i;
// считать значения из регистров в массив(буфер)
*nvConfig++ = PERCFG; //offset 0

*nvConfig++ = IEN1; //offset 1
*nvConfig++ = IEN2; //offset 2

*nvConfig++ = P0SEL; //offset 3
*nvConfig++ = P1SEL; //offset 4
*nvConfig++ = P2SEL; //offset 5

*nvConfig++ = P0DIR; //offset 6
*nvConfig++ = P1DIR; //offset 7
*nvConfig++ = P2DIR; //offset 8

*nvConfig++ = P0INP; //offset 9
*nvConfig++ = P1INP; //offset 10
*nvConfig++ = P2INP; //offset 11

*nvConfig++ = PICTL; //offset 12

*nvConfig++ = P0IEN; //offset 13
*nvConfig++ = P1IEN; //offset 14
*nvConfig++ = P2IEN; //offset 15

*nvConfig++ = OBSSEL0; //offset 16
*nvConfig++ = OBSSEL1; //offset 17
*nvConfig++ = OBSSEL2; //offset 18
*nvConfig++ = OBSSEL3; //offset 19
*nvConfig++ = OBSSEL4; //offset 20
*nvConfig++ = OBSSEL5; //offset 21

*nvConfig++ = T1CC0H; //offset 22
*nvConfig++ = T1CC0L; //offset 23

*nvConfig++ = T1CC1H; //offset 24
*nvConfig++ = T1CC1L; //offset 25

*nvConfig++ = T1CC2H; //offset 26
*nvConfig++ = T1CC2L; //offset 27

*nvConfig++ = T1CC3H; //offset 28
*nvConfig++ = T1CC3L; //offset 29

*nvConfig++ = T1CC4H; //offset 30
*nvConfig++ = T1CC4L; //offset 31

*nvConfig++ = SysmcAdcMAsk; //offset 32
*nvConfig++ = HalAdcGetReference(); //offset 33

*nvConfig++ = SysmcSensorPowerControl; //offset 34

*nvConfig++ = SysmcSleepStatusControl; //offset 35

*nvConfig++ = SysmcSystemLedControl; //offset 36

for (i = 0; i < KEYS_MAX_COUNT; i++)
{
*nvConfig++ = SysmcButtonControl[i];
}
for (i = 0; i < MAX_USER_BINARY_IO - KEYS_MAX_COUNT; i++)
{
*nvConfig++ = *sysmcUserBinaryIoControl++;
}
}

Видно, что первые 32 байта представляют собой внутренние регистры CC2530. А остальные - это уже пользовательские настройки. Мы понимаем, что такое представление сложно для восприятия. Да и мы предполагали ранее, что управлять настройками линий ввода/вывода будет специальное ПО типа X-STU от DIGI и пользователям не потребуется самостоятельно разбирать этот пакет. Однако пока работы над указанной программой приостановлены по внутренним причинам. Если у Вас еще сохранится желание самостоятельно управлять настройками всех линий ввода вывода, то в следующих постах мы приведем описание байтов, следующих за offset 31. А пока добавлю, что при записи этих параметров по кластеру 0x403, осуществляется проверка по длине принятого пакета. Если он оказывается больше или меньше, чем приведенный выше формат, то запись не производится.
 
Да, если бы для модулей MBee была программа с функционалом как у XCTU - было бы шикарно.
Но будем обходиться тем, что есть.
На самом деле анализ приходящих фреймов и формирование нужного фрейма для отправки модулю не сложные - я проработал многие команды, приведенные в вашей документации, все получилось (были кое-где ошибки или опечатки, но в итоге разобрался опытным путем, как должно быть). Единственная проблема - отсутствие описания многих кластеров (какой байт в поле данных что означает), или примеров фреймов с разбором (как в конце документа "Беспроводные модули MBee. Прикладной программный интерфейс MBee API"). Если они есть, то разобраться и реализовать нужные настройки я смогу.
Поэтому давайте продолжим анализ кластеров 0203 и 0403.
Как я ранее писал, я уже считывал настройки модулей по кластеру 0203, ответ модуля приходит нормально. Первые 32 байта выделил, идущий следом SysmcAdcMAsk равен С0, как и при чтении через кластер 0103. Теперь осталось разобраться с остальными полями - что они означают и сколько там байт может быть.
 
Здравствуйте! Вот очередная порция информации по проекту. Не скрою, приятно общаться с настоящим, по хорошему "упертым" профессионалом. В целях совершенствования нашей документации, не могли бы Вы прислать нам список опечаток/некорректностей в ней? Если Вы, конечно, еще их не забыли.

//На Координаторе и Маршрутизаторе имеются кнопки - SYSTEM BUTTON, DI1, COUNT1, COUNT2. На Конечном устройстве поддерживается дополнительная кнопка - вход SLEEP_REQUEST. Однако максимальное число
//кнопок устанавливается одинаковым, чтобы одинаковой для всех конфигураций была длина константы SYSMC_IO_CONFIG_LEN.
#define KEYS_MAX_COUNT 5

#define MAX_USER_BINARY_IO 16 //Максимальное число цифровых входов/выходов, назначаемых пользователем.

#define SYSMC_IO_CONFIG_LEN (37 + KEYS_MAX_COUNT + MAX_USER_BINARY_IO)

#if (SYSMC_MODULE_ID == MODULE_MBee3_0)
//Опции по конфигурациям оставлены, чтобы можно было сразу сделать разные значения по умолчанию.
#if (ZSTACK_DEVICE_BUILD & DEVICE_BUILD_COORDINATOR)
#define P0_OUTPUTS 0x32 ///Светодиод SYSTEM, выход SLEEP_STATUS и SENSOR_POWER.
#define P2_OUTPUTS 0x01 //Выход D03 на плате MB-Tag v2.1
#define SYSMC_ADC_MASK_DEFAULT 0x48 //маска аналоговых каналов
#define P0_TRISTATES 0x48 //Отключаем pull up и pull down для аналоговых входов.
#elif (ZSTACK_DEVICE_BUILD & DEVICE_BUILD_ROUTER)
#define P0_OUTPUTS 0x32 ///Светодиод SYSTEM, выход SLEEP_STATUS и SENSOR_POWER.
#define P2_OUTPUTS 0x01 //Выход D03 на плате MB-Tag v2.1
#define SYSMC_ADC_MASK_DEFAULT 0x48 //маска аналоговых каналов
#define P0_TRISTATES 0x48 //Отключаем pull up и pull down для аналоговых входов.
#elif (ZSTACK_DEVICE_BUILD == DEVICE_BUILD_ENDDEVICE)
#define P0_OUTPUTS 0x32 //Светодиод SYSTEM, выход SLEEP_STATUS и SENSOR_POWER.
#define P2_OUTPUTS 0x01 //Выход D03 на плате MB-Tag v2.1
#define SYSMC_ADC_MASK_DEFAULT 0x48 //маска аналоговых каналов
#define P0_TRISTATES 0x48 //Отключаем pull up и pull down для аналоговых входов.
#else
#error Unknown device build!
#endif
#elif (SYSMC_MODULE_ID == MODULE_MBee2_1) || (SYSMC_MODULE_ID == MODULE_MBee3_1)
//Опции по конфигурациям оставлены, чтобы можно было сразу сделать разные значения по умолчанию.
#if (ZSTACK_DEVICE_BUILD & DEVICE_BUILD_COORDINATOR)
#define P0_OUTPUTS 0x32 ///Светодиод SYSTEM, выход SLEEP_STATUS и SENSOR_POWER.
#define P2_OUTPUTS 0x01 //Выход D03 на плате MB-Tag v2.1
#define SYSMC_ADC_MASK_DEFAULT 0xC0 //маска аналоговых каналов
#define P0_TRISTATES 0xC0 //Отключаем pull up и pull down для аналоговых входов.
#elif (ZSTACK_DEVICE_BUILD & DEVICE_BUILD_ROUTER)
#define P0_OUTPUTS 0x32 ///Светодиод SYSTEM, выход SLEEP_STATUS и SENSOR_POWER.
#define P2_OUTPUTS 0x01 //Выход D03 на плате MB-Tag v2.1
#define SYSMC_ADC_MASK_DEFAULT 0xC0 //маска аналоговых каналов
#define P0_TRISTATES 0xC0 //Отключаем pull up и pull down для аналоговых входов.
#elif (ZSTACK_DEVICE_BUILD == DEVICE_BUILD_ENDDEVICE)
#define P0_OUTPUTS 0x32 //Светодиод SYSTEM, выход SLEEP_STATUS и SENSOR_POWER.
#define P2_OUTPUTS 0x01 //Выход D03 на плате MB-Tag v2.1
#define SYSMC_ADC_MASK_DEFAULT 0xC0 //маска аналоговых каналов
#define P0_TRISTATES 0xC0 //Отключаем pull up и pull down для аналоговых входов.
#else
#error Unknown device build!
#endif
#else
#error ERROR! Unknown board identifier!
#endif

//Параметры для установки опорного напряжения (offset 33) с помощью функции HalAdcSetReference(). 0 означает, что опорное напряжение равно 1,25В.

#define HAL_ADC_REF_125V 0x00 /* Internal Reference (1.25V-CC2430)(1.15V-CC2530) */
#define HAL_ADC_REF_AIN7 0x40 /* AIN7 Reference */
#define HAL_ADC_REF_AVDD 0x80 /* AVDD_SOC Pin Reference */

Далее, начиная с offset 34 следуют байты, позволяющие назначать системные и пользовательские линии ввода/вывода на конкретные выводы CC2530. Формат каждого байта одинаковый:

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

Ниже приведены значения "по-умолчанию", действующие для проекта MB-ZigBee.

//Назначения для переменных, определяющих линии ввода/вывода
//1. Линии общие для всех типов модулей и конфигураций
#define SYSMC_BUTTON_CONTROL_DEFAULT 0x80 //(P0.0 кнопка SYSTEM BUTTON)

#if (SYSMC_MODULE_ID == MODULE_MBee3_0)
#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 0x88 //P1.0 вход COUNT2 на плате MB-Tag v1.1.
#define SYSMC_SENSOR_POWER_CONTROL_DEFAULT 0xA5 //Выход включения питания внешних устройств.
#define SYSMC_SLEEP_STATUS_CONTROL_DEFAULT 0xA4 //Выход SLEEP_STATUS.
#define DO3_OUTPUT_CONTROL_DEFAULT 0xB0//P2.0. Цифровой выход DO3 на плате MB-Tag v1.1.
#define SLEEP_REQUEST_INPUT_CONTROL_DEFAULT 0x89 //P1.1 вход SLEEP_REQUEST. Определяется для всех конфигураций. Для Координатора и Маршрутизатора выполняет роль цифрового входа общего назначения.

#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. Определяется для всех конфигураций. Для Координатора и Маршрутизатора выполняет роль цифрового входа общего назначения.
#else
#error ERROR! Unknown board identifier!
#endif

//Назначения для цифровых линий, которые отображаются в массив пользовательских линий sysmcUserBinaryIoControl[]. Текущие значения цифровых входов/выходов, имеющих копии в массиве sysmcUserBinaryIoControl[]
//будут автоматически помещаться в маску цифровых каналов регулярного пакета. Однако необходимо помнить, что при формировании регулярного пакета используется вызов функции UserIoSwitchOnOffAndStateReturn(),
//которая, кроме считывания текущих значений, еще и управляет цифровыми выходами. Таким образом, если какой-либо системный цифровой выход включается/выключается в соответствии с логикой программы
//(например выход SysmcSensorPowerControl), то, чтобы при вызове UserIoSwitchOnOffAndStateReturn() он не выключился за счет того, что в соответствующем элементе массива, бит, управляющий
//включением/выключением данного выхода сброшен, необходимо каждый раз перед вызовом UserIoSwitchOnOffAndStateReturn() проводить копирование переменных, которые управляют системными ВЫХОДАМИ
//в соответствующие элементы массива. Системными выходами являются: SysmcSensorPowerControl, SysmcSleepStatusControl и SysmcSystemLedControl.
#define SYSMC_USER_BINARY_IO_CONTROL_DEFAULT_0 SYSMC_SYSTEM_LED_CONTROL_DEFAULT
#define SYSMC_USER_BINARY_IO_CONTROL_DEFAULT_1 SYSMC_BUTTON_CONTROL_DEFAULT
#define SYSMC_USER_BINARY_IO_CONTROL_DEFAULT_2 SLEEP_REQUEST_INPUT_CONTROL_DEFAULT
#define SYSMC_USER_BINARY_IO_CONTROL_DEFAULT_3 SYSMC_SLEEP_STATUS_CONTROL_DEFAULT
#define SYSMC_USER_BINARY_IO_CONTROL_DEFAULT_4 SYSMC_SENSOR_POWER_CONTROL_DEFAULT
#define SYSMC_USER_BINARY_IO_CONTROL_DEFAULT_5 DI1_INPUT_CONTROL_DEFAULT
#define SYSMC_USER_BINARY_IO_CONTROL_DEFAULT_6 DO3_OUTPUT_CONTROL_DEFAULT
#define SYSMC_USER_BINARY_IO_CONTROL_DEFAULT_7 COUNT1_INPUT_CONTROL_DEFAULT
#define SYSMC_USER_BINARY_IO_CONTROL_DEFAULT_8 COUNT2_INPUT_CONTROL_DEFAULT

Если что будет непонятно - пишите.
 
Добрый день!

Цитата

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

Я записываю :)
Пока выявил следующее (приведу здесь, т.к. некоторые ошибки/неточности имеют прямое отношение к данной теме).
Файлы документации, которые смотрел:
- «Беспроводная система 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.

А я пока изучаю то, что выложено в вашем посте...
 
По тому, что вы выложили, появились вопросы...

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 и сопоставлю это описание с теми байтами, которые мне реально приходят...
Страницы: 1 2 3 След.
Ответить
Читают тему
Форма ответов
 
Текст сообщения*
Отправить Отменить