admin

ПРОДУКЦИЯ TELEGENESIS

Сеть и ее модули COO, FDD, MED, SED

Прежде всего следует смотреть ПОСОБИЕ ПО ETRX

Ниже идут форумные эксперименты, вошедшие в пособие и более связно изложенные именно там. В последние годы все большую популярность при разработке беспроводных систем сбора данных и управления завоевывает технология ZigBee. Уже первые сети, использующие эту технологию, как правило, проектировались на базе модулей со встроенным программным обеспечением. Такой подход существенно упрощает и ускоряет разработку. Компания Ember известна многим разработчикам благодаря своей популярной серии микросхем EM250/EM260. Это были первые появившиеся на рынке системы на кристалле для построения ZigBee-сетей. Они содержат приемопередатчик ZigBee, процессорное ядро и периферийные узлы. В этом году компания Ember выпустила новое поколение высокоинтегрированных микропотребляющих микросхем EM351/EM357, обладающих на данный момент передовыми характеристиками. Компания Telegesis является партнером фирмы Ember по разработке недорогих отладочных комплектов и радиомодулей ETRX351/357. На базе платформы Ember уже выполнены сотни успешных проектов по всему миру, что позволило компании в августе этого года занять 16-е место в списке наиболее активно развивающихся предприятий США в категории разработки аппаратного обеспечения.

Инфо: тут самая полная | ETRX357 KIT | Сенсорные сети: как скоро | Умная пыль | Сенсорная сеть MeshLogic | Обзор фирм на 2006 г.

Система AT-команд поддерживает богатый набор функций, таких как образование и присоединение к беспроводной сети, мониторинг сети, передача и прием сообщений по радиоканалу, ввод/вывод цифровой информации, ввод аналоговых сигналов, работа с таймерами и последовательным интерфейсом. При этом такие сетевые задачи, как ретрансляция сообщений и выбор оптимального маршрута, поддерживаются модемами ETRX2 автоматически. Центральный узел сети Sink назначается путем программирования соответствующего конфигурационного регистра. Таким узлом может стать координатор COO или любой из маршрутизаторов FFD. Вновь поступающий байт, сигнал от таймера или иное прерывание вызывает на исполнение один из пятидесяти возможных стандартных сценариев, номера которых заносятся в конфигурационные регистры модуля MED (спящего SED) прямо по радиоканалу.

Микросхемы - бабочки. Снабжены процессором, несколькими ацп, питаются от батарейки. Занимают мало места. Настоящие бабочки - могут подсаживаться в кусты и деревья и фонить информацией. Радиомодемы. Современная версия модуля ETRX357, более детально | полное. Пример (плохой) про датчик температуры, лучше пример.

Раскладка ножек ETRX35X: 1/13/19/20/31/33 земля, 32 - питание до 3.6 вольт. Альтернативно используются: 17 - PB1-SC1TXD, 18 - PB2-SC1RXD (ножки 30, 31 навесной микросхемы EM35X), для внешнего модуля, возможно, ножки "не актуальны". Совсем не актуально, но важно для эксперимента: на стендовой карточке по вертикали от края идут земля-питание (подать на 19, 32), выше идет провод к Rxd, левее к Txd.

Есть сборные пункты информации: USB-координаторы. Для адресации устройств в сети используется уникальный 64-битный идентификатор, который заносится в энергонезависимую память модемов на этапе производства.

USB-координатор ETRX2USB управляются набором R303-AT-команд (для случая ETRX357), передаваемых через терминал компьютера на частоте 19200bps, Data bits - 8, Parity - none, Stop bits - 1, Flow Control - none. Терминальная программа требует установки .NET Framework 1.1.4322, в версии 3.5 не работает (скачанной по ее же ссылке на источник), проще пользоваться простыми терминальными программами.

AT-команды координатора

На команду ATI (с кодом перевода каретки <13>) USB-координатор отвечает: TELEGESIS ETRX2 R302X 0021ED00000468C9 OK. Перед OK идут идентификационные номера.

Поизучаем AT-команды. AT+DASSL вынуждает модуль покинуть (свою) сеть. ATZ соответствует Reset. AT&F возвращает начальные настройки. AT+N возвращает его статус +N=NoPAN OK. ATS04? возвращает прописанный заводом в регистре S04 номер 0021ED00000468C9.

Команда AT+EN создает сеть, модуль становится координатором, сообщая о присоединении самого себя с параметрами JPAN:25,3D84,7E04AEF1821F433C. Команда AT+N выдает параметры USB-координатора: функциональное назначение, канал, питание, пара идентификационных номеров (назначаются рандомизатором) +N=COO,25,03,3D84,7E04AEF1821F433C.

Распространенные коды ошибок: 02 - неправильная команда, 05 - неверный параметр, 26 - не присоединиться, 27 - не найдена сеть, 28 - устройство уже в сети и команда не может быть выполнена.

Aдрес и команды удаленного управления

После включения ETRX375. По AT+N возвращает атрибуты координатора. По AT+SN возвращает атрибуты подключившихся модулей, в частности, адрес (XXXX).

По AT+PANSCAN (поиск еще модулей) сканирует пространство, пишет OK и через полминуту, подумав, возвращает NEWNODE: 8C86,000D6F00005C4AB7,0000 SR:00,000D6F00005C4AB7,8C86 FFD:000D6F00005C4AB7,8C86. На повторную команду пишет: +PANSCAN:25,3D84,7E04AEF1821F433C,02,01 (сообщая номер координатора COO, который исчезает, если модуль ETRX375 отключаем от питания, что вводит в заблуждение относительно принадлежности этого номера). Если отключить модем ETRX357, то возращает только OK. Если включить снова модем, пишет идентификатор координатора (!)

Для удаленного чтения четвертого регистра ETRX375 подходит адрес, указанный в NEWNODE: ATREMS:000D6F00005C4AB7,04? Возвращает ответ ACK:13 и содержательно верное SREAD:8C86,000D6F00005C4AB7,04,00=000D6F00005C4AB7.

Подходит и укороченный адрес: ATREMS:8C86,04?

ГОТОВИМ МОДУЛЬ КО СНУ

СПРАВКА ПО 304-й ПРОПИСКЕ.

ТИП МОДУЛЯ

Опрос ATREMS:8C7C,0A? фабричного модуля подтверждает содержимым ответа 0000, что ETRX375 - маршрутизатор FFD. Если модем выключен, то приходит NACK (нет ответа).

ATREMS:8C7C,0A=8000:password назначает модуль конечным устройством ZED. Изменения будут учтены при присоединении модуля к сети (поэтому,возможно, соединенный модуль нужно таки отсоединить AT+DASL, и по AT+EN образовать сеть снова, но изменится имя модуля).

Команда ATREMS:8C7C,0A=4000:password назначает модуль ПОТЕНЦИАЛЬНО спящим устройством SED (есть нще MED - мобильного устройства).

ATREMS:8C7C,0A? подтверждает это ответом 4000. (Ненужное, видимо: AT+DASSL - координатор покидает сеть. AT+EN - создает AT+EN...JPAN:14,A3E9,A9CDB5510766B122, AT+SN - не видит модуль, через минуту увидел NEWNODE:E627, 0021ED0000072729, 0000....SED:0021ED0000072729, E627). После чего ATREMS:E627,33=0000 останавливает ранее включенный на модуле таймер, ATREMS:E627,33=0020 включает его без проблем (медленный темп).

Прямое чтение аналогового входа ADC0 возможно после ATREMS:E627,15=2000 (13-й бит 15-го регистра в 1) по ATREMS:E627,1F? возвращает FFDB или FFDC. Питание на датчики явно не подано, но с этим потом.

Популярная функция 0110 (8110) высылает данные с первых двух АЦП. Проблемность - в 357-й версии 4 АЦП (а не два), причем датчик света прицеплен к 4-му, а прошивка старая 303, где нет функциональности 8130 (высылания данных со всех АЦП). Если функции 8110 и 8130 имеют показательный или тестовый характер (по быстрому организовать тест), то недофункционал ввиду быстрого роста индустрии естественнен и мало беспокоящий аргумент. Но если экономия заряда батарей тесно связана именно с этими функциями, то перепрошивка на 304-ю версию комплекта КИТ - так или иначе назреет, станет обязательной.

ТАЙМЕРЫ

Первые четыре таймера всегда молотят - они обрабатывают задачи, связанные с организацией сети, их трогать не нужно!!! Please note that the first 4 timers are used by default for network management tasks, which can be modified by the user when changing the corresponding registers. A timer will increment every 250ms (4 times a second) and when the timer reaches the value stored in the timer/counter register the corresponding action will be executed. Поэтому хотя процессор и спит, они его будят систематически и создается иллюзия постоянного бодрствования. Это упрощает программирование задачек.

Существует таблица 5 встроенных функций, зависящих от 8 таймеров, четырех внешних прерываний, от факта загрузки и присоединения к сети. Если узел находится в режим пониженного энергопотребления, но функция требует его пробуждения, узел выполнит ее и вернется ко сну. Каждый таймер расчитан на одиночное срабатывание и перезапустится снова в том случае, когда старший бит действия установлен в 1 (например, вместо 0001 набираем 8001). Функции 0001, 0002, 0003, 0004 меняют уровни сна.

Функциональность ATREMS:E627,34=8110 вынуждает посылать данные, таймер был активирован ею. Преамбула такая: the table gives an overview of the built-in functionality which can be triggered either by the four external interrupts, boot-up, joining a network, or by 8 individually programmable timers/counters. If the node is in a low power mode and the action requires the node to wakeup, the node will do so and go back to its original power mode after completion of the action.

Глубина сна регламентируется в регистре S39 (стартово S3A) уровнями 0-3, последний определен для просыпания от внешней причины (не используется без нужды). В режиме 0 процессор в работе. На уровне 1 процессор держится на холостом ходу. На уровне 2 усыпляется процессор. Два последних чреваты потерей связи с модулем!!! Функционал питания: 0001 Change to power mode 0. 0002 Change to power mode 1. 0003 Change to power mode 2. 0004 Change to power mode 3. Если менять моду (режим) сна таймером, то надо 8-ку проставлять, чтобы таймер тикал все время: When triggered by a timer the timer will restart only in case the most significant bit of the action is set to 1 (e.g. instead of 0001 set 8001).

ATREMS:E627,3A=0000 - режим активного питания на старте. The module's power mode after start-up and reset.

ATREMS:E627,31=0080 период таймера 4 (около 2-х минут).

ATREMS:E627,32=8001 таймер 4 переключит модуль в активный режим питания.

ATREMS:E627,33=0010 период таймера 5 (около 16-ти секунд).

ATREMS:E627,34=8110 - таймер 5 передает данные с АЦП (заранее готовим).

ATREMS:E627,39=0000 - текущий режим экономии питания, но надо взвести таймер сначала. Разобраться с Volotile. Обратите внимание, что в регистре 39 и регистрах функциональности режимы нумеруются по разному - в первом случае 0000-0003, а во втором 0001-0004 !!!

Таймеров несколько: таймером можно режим сна менять. То уснет, то проснется. Одним будить. Другим - засыпать. Это как будильники. Надо предусмотреть отключение светодиодов LED. Уточнить, отключается ли на период сна процессора питание сенсоров - это легко проверить с помощью вольтметра, замерив уровень на выходах PA2 (температурный датчик) и PA3 (датчик освещенности) - если 1, то питание подано. Предположительно, по умолчанию, уровни выходов сохраняются. Поэтому скорее всего придется позаботиться о включении/отключении питания сенсоров самостоятельно - с помощью таймеров.

ПРОБУЖДЕНИЕ

Если нужна возможность выйти из замкнутого цикла, в котором модуль выходит из спящего режима только для выполнения функций по таймерам, можно определить функцию прерывания по одной из кнопок: например, BUTTON1, и определить по прерыванию IRQ0 для нее в регистре S23 функцию перехода в режим бодрствования 0001 (по умолчанию так и сделано для кнопки BUTTON1), для кнопок режимы нумеруются 0001-0004, запрещен 4-й режим.

ATREMS:E627,39? В S39 можно проверять итог действия кнопки, но режимы там нумеруются 0000-0003 (запрещено 0003). Если установить там "сон процессора" ATREMS:E627,39=0002, то потребление тока снизится, и нажатие кнопки BUTTON1 вернет микросхему к бодрствованию!!!

Или есть еще один вариант - можно включить пробуждение при наличии активности в канале UART - регистр S11 (Bit 9: Set: Enable wakeup on UART activity (1st input character is discarded)). После чего можно управлять модулем по последовательному каналу, например, для изменения конфигурации, режима работы и т.п. По умолчанию S11=0005, установка 1 в 9-м бите приведет к S=205!

Кроме того, можно изменить значение S39 – Power Mode по радиоканалу с помощью команды ATREMS:<адрес SED-а>,39=0000. Здесь режимы нумеруются 0000-0003. Замечено, по прибору потребления тока, что просыпание происходит немедленно, даже если процессор был введен в сон, не дожидаясь сеанса связи по таймеру для передачи данных АЦП.

ТЕХНИЧЕСКОЕ ОПИСАНИЕ ПЛАТЫ КИТ

S15=0600 задает конфигурацию входов-выходов, LED1 связан с PB6, LED2 связан с PC0 большой платы. S16-S17 для назначения и инициализации на старте, S17=000142CC. S18-S19 содержимое буфера (включая стартовое S19).

ATREMS:E627,18=00010000 отключает светодиод LED2, питание становится экономнее.

ATREMS:E627,18=000100C0 отключает светодиод LED2 и два светодиода на малой плате с антеной (PA7 - красный, PA6 - зеленый).

СРЕДСТВА ПОМОЩИ РАЗРАБОТЧИКУ KIT ETRX357

Если привыкли работать с COM-портом, с софтом, устаревшим к 357-й версии и требующим инсталляции .NET Framework Version 1.1 на Windows, можно не торопиться, все одно потребуется писать интерфейс и свою программу.

Готовые кроватки для микросхем, USB-UART переходники, батарейный отсек, пара датчиков (света/температуры), тестовые кнопки. Все как у AVR микропроцессоров, к сожалению - продается это чудо только в наборах из нескольких штук. Включать - джампером перехода питания USB-батарейка.

В 357-м наборе питание датчиков управляемо, для экономии электроэнергии.

Система снабжена USB-координатором, черным тараканом, типичным для радиоустройств. AT-командами сообщаем координатору, что он - точка слива данных, по радиоканалу настраиваем режим работы и период таймера радиодатчика. В режиме ZED датчик не спит (не экономит батарейку), исправно шлет данные.

РАЗБОР ОПУБЛИКОВАННОГО В СПРАВОЧНИКЕ ПРИМЕРА

Для начала сразу отметим, что в исследовательком наборе (KIT) ETRX357 световой датчик подключен к АЦП 3, тогда как сценарий примера cвязан c функциональностью 8110 - передачей данных с первых двух АЦП. И иной функциональности нет. Следовательно - это не столько рабочий пример, сколько тестовый или показательный.

Посылаем модулю ATREMS:адрес,0A=8000:password - делаем конечным устройством ZED. По SN, он виден по прежнему маршрутизатором. Делаем перезагрузку сети по AT+DASSL, AT+EN, снова ловим модуль (не сразу, но встал), модуль сообщил, что он ZED.

Начинаем разбор сценария опроса температурного сенсора | [2]. С микросхемой можно использовать такой же как в отладочном комплекте температурный датчик - National Semiconductor LM61.


1. Define the module on the data-gathering development board as the network sink with the command ATS104=1
2. Instruct one or more Carrier Boards to send their ADC readings at regular intervals by setting a Timer/Counter on the CB, eg to send every second using Timer/Counter 5 set: S33=0004 S34=8110
3. Activate the temperature sensor ADC on each Carrier Board with the command ATS15D=1
4. Turn on the sensor power on each Carrier Board with the command ATS182=1
5. Activate the graph by selecting Tools -> R2xx Temperature Awareness

1. Первая команда ATS104=1 прозрачная, особых затрудений в понимании назначения координатора точкой слива sink данных нет. В справочнике R303, которыми управляется USB-модуль, координатор, она описана (4-й бит в 1).

2. Следующую команду шлем на модуль по ATREMS:адрес,34=8110, она есть в справочнике 302-й прошивки.

В начале раздела 5 Build in Functionality написано, что для того, чтобы подпрограмма выполнялась циклически (а не один раз по срабатыванию таймера) нужно установить самый старший бит в 1, т.е в данном случае в регистр нужно записать 8110 вместо 0110.

Функция 0110 отправляет значения первых двух АЦП, то есть A/D1 и A/D2 на ETRX2 (ADC0 и ADC1 на ETRX357). Сообщение приходит на синк в следующем формате: SDATA: [EUI64,], ioread, A/D1, A/D2, sequenceNo, Vcc. (см. пункт 2.2 Prompt Overview, стр. 7).

В версии R304 появилась функциональность 0130, позволяющая отправлять результаты измерений любых активных каналов АЦП. Температурный датчик подключен к A/D1 (9-я нога) ETRX2, ADC0 (30-я нога).

0130: Sends to the network's sink the reading of the I/O, an 8-bit transmission counter which increments with every transmission, the contents of S46 (S46 – Start-up Functionality) and the reading of any A/D [1..4] enabled in S15 (ETRX3). If no sink is known the unit will search for a sink immediately when bit 8 of S10 is set.

По ATREMS:адрес,33=0004 устанавливаем паузу таймера в 1 секунду. 4-й бит, это 1000, надо так полагать.

3. Шлем коды ATREMS:адрес,15D=1 и ATREMS:адрес,1511=1. Заглянем в команды R303 - регистр S15 отвечает за конфигурацию выходов, бит D отвечает за активацию первого АЦП (температура), бит 11 в шестнадцатиричной системе счисления - за активацию четвертого АЦП (свет). У ETRX2 термодатчик сидит на ножке 9 применительно к конкретной микросхеме A/D1. В наборе ETRX357 сенсоров - четыре (на первом входе по прежнему термодатчик, на 4-м - световой датчик).

4. Шлем коды ATREMS:адрес,182=1 и ATREMS:адрес,183=1. Это касается только комплекта для ETRX357, где с помощью выходного буфера (управляемого регистром S18) подается питание на датчики. Температурный датчик - National Semiconductor LM61 подпаян через джампер к входу АЦП. У комплекта c ETRX2 питание датчиков не отключается.

Световой резистор подключен между резисторами 18 ком и 10 ком (мост) к стабилизированному напряжению питания 3 вольта. Сигнал с него подается на АЦП. После манипуляций (и, в данном случае, переустановки модуля в режим ZED - конечное устройство) от него раз в секунду стали приходить данные на координатор. Сеть управляема.

ПРОГРАММА ЗАДАНИЯ-ОПРОСА ДАТЧИКОВ

ПРОГРАММА: ZIP


open panel, show
open mouse support
% ADDRESS AND COM-PORT,
A=read('STR$ATREMS:006B,'),
e=write(0,'com19200'), do 3, s=read('com16'), end
% INTITIAL VARIABLES
Z=0, T=0, K=0, G=0, N=120, R=one(N), I=0

open timer support
DO, P=R, J=I, if J>0,  
  % if J<N, L=P(1:J), J=J+1, P=P(J:N), P=[P;L], end
  e=PutMatrix(P), e=PutLine(1,'window')
  if Z>0, T=?, getREAD, end
end 
pause 0.1
END

function: timer 1
close timer support, 
s=read('com'), if s>0, I=I+1, if I>N, I=1, end, R(I)=s, end 
if Z>0, T=T+1, % STR$18=000140CC is ALL LEDS OFF
if T=100,  S=read('STR$18=00000000'), send(A+S),  I=N-48, end 
if T=200,  S=read('STR$18=0000008C'), send(A+S), I=N-48, end
if T=300,  S=read('STR$22?'), send(A+S), I=N-44, T=0, end  end
open timer support

function: click 
close timer support, play click.wav
  % Z - ACTIVATE THE TIMER INTERRUPT
  if near ETRX   then Button1 lights, Z=not(Z), else
  if near Button1 then Button1 lights, 
   S=read('STR$ATI'), send(S), I=N-3, else
  if near Button2 then Button2 lights, 
   S=read('STR$AT+SN'), send(S), I=N-5, else
  if near Button3 then Button3 lights,
   S=read('STR$1F?'), send(A+S), I=N-44, else
  if near Button4 then Button4 lights, 
   S=read('STR$22?'),  send(A+S), I=N-44, else
  if near Button5 then Button5 lights, 
    S=read('STR$39=0002'), send(A+S) 
    S=read('STR$18=0000000C'), send(A+S)  
end, end, end, end, end, end
open timer support

function: lights
subject Lamp paints red. pause 0.2
subject Lamp paints green.

function: send(S)
close timer support, play click.wav
S=[S;13], for i=1:size(S) do, e=write(S(i),'com'), end, 
I=0, R=one(N), open timer support

function: send(A+S)
S=[A;S], send(S)

function: activatedata
S=read('STR$33=0020'), send(A+S) 
S=read('STR$34=8110'), send(A+S)
 
function: stopdata
S=read('STR$33=0000'), send(A+S) 
S=read('STR$34=0000'), send(A+S)

function: getREAD
% SREAD:E627,0021ED0000072729,22,00=009E
% ================================
D=read('STR$SREAD'), n=size(D), 
F=1, for i=1:n, if D(i)<>P(i), F=0, end, end
if F=1, if J>38, g=0,  C=P(35:38), 
 % C=? C=P(24:27), C=P(29:32), C=P(34:37)  
 for j=1:4, c=C(j), 
 if c>58, c=c-55, else, c=c-48, end, C(j)=c, g=g*16+c, end 
 if J<>K, 
   if g>512, g=512, end
   if K=0, G=g, else, G=[G;g], end, K=J, G=??, % [C;1200-g]=?,   
 end
end, end

function: getDATA
D=read('STR$SDATA'), n=size(D)
F=1, for i=1:n, if D(i)<>P(i), F=0, end, end
if F=1, g=0, C=P(29:32), C=? % C=P(24:27),  C=P(29:32), C=P(34:37)  
 for j=1:4, c=C(j), 
 if c>58, c=c-55, else, c=c-48, end, C(j)=c, g=g*16+c, end 
 if J<>K, g=1200-g, 
   if K=0, G=g, else, G=[G;g], end, K=J 
   G=??, % [C;1200-g]=?,   
 end
end

% TYPICAL MESSAGES
% SDATA:0021ED0000072729,3B33,FFEC,FFDA,0E,2495
% SR:00,0021ED0000072729,B60A..FFD:0021ED0000072729,B60A
% ZED:0021ED00000408B1,8AF4
% S=read('STR$BCAST$00,Hello'),
% S=read('STR$UCAST$E627=23'),
% S=read('STR$15=00022600')

* * *

В разборе примеров вставками используются комментарии Сергея Солодунова (EFO). Опыт практического изучения ETRX357 дает представление о микросхеме, для управления используется USB-кооординатор от Telegenesis.

Такое впечатление, для пайки их подойдет гребенка медных контактов. Температурный датчик: LM61 | в Мегаэлектронике

Адрес поставок: EFO | WLESS | ZigBee-модули | ETRX-модули
Политехническая 21, офис 331 т. (812) 327-86-54

Материал к изучению: Татьяна Кривченко Статья Статья. Новости: малый бизнес нащупал растительную тему: Севекс ! .

Еще есть аналоги, фирма Jennic, ее скупают на корню: новости августа. В Jennic есть готовый набор с термо-свето-влажнометрами, но, дорогой.

МИКРОСХЕМА ETRX2

Для начала напаяем оптодатчик к одному из двух АЦП сетевой радиомикросхемы.

Смотрим описание на стр. 10 ножек. Два АЦП - это ножки 9, 10, обозначенные A/D1, A/D2. Должно быть напряжение до 1.2 вольт (не выше питания).

Краткое введение описывает команды. Команда AT+SN сообщает, что модуль ETRX2 имеет тип FFD (маршрутизатор) и дает его адрес XXXX. По опыту, модуль как маршрутизатор FFD не обращается к АЦП (данных нет).

От типа устройства эта функциональность не зависит. FFD не отсылал данные скорее всего потому, что ещё к этому моменту не получил sink advertisment (т.е. маршрут к sink-у). В описании каждого регистра есть строчка Becomes effective, под которой указывается когда изменения значений регистра вступят в силу (instantly или when joining or establishing a PAN). В соответствии с описанием регистра 0A, биты F-E вступают в силу только при присоединении или образования сети. Поэтому FFD меняется на ZED только после DASSL.

Для управления состояниями выходов по таймерам можно использовать функциональности 005x (установить на ножке x логический 0) и 006x (установить на ножке x логическую 1). Можно синхронизировать работу этих таймеров с таймером, по которому выполняется функция 0110 (чтение АЦП). Управление таймерами осуществляется с помощью функций 24xx, 25xx, 26xx.

ПРОГРАММА: ZIP. В программе ETRX2 SED-модуль 6E17, присоединенный по AT+PANSCAN (проверка AT+SN) при Z=1 периодически опрашивается компьютером, ответ анализируется в getREAD и выводится график датчика светимости от АЦП 1F. Устаревшее getDATA используется при активизации внутреннего таймера ETRX2. АЦП подключен к питанию, его включение не нужно (всегда готов), но ест энергию.


open panel, show
open mouse support
% ADDRESS AND COM-PORT,
A=read('STR$ATREMS:6E17,'),
e=write(0,'com19200'), do 3, s=read('com4'), end
% INTITIAL VARIABLES: Z=1 is TIMER
Z=0, T=0, K=0, G=0, N=120, R=one(N), I=0

open timer support
DO, P=R, J=I, if J>0,  
  % if J<N, L=P(1:J), J=J+1, P=P(J:N), P=[P;L], end
  e=PutMatrix(P), e=PutLine(1,'window')
  if Z>0,  T=?, getREAD % READ GRAPH
  % getDATA
  end
end 
pause 0.1
END

function: timer 1
close timer support, 
s=read('com'), if s>0, I=I+1, if I>N, I=1, end, R(I)=s, end 
if Z>0, T=T+1, % STR$18=000140CC is ALL LEDS OFF
% if T=100,  S=read('STR$18=00000000'), send(A+S),  I=N-48, end 
% if T=200,  S=read('STR$18=0000008C'), send(A+S), I=N-48, end
if T=300,  S=read('STR$1F?'), send(A+S), I=N-44, T=0, end  end
open timer support

function: click 
close timer support, play click.wav
  % Z - ACTIVATE THE TIMER INTERRUPT
  if near ETRX   then Button1 lights, Z=not(Z), else
  if near Button1 then Button1 lights, 
   S=read('STR$ATI'), send(S), I=N-3, else
  if near Button2 then Button2 lights, 
   S=read('STR$AT+SN'), send(S), I=N-5, else
  if near Button3 then Button3 lights,
% activatedata, else
  S=read('STR$1F?'), send(A+S), I=N-44, else
  if near Button4 then Button4 lights, 
% stopdata, else
  S=read('STR$22?'),  send(A+S), I=N-44, else
  if near Button5 then Button5 lights, 
    S=read('STR$39=0002'), send(A+S) 
    S=read('STR$18=0000000C'), send(A+S)  
end, end, end, end, end, end
open timer support

function: lights
subject Lamp paints red. pause 0.2
subject Lamp paints green.

function: send(S)
close timer support, play click.wav
S=[S;13], for i=1:size(S) do, e=write(S(i),'com'), end, 
I=0, R=one(N), open timer support

function: send(A+S)
S=[A;S], send(S)

function: activatedata
S=read('STR$33=0020'), send(A+S) 
S=read('STR$34=8110'), send(A+S)
 
function: stopdata
S=read('STR$33=0000'), send(A+S) 
S=read('STR$34=0000'), send(A+S)

function: getREAD
% SREAD:E627,0021ED0000072729,22,00=009E
% ================================
D=read('STR$SREAD'), n=size(D), 
F=1, for i=1:n, if D(i)<>P(i), F=0, end, end
if F=1, if J>38, g=0,  C=P(35:38), 
 % C=? C=P(24:27), C=P(29:32), C=P(34:37)  
 for j=1:4, c=C(j), 
 if c>58, c=c-55, else, c=c-48, end, C(j)=c, g=g*16+c, end 
 if J<>K, 
   if g>512, g=512, end
   if K=0, G=512-g, else, G=[G;512-g], end, K=J, G=??, % [C;1200-g]=?,   
 end
end, end

function: getDATA
D=read('STR$SDATA'), n=size(D)
F=1, for i=1:n, if D(i)<>P(i), F=0, end, end
if F=1, g=0, C=P(29:32), C=? % C=P(24:27),  C=P(29:32), C=P(34:37)  
 for j=1:4, c=C(j), 
 if c>58, c=c-55, else, c=c-48, end, C(j)=c, g=g*16+c, end 
 if J<>K, g=1200-g, 
   if K=0, G=g, else, G=[G;g], end, K=J 
   G=??, % [C;1200-g]=?,   
 end
end

% TYPICAL MESSAGES
% SDATA:0021ED0000072729,3B33,FFEC,FFDA,0E,2495
% SR:00,0021ED0000072729,B60A..FFD:0021ED0000072729,B60A
% ZED:0021ED00000408B1,8AF4
% S=read('STR$BCAST$00,Hello'),
% S=read('STR$UCAST$E627=23'),
% S=read('STR$15=00022600')

 ura

Программа для VMatlab, принимающая данные с ETRX: (старая, архивная)



% ZED:0021ED00000408B1,8AF4
% SDATA:0021ED00000408B1,0FF7,003F,0261,AD,2296
N=65, R=one(N), I=0, K=0 
D=read('str:SDATA'), n=size(D), G=0,
e=write(0,'com19200'), do 3, s=read('com10'), end
open panel, show
open mouse support, open timer support
DO
P=R, J=I, 
if J>0, if J<N, L=P(1:J), J=J+1, P=P(J:N), P=[P;L], end
F=1, for i=1:n, if D(i)<>P(i), F=0, end, end
if F=1, C=P(29:32), g=0,
 for j=1:4, c=C(j), 
 if c>58, c=c-55, else, c=c-48, end, C(j)=c, g=g*16+c, end 
 if J<>K, g=1200-g, if K=0, G=g, else, G=[G;g], end, K=J, 
 G=??, % [C;1200-g]=?,   
 end
end 
% e=PutMatrix(P), e=PutLine(1,'window'), 
end 
pause 0.1
END

function: timer 1
close timer support
s=read('com'), if s>0, I=I+1, if I>N, I=1, end, R(I)=s, end  
open timer support

function: click 
play click.wav
  if near Button1 then Button1 lights, doTMR, else
  if near Button2 then Button2 lights, doTMS, else
  if near Button3 then Button3 lights, doATI, else
  if near Button4 then Button4 lights, doSN,  else
  if near Button5 then Button5 lights, doCLR,  
end, end, end, end, end

function: lights
subject Lamp paints red. pause 0.2
subject Lamp paints green.

function: doATI 
N=65, S=read('str:ATI'), S=[S;13] 
for i=1:size(S) do, e=write(S(i),'com'), end

function: doTMR 
play click.wav 
N=47, open timer support
S=read('str:ATREMS$8AF4,33=0004')
S=[S;13], for i=1:size(S) do, e=write(S(i),'com'), end

function: doTMS 
N=65, R=one(N), I=0, close timer support 
S=read('str:ATREMS$8AF4,33=0000')
S=[S;13], for i=1:size(S) do, e=write(S(i),'com'), end

function: doSN 
S=read('str:AT+SN')
S=[S;13], for i=1:size(S) do, e=write(S(i),'com'), end

function: doCLR, 
% e=PutMatrix(R), e=PutLine(1,'window') 

 admin

ЭКОНОМИЯ ЭНЕРГИИ

В 304-й версии прошивки дефект аппаратного роста (количество АЦП превышает функциональность, обслуживаемую софтом) исправлен (8130 вместо 8110), но в продаже до сих пор модули с 303-й прошивкой (и в KIT) тоже. Возникает вопрос - так ли уж нужна стратегия узла слива, если центральный модуль в состоянии опросить датчики по потребности (не вылавливая посыл из сети)?

Неясно пока главное в этой теме - если опрос датчиков идет по инициативе центрального узла, то совместимо ли это со сном?? Экономией электроэнергии. Можно ли экономить заряд батарей, не опираясь на пассивное выжидание сигналов от "снулых" датчиков? В состоянии ли центральный модуль их будить?

Основная затрата электроэнергии касается не радиоприемника, а передатчика, который у SED и MED модулей определенно отключен (спит). Возможно, что это и есть основной аргумент экономии. Процессор при необходимости реакции для экономии не отключишь (режимы 2 и 3).

 ura

ИСПОЛЬЗОВАНИЕ ETRX КАК КАНАЛА СВЯЗИ

Команды передачи данных AT+BCAST (всем устройствам) и AT+UCAST (адресно) используются для организации обмена данными, по приеме их содержимое ретранслируется на UART. Особенности обмена можно посмотреть в справочнике.

ОПРОС ДАТЧИКОВ

Программа для VMatlab, посылающая запрос содержимого ячеек 1F (датчик температуры) и 22 (датчик света) и принимающая данные в формате

SREAD:8C7C,0021ED0000072729,22,00=009E

По признакам SREAD и = ищется значение сигнала датчика (например, 009E) и переводится в массив данных для построения графика. Датчик света номинальный, у него мало градаций яркости.



open panel, show
open mouse support 
% Z - ACTIVATE THE TIMER INTERRUPT
T=0, Z=1,  K=0, G=0, N=120, R=one(N), I=0
e=write(0,'com19200'), do 3, s=read('com16'), end
open timer support
DO, P=R, J=I, if J>0,  
% if J<N, L=P(1:J), J=J+1, P=P(J:N), P=[P;L], end
e=PutMatrix(P), e=PutLine(1,'window')
if Z>0, T=?, getREAD, end
end 
pause 0.1
END

% TYPICAL MESSAGES
% NEWNODE:B60A,0021ED0000072729,0000
% SR:00,0021ED0000072729,B60A..FFD:0021ED0000072729,B60A
% SDATA:0021ED0000072729,3B33,FFEC,FFDA,0E,2495
% SREAD:8C7C,0021ED0000072729,22,00=009E
% ZED:0021ED00000408B1,8AF4
% ZED:0021ED0000072729,8C7C
% TO AVOID INTERSECTIONS $ USED INSTEAD :

function: click 
play click.wav
  if near Button1 then Button1 lights, 
   S=read('str:ATI'), sendmessage,  else
  if near Button2 then Button2 lights, 
   S=read('str:AT+SN'), sendmessage, else
  if near Button3 then Button3 lights, 
   S=read('str:ATREMS$8C7C,1F?') 
   sendmessage, I=N-44, else
  if near Button4 then Button4 lights, 
   S=read('str:ATREMS$8C7C,22?')
   sendmessage, I=N-44, else
  if near Button5 then Button5 lights, 
   % S=read('str:ATREMS$8C7C,15=00022600')
   S=read('str:ATREMS$8C7C,182=1'), sendmessage
   S=read('str:ATREMS$8C7C,183=1'), sendmessage
end, end, end, end, end

function: timer 1
close timer support, 
s=read('com'), if s>0, I=I+1, if I>N, I=1, end, R(I)=s, end 
if Z>0, T=T+1, if T=100, T=0,   
S=read('str:ATREMS$8C7C,22?'), sendmessage, I=N-44 
end end
open timer support

function: lights
subject Lamp paints red. pause 0.2
subject Lamp paints green.

function: sendmessage
close timer support, play click.wav
S=[S;13], for i=1:size(S) do, e=write(S(i),'com'), end, 
I=0, R=one(N), open timer support

function: activatedata
S=read('str:ATREMS$8C7C,33=0004'), sendmessage 
% S=read('str:ATREMS$8C7C,34=8110'), sendmessage
 
function: stopdata
S=read('str:ATREMS$8C7C,33=0000'), sendmessage 
% S=read('str:ATREMS$8C7C,34=0000'), sendmessage

function: getREAD
D=read('str:SREAD'), n=size(D)
F=1, for i=1:n, if D(i)<>P(i), F=0, end, end
if F=1, if J>38, g=0, C=P(35:38), 
% C=? C=P(24:27),  C=P(29:32), C=P(34:37)  
 for j=1:4, c=C(j), 
 if c>58, c=c-55, else, c=c-48, end, C(j)=c, g=g*16+c, end 
 if J<>K, 
   if K=0, G=g, else, G=[G;g], end, K=J 
   G=??, % [C;1200-g]=?,   
 end
end, end

function: getDATA
D=read('str:SDATA'), n=size(D)
F=1, for i=1:n, if D(i)<>P(i), F=0, end, end
if F=1, g=0, C=P(29:32), C=? % C=P(24:27),  C=P(29:32), C=P(34:37)  
 for j=1:4, c=C(j), 
 if c>58, c=c-55, else, c=c-48, end, C(j)=c, g=g*16+c, end 
 if J<>K, g=1200-g, 
   if K=0, G=g, else, G=[G;g], end, K=J 
   G=??, % [C;1200-g]=?,   
 end
end 

 admin

СЕНСОРНЫЕ СЕТИ

Примеры сейчас в веточке искусственная кожа. Разговоры о них - с начала века. См. также Jennic комплекс | скупка | Техас Температурная сеть | [2] | Мешлогик комплекс

Адрес поставок ETRX: EFO | WLESS | ZigBee-модули | ETRX-модули
Политехническая 21, офис 331 т. (812) 327-86-54

СЕНСОРНАЯ ТЕМАТИКА: ETRX357

Сергей Солодунов sys@efo.ru
Отладочный набор для модулей ETRX3: ETRX3DVKA357

Офисный телефон 327-86-54. инженер по тех. поддержке ZigBee.
адрес - Политехническая, 21, комната 330.
Это корпус факультета технической кибернетики
Политехнического университета
Вход в корпус осуществляется по пропускам. Сказать, что в ЭФО.
Возможно, попросят показать паспорт. На пл. Мужества.
По выходе сразу направо, метров 300

EFO Ltd.RUSSIA 194021 St.-Petersburg,
Politechnicheskaia str.-21
ph. +7(812)327-8654 fax +7(812)320-1819
Татьяна Кривченко tkr@efo.ru
E-Mail: Http: www.wless.ru, www.efo.ru



ПОЯВИЛИСЬ БЕСПРОВОДНЫЕ ПОГОДНЫЕ ДАТЧИКИ

Цифровая метеостанция, беспроводная передача данных на 100м (от датчиков на USB-устройство, подключенное к ПК)



ОБСУЖДАЕМ ФИТОМОНИТОРИНГ

Концепт софта 24-го наблюдения, с выходом через радиоканал на внешний компьютер управления.



СЕНСОРНЫЕ СЕТИ: КОЖА КОМПЬЮТЕРОВ

Не надо забывать, у России есть мировой приоритет. Другое дело, куда мы Павла Александровича отправили. Угораздило его накануне войны испытывать датчик в Германии. Остальное понятно.



Изобретатель радио-датчика температуры, влажности, и т.п.,
профессор Молчанов Павел Александрович

СТАТЬЯ, ПОСВЯЩЕННАЯ ПАВЛУ АЛЕКСАНДРОВИЧУ

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



Rambler's Top100