Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите разобраться в программировании Atmega и at86rf230
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Rf & Microwave Design
ramondekkers
atrf86230 - это просто трансивер или в него встроен микроконтроллер ?
Существует ли готовые библиотеки для программирования Atmega16 + atrf86230 ?

BitCloud это те самые библиотеки для моего случая, или они предназначены только для готовых Zigbee модулей (контроллер трансивер в одной сборке) ?
ataradov
Цитата(ramondekkers @ Sep 15 2009, 19:23) *
atrf86230 - это просто трансивер или в него встроен микроконтроллер ?

Просто трансивер, причем устаревший. 231 современный.

Цитата(ramondekkers @ Sep 15 2009, 19:23) *
Существует ли готовые библиотеки для программирования Atmega16 + atrf86230 ?

Смотря что нужно. Просто передать что-то в эфир можно программой из 30 строчек.
Более сложные вещи - есть на сайте атмела примеры.

Цитата(ramondekkers @ Sep 15 2009, 19:23) *
BitCloud это те самые библиотеки для моего случая, или они предназначены только для готовых Zigbee модулей (контроллер трансивер в одной сборке) ?


BitCloud - это реализация ZigBee PRO стека. Но он занимает 95к+, так что в мегу16 не влезет ни при каких обстоятельствах. Работать может и просто на паре контроллер+рф, HAL открытый, сам стек закрытый.
ramondekkers
Цитата(Taradov Alexander @ Sep 15 2009, 20:19) *
Просто трансивер, причем устаревший. 231 современный.

Смотря что нужно. Просто передать что-то в эфир можно программой из 30 строчек.
Более сложные вещи - есть на сайте атмела примеры.


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


Цитата
BitCloud - это реализация ZigBee PRO стека. Но он занимает 95к+, так что в мегу16 не влезет ни при каких обстоятельствах. Работать может и просто на паре контроллер+рф, HAL открытый, сам стек закрытый.


У меня atmega16-16pu 128 кб Flash.
Таким образом BitCloud точно должен подойти для моей работы ?
ataradov
Цитата(ramondekkers @ Sep 15 2009, 21:45) *
Пока мне нужны только координатор и КУ, но в дальнейшем понадобится и маршрутизатор. В общем, в любом случае мне нужен Zigbee стек.


Тогда особого выбора у Вас нет (если останавливать свой выбор на продукции Atmel), писать стек самостоятельно практически не реально. BitCloud - это несколько лет работы комманды разработчиков.

Цитата(ramondekkers @ Sep 15 2009, 21:45) *
У меня atmega16-16pu 128 кб Flash.
Таким образом BitCloud точно должен подойти для моей работы ?


atmega16 имеет 16кб флеша (название не случайно содержит 16). Библиотеки стека распространяются под atmega1281 и at86rf230 (содержимое модуля ZigBit).

Сам по себе BitCloud может быть пересобран под любое сочетание uC+RF, но для этого очевидно нужно покупать большую их партию. Ради 3-х устройств никто заморачиваться не будет.

Так что самый простой вариант для мелкой серии - это mega1281+at86rf230B (именно B, других сейчас не выпускают, но нарваться можно). Еще лучше и проще просто использовать ZigBit. Модули под маркой Atmel должны появиться скоро, для разработки можно использовать модули Meshnetics, которые еще можно достать.


А вообще опишите задачу, возможно ZigBee Вам и не подойдет.
ramondekkers
Цитата(Taradov Alexander @ Sep 15 2009, 21:58) *
Тогда особого выбора у Вас нет (если останавливать свой выбор на продукции Atmel), писать стек самостоятельно практически не реально. BitCloud - это несколько лет работы комманды разработчиков.



atmega16 имеет 16кб флеша (название не случайно содержит 16). Библиотеки стека распространяются под atmega1281 и at86rf230 (содержимое модуля ZigBit).

Сам по себе BitCloud может быть пересобран под любое сочетание uC+RF, но для этого очевидно нужно покупать большую их партию. Ради 3-х устройств никто заморачиваться не будет.

Так что самый простой вариант для мелкой серии - это mega1281+at86rf230B (именно B, других сейчас не выпускают, но нарваться можно). Еще лучше и проще просто использовать ZigBit. Модули под маркой Atmel должны появиться скоро, для разработки можно использовать модули Meshnetics, которые еще можно достать.


А вообще опишите задачу, возможно ZigBee Вам и не подойдет.


Для курсовой работы , в дальнейшем для дипломной.
К конечным устройствам будут подключены датчики температуры. КУ должны передать информацию из этих датчиков к координатору , который будет подключен к компьютеру. Задача состоит в мониторинге температуры.
Хорошо, а можно at86rf231 использовать ?
ataradov
Цитата(ramondekkers @ Sep 15 2009, 22:06) *
Для курсовой работы , в дальнейшем для дипломной.
К конечным устройствам будут подключены датчики температуры. КУ должны передать информацию из этих датчиков к координатору , который будет подключен к компьютеру. Задача состоит в мониторинге температуры.
Хорошо, а можно at86rf231 использовать ?


Как много этих датчиков и как часто они должны передавать?

Для 231 готовых библиотек нет. Для учебы лучше остановиться на том, для чего есть готовые библиотеки. Я бы рекомендовал mega1281 + rf230, а еще лучше модули ZigBit. В особенности те, что с чип-антенами, намучаетесь с разводкой ВЧ части. Хотя смотря что изучать smile.gif

ZigBee - это обязательный элемент? Можно изобрести что-то свое, мне кажется в контексте обучения это лучше смотрится.
ramondekkers
Цитата(Taradov Alexander @ Sep 15 2009, 22:18) *
Для 231 готовых библиотек нет. Для учебы лучше остановиться на том, для чего есть готовые библиотеки. Я бы рекомендовал mega1281 + rf230, а еще лучше модули ZigBit. В особенности те, что с чип-антенами, намучаетесь с разводкой ВЧ части. Хотя смотря что изучать smile.gif

ZigBee - это обязательный элемент? Можно изобрести что-то свое, мне кажется в контексте обучения это лучше смотрится.


Готовый модуль - это слишком халявно для моего диплома smile.gif , как никак специальность со схемотехникой связана.

Цитата
Как много этих датчиков и как часто они должны передавать?


Датчиков по предварительным подсчетам около 100 штук. Насчет как часто не могу сказать, но они должны передавать динамику изменения температуры.
Т.е. если температура изменяется он передает, если нет , то молчит.

Цитата(Taradov Alexander @ Sep 15 2009, 22:18) *
ZigBee - это обязательный элемент? Можно изобрести что-то свое, мне кажется в контексте обучения это лучше смотрится.


Что - то свое ? Я думаю это будет еще сложнее, чем использовать готовые библиотеки.
Основной упор в моей задаче делается не на программирование, а на технологическую - конструкторскую часть. Расчет устройства на тепло, механические воздействия, электромагнетизм, надежность.

Что значит "HAL открытый, сам стек закрытый." ? Исходники закрытые ?
ataradov
Цитата(ramondekkers @ Sep 15 2009, 22:31) *
Готовый модуль - это слишком халявно для моего диплома smile.gif , как никак специальность со схемотехникой связана.

Ну тогда можно повторить схему ZigBit-а. В принципе ничего сложного. Официально ее нет, но есть проекты открытых стеков под ZigBit, там можно глянуть.

Цитата(ramondekkers @ Sep 15 2009, 22:31) *
Датчиков по предварительным подсчетам около 100 штук. Насчет как часто не могу сказать, но они должны передавать динамику изменения температуры.
Т.е. если температура изменяется он передает, если нет , то молчит.


100 штук на 1 координатор - это не реально, на координаторе просто не хватит места для хранения таблиц. На сеть из 100 устройств должно приходиться 15-20 маршрутизаторов.

Практика конкретно для BitCloud-а показывает, что для сети из 100+ узлов миниальный интервал отправки данных должен составлять около 20-30 секунд для одного устройства. Иначе они все не влезут в эфир и начинается каша.




Цитата(ramondekkers @ Sep 15 2009, 22:35) *
Что - то свое ? Я думаю это будет еще сложнее, чем использовать готовые библиотеки.
Основной упор в моей задаче делается не на программирование, а на технологическую - конструкторскую часть. Расчет устройства на тепло, механические воздействия, электромагнетизм, надежность.
Что значит "HAL открытый, сам стек закрытый." ? Исходники закрытые ?


Да, исходников BitCloud-а нет, есть исходники HAL-a (уровень абстрагирования от оборудования). Так что всегда можно что-то поправить для конкретного варианта разводки, но если не хочется возиться с ПО, то лучше придерживаться того, что сразу заработает.

BitCloud еще есть для оценочных плат Raven и RzUSBStick. У них открытая схемотехника. Лучше в своем устройстве повторить ее. Ну и не помешает сами эти наборы иметь, а то может быть очень сложно.
ramondekkers
Цитата
100 штук на 1 координатор - это не реально, на координаторе просто не хватит места для хранения таблиц. На сеть из 100 устройств должно приходиться 15-20 маршрутизаторов.


А если попробовать добавить внешний SRAM ?


Цитата(Taradov Alexander @ Sep 15 2009, 22:38) *
Ну тогда можно повторить схему ZigBit-а. В принципе ничего сложного. Официально ее нет, но есть проекты открытых стеков под ZigBit, там можно глянуть.

Практика конкретно для BitCloud-а показывает, что для сети из 100+ узлов миниальный интервал отправки данных должен составлять около 20-30 секунд для одного устройства. Иначе они все не влезут в эфир и начинается каша.


Хорошо я учту. В принципе, 20- 30 секунд хватит за глаза.
ataradov
Цитата(ramondekkers @ Sep 15 2009, 22:47) *
А если попробовать добавить внешний SRAM ?


При закрытых библиотеках? Нереально. Да и не нужно, не расчитан ZigBee на такой вариант. Если ZigBee не важен, то есть RUM (Router Under MAC) - это реализация простого сетевого протокола над MAC-ом. Топология - только звезда, предельно простой. Может на нем и получится 100. Но тогда они все должны быть в радиусе 100 м (а в жизни - как антену сделаете, может и меньше).

Цитата(ramondekkers @ Sep 15 2009, 22:47) *
Хорошо я учту. В принципе, 20- 30 секунд хватит за глаза.


Но вообще говоря сети из большого числа устройств - это довольно не просто. Как минимум я бы рекомендовал иметь сниффер. Без него повеситься можно пока все заработает как нужно.
ramondekkers
Благодарю, за помощь. Пожалуй, дальше я самостоятельно справлюсь.
codex
Чем 231 лучше 230? слышал, в новых на аппаратном уровне реализовано 128-битное шифрование
ataradov
Цитата(codex @ Oct 23 2009, 23:28) *
Чем 231 лучше 230? слышал, в новых на аппаратном уровне реализовано 128-битное шифрование


Да, шифрование, генератор случайных чисел настоящий. Плюс исправлены баги. Не знаю как там с доставабельностью и ценой, но работать с 231 гораздо приятнее.
mk1983
Цитата(Taradov Alexander @ Sep 15 2009, 22:55) *
Но вообще говоря сети из большого числа устройств - это довольно не просто. Как минимум я бы рекомендовал иметь сниффер. Без него повеситься можно пока все заработает как нужно.


А где взять снифер для ЗигБи ? Или как его построить??

Вот заодно хотел бы спросить:
Собрал два устройства на ZigBit Amp, затем кривыми своими ручонками подправил програмку PingPong (которая в примерах во фреймоврке). Запускается все отлично, работает, вроде как проблем нет.
А штука такая получается: запускаю оба, всё хорошо, затем беру и одно устройство погружаю в железную коробочку с воздухом и закрываю железной крышечкой, ну понятно, что связь сразу кирдык.
Ждем 2 сек , вытаскиваем из коробочки...
и так 3 - 5 раз.
Потом бац! А LQI и RSSI не меряется - все по 00.!!

Начинаю потом смотреть: а в координаторе NeibAmount.routersAmount==0x00 !! ( а был 0x01 !! )
Что творится в роутере не определял.

Как мне теперь эту ситацию обнаружить, и как исправить - вот собственно и вопрос??

И сделать так, чтоб LQI всётаки измерялся?
ataradov
Цитата(mk1983 @ Jan 22 2010, 17:58) *
А где взять снифер для ЗигБи ? Или как его построить??

Это довольно тяжелый вопрос. До недавнего времени существовала компания Daintree Networks, окторая делала снифферы, но как у них сейчас дела и можно-ли еще купит что-то у них я не знаю.

Другой вариант - плата от Chipcon-а (cc2400eb), но по-моему их сейчас тоже не купить.

Есть вот такое ATAVRRZ541 AVR Z-Link 2.4 GHz Packet Sniffer Kit. Софт от daintree в комплекте.

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



Цитата(mk1983 @ Jan 22 2010, 17:58) *
Как мне теперь эту ситацию обнаружить, и как исправить - вот собственно и вопрос??
И сделать так, чтоб LQI всётаки измерялся?


При возникновении непонятных ситуаций в сети в функцию ZDO_MgmtNwkUpdateNotf() поднимаются разные статусы, их нужно анализировать и реагировать на них. В пингпонге это не делается для простооты. Вообще нужно смтореть на состояние машины состояний приложения, чтобы сказать что-то конкретное. В любом случае при потере сети нужно некоторое время на восстановление связи.
mk1983
По ходу своих разработак наткнулся на такую проблему: laughing.gif
Не приходят уведомления в ZDO_MgmtNwkUpdateNotf о том что координатор или роутер недоступен.
Расшифровка:
Координатор:
ставлю брейкпоинт в точку if(...)....
Код
void ZDO_MgmtNwkUpdateNotf(ZDO_MgmtNwkUpdateNotf_t * nwkParams) {
  if (ZDO_NETWORK_LOST_STATUS==nwkParams->status) {   // Network is lost/left
    startFlashTimer();
    appState=APP_NETWORK_STARTING_STATE;              // Switch application state
    SYS_PostTask(APL_TASK_ID);
  }
}

И жду чтож такое получится.
Перегружаю программно девайс, а в брейкпоинт не заходит ваще никогда! Ни при установке сети, ни при потери связи (координатор в коропку жилезную засовываю)
При этом смотрю раз в секунду (по таймеру) чтож у меня с соседями:
Код
static void RssiLqiTimer(void) {
   ZDO_GetNeibAmount_t NeibAmount;
   ZDO_GetNeibAmount(&NeibAmount);

   ZDO_NwkStatus_t NwkSt;
   NwkSt=ZDO_GetNwkStatus();

   NodeAddr_t parentAddr;
   ZDO_GetParentAddr(&parentAddr);

   HAL_StartAppTimer(&delayRssiLqiTimer);
   if(NeibAmount.routersAmount==0x00) {
      appToggleLed(NETWORK_LED);
   }
}


А с соседями все нормально:
нетворк статус NwkSt = ZDO_IN_NETWORK_STATUS
в parentAddr - всякая ерунда (из чего я делаю вывод о том что координатор и роутер не родственники)
NeibAmount.routerAmount = 0x01; (получается он координатора сюда считает -в роутеры)
NeibAmount.childrenAmount = 0x00;

Как только связь рвется:
NeibAmount.routerAmount = 0x00; (что вообщем то верно. логично. и у меня лампочка моргать начинает)

Как только связь снова восстанавливается:
NeibAmount.routerAmount = 0x01; (не сразу , ну , секунду - две)

crying.gif
А загвоздка в том, что в ZDO_MgmtNwkUpdateNotf нифига не приходит (см выше)

Примерно таже ситуевина на координаторе.
Тока там хотяб установка сети обозначатеся в ZDO_MgmtNwkUpdateNotf точно не помню с каким статусом.

А вот исчезновение и появление роутера не обозначается.

Ну а вообще сеть налаживается сама, проблем нет biggrin.gif .
ataradov
По порядку:

1. ZDO_NETWORK_LOST_STATUS - означает, что сеть потеряна (были проблемы при связи с родителем), но стек сам пытается ее восстановить и по этому статусу делать ничего не нужно.

2. ZDO_NETWORK_LEFT_STATUS - окончательно вышли из сети, сам стек по этому поводу уже ничего делать не будет.

3. События отностся только к самому устройству, от того, что какой-то роутер потерял связь они возникать не будут.

3. Эти события на координаторе воспроизвести довольно трудно (единственный способ - это с дуругого устройства в сети сказать координатору, чтобы вышел из сети).

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

5. RSSI и LQI обновляются только при отправке данных, так что чтобы иметь постоянно новую информацию нужно отправлять данные постоянно.

6. Строгое отношение родитель-ребенок существует только для роутера/координатора и end-device-a (потому что для того, чтобы забрать данные ED должен опрашивать кого-то конкретного), координатор-роутер в принципе просто параллельно существуют и никак друг к друго не относятся.
mk1983
Вопросик: laughing.gif

Если используется статическая адресация:
Код
         bool useStatAddr=true;
         CS_WriteParameter(CS_NWK_UNIQUE_ADDR_ID,&useStatAddr);

на этапе инициализации сети при этом, используются ли расширенные адреса (CS_EXT_PANID) в роутере?

или он, типа, уже всё знает?

Ну, и, главный вопросик:
Пока капался в инструкциях видел такой параметр "максимальное количество переданных пакетов без подтверждения"
а где видел и правильно ли я его понял не могу уточнить . потому как найти где это видел не могу. Ткните носом если кто знает.
crying.gif
ataradov
Цитата(mk1983 @ Jan 29 2010, 07:48) *
на этапе инициализации сети при этом, используются ли расширенные адреса (CS_EXT_PANID) в роутере?

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

Цитата(mk1983 @ Jan 29 2010, 07:48) *
Ну, и, главный вопросик:Пока капался в инструкциях видел такой параметр "максимальное количество переданных пакетов без подтверждения" а где видел и правильно ли я его понял не могу уточнить . потому как найти где это видел не могу. Ткните носом если кто знает.


Не знаю где это есть в документации, но вреальности без подтверждения это будет порядка 130 пакетов в секунду, с подтверждением 90.
mk1983
Цитата(Taradov Alexander @ Jan 29 2010, 10:15) *
CS_EXT_PANID - это не адрес, это расширеный иднетификатор сети. Расширеные адреса используются всегда, при статической адресации короткие адреса выбираются не случайно, а берется заданный адрес. Следует помнить, что это не входит в спецификацию ZigBee.



Не знаю где это есть в документации, но вреальности без подтверждения это будет порядка 130 пакетов в секунду, с подтверждением 90.


Да нет, дело не в скорости, а в общем количестве пакетов которые могут быть переданы без подтверждения. Ну, тут пример:

1 пакет туда ->>>>>>>>>>>>>
<<<<<<<<<<<<<<- подтверждение "пакета 1 туда"
2 пакет туда ->>>>>>>>>>>>>
<<<<<<<<<<<<<<- подтверждение "пакета 2 туда"
........

или

1 пакет туда -> >>>>>>>>>>>>
2 пакет туда ->>>>>>>>>>>>>
3
...
n
<<<<<<<<<<<<<<- подтверждение "пакета 1 туда"
<<<<<<<<<<<<<<- подтверждение "пакета 2 туда"
<<<<<<<<<<<<<<- <<<<<<<<<<<<<<- 3
<<<<<<<<<<<<<<- <<<<<<<<<<<<<<- ...
<<<<<<<<<<<<<<- <<<<<<<<<<<<<<- n
Ну вот, вроде правильно. А вопрос в том , сколько может быть этих самых "n" чтоб ошибок не было?
Или такой порядок пакетов/подтверждений вообще не допустим?
ataradov
Цитата(mk1983 @ Jan 29 2010, 10:31) *
Или такой порядок пакетов/подтверждений вообще не допустим?


Не допустим. Все пакеты подтверждаются сразу после приема.
mk1983
Спасибо. Я не разумел сразу. smile.gif
mk1983
Вопрос смышленным:
вот в примере для модулей ZigBit peer2peer в нашел такие строки:

Код
static void usartBytesReceived(uint16_t bytesToRead) {
  if (APP_NETWORK_JOINED_STATE != appState)
    return;
  if ((APP_DATA_TRANSMISSION_BUSY_STATE == appDataTransmissionState)
    || (APP_DATA_TRANSMISSION_STOP_STATE == appDataTransmissionState))
    return;

  if (actualDataLength < APP_MAX_DATA_SIZE) {
    actualDataLength += (uint8_t) READ_USART(&appUsartDescriptor, appMessageBuffer.message.data + actualDataLength, APP_MAX_DATA_SIZE - actualDataLength);
  }
.......
  if (0 < actualDataLength) {
    appDataTransmissionState = APP_DATA_TRANSMISSION_READY_STATE;
    networkSendData(true);
  }
  (void)bytesToRead;    
}


А чо такое за конструкция (void)bytesToRead; ????????
чет я такой в книжках не встречал. Ну, конечно, не совсем - всё это похоже на привидение типа uint16_t к типу void , а в таком контексте это зачем, если очепятка , тада молчу.... бывает....
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.