www.open-tager.ru

открытый лазертаг форум
Текущее время: 26 апр 2024, 16:50

Часовой пояс: UTC + 3 часа [ Летнее время ]


Реклама

Правила форума


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



Начать новую тему Ответить на тему  [ Сообщений: 169 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9, 10, 11 ... 17  След.
Автор Сообщение
 Заголовок сообщения: Re: Умный датчик. Smart sensor.
СообщениеДобавлено: 03 янв 2017, 11:14 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Если для отладки нужен серийный порт, можно взять STM32F042F6P - c USB на борту в таком же корпусе.
Да и оперативы и флеша там вдвое больше.
Таймеров больше.
И прошивку по USB менять наверно можно штатными средствами - USB DFU bootloader (нужно уточнить).
http://www.bdtic.com/DownLoad/ST/AN3156.pdf
http://www.documan.net/d/AN3156-USB-DFU ... loader.pdf

STM32 загрузка программ через USB DFU bootloader
https://www.youtube.com/watch?v=1SUDkR9f4sI


Вложения:
DFU_dev_list.jpg
DFU_dev_list.jpg [ 67.34 KiB | Просмотров: 7851 ]
USB_boot.jpg
USB_boot.jpg [ 45.37 KiB | Просмотров: 7851 ]

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Умный датчик. Smart sensor.
СообщениеДобавлено: 03 янв 2017, 12:55 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Вот тут
https://libraries.io/github/devanlai/dap42
пишут
Цитата:
Can initiate the on-chip DFuSe bootloader from user code.
Because the STM32F042 enables the DFU bootloader when it hasn't been flashed and the dap42 firmware supports launching the bootloader from user code, it is possible to install or upgrade the dap42 firmware dfu-util without ever needing to use the bootloader pin or an external debugger.


Я правильно понял - если камешек не прошит, DFU-bootloader стартует автоматически?
То то я не увидел у него пина Boot0 ... :?
И запустить DFU-bootloader можно из прошивки.
Камешек мне нравится, если не Смарт сенсор, то Аскета 4 на нём запилю. ;) 8-)


Вложения:
pinout.jpg
pinout.jpg [ 39.18 KiB | Просмотров: 7843 ]

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Последний раз редактировалось Pingvin 03 янв 2017, 13:17, всего редактировалось 1 раз.
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Умный датчик. Smart sensor.
СообщениеДобавлено: 03 янв 2017, 13:10 
Не в сети
Старожил

Зарегистрирован: 18 мар 2015, 13:19
Сообщений: 574
Откуда: Нижний Новгород
Pacifist писал(а):
ИМХО лучше не создавать устройства, в которых потом приходится думать "а не совпадёт ли команда с адресом устройства" и т.д. Потому что мало ли... Вы пока полагаетесь на быструю передачу сообщений с известной длинной и достатоно большим интервалом между ними.

Pacifist писал(а):
Помните гипотезу про печатные машинки, обезьян и "войну и мир" ? :)

Давайте оценим количественно. Немного элементарного тервера и основ информатики:

Допустим, у нас в пакете 1 байт контрольной суммы. Пусть вероятность искажения пакета очень большая - каждый десятый пакет исказится ровно на 1 байт. Это с бо-ольшим запасом. Пусть в игрока прилетает 1 выстрел в 30 секунд в среднем во время игры. Тогда вероятность приема не правильного пакета (что контрольная сумма случайно оказалась верной) будет 1/2560. Тогда матожидание времени, через которое это произойдет, составит примерно 21 час. Сутки игры, и примется неверный пакет.

В моем случае, по-сути, типа-контрольная-сумма (адрес и длина) - это 3 байта. Давайте считать, что искажается (меняется длина или байты длины и адреса) каждый второй пакет. Пусть игроки стреляют (и попадают) каждую секудну! Вероятность приема плохого пакета будет 1/2^25. Матожидание времени - 388 суток (!) непрерывного ведения огня! Гораздо раньше произойдет любое другое событие. В реальных условиях крики "читер" возможны не чаще, чем раз в 100 лет.

Вероятность изменения пакета есть всегда. Могут измениться данные в base64. Может самопроизвольно появиться стоповый байт. У всех этих событий есть вероятность и среднее время, через которое такое события случается. В любых каналах связи достаточная надежность достигается увеличением длины контрольной суммы. Например, если сделать её длиной в 16 байт, то даже если каждый атом на Земле превратится в компьютер и будет заниматься подбором пакета 1000 раз в секунду, коллизий не произойдет за несколько лет! В реальности редко делают больше 4 байт дажде в сетях с гигабитным трафиком. Для протокола TCP, например, контрольная сумма составляет всего 16 бит. И "ни единого разрыва" :)

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

Вывод:

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


Последний раз редактировалось Alexies 03 янв 2017, 14:51, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Умный датчик. Smart sensor.
СообщениеДобавлено: 03 янв 2017, 13:14 
Не в сети
Старожил

Зарегистрирован: 18 мар 2015, 13:19
Сообщений: 574
Откуда: Нижний Новгород
Pingvin писал(а):
Если для отладки нужен серийный порт, можно взять STM32F042F6P - c USB на борту в таком же корпусе.
Да и оперативы и флеша там вдвое больше.
Таймеров больше.
И прошивку по USB менять наверно можно штатными средствами - USB DFU bootloader (нужно уточнить).

Цена в 2 раза больше, 100 руб за чип примрено.
Если делать что-то большее, чем датчик - то имеет смысл. Но пока не вижу проблем с STM32F030. Отладка по тому же проводу, что и передача данных - дело не хитрое, у меня уже все работает.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Умный датчик. Smart sensor.
СообщениеДобавлено: 03 янв 2017, 14:31 
Не в сети
Старожил

Зарегистрирован: 18 мар 2015, 13:19
Сообщений: 574
Откуда: Нижний Новгород
В качестве контрольной суммы предлагаю все-таки выбрать CRC8, поскольку для пакетов до 50-100 байт рекомендуется использовать его, CRC16 избыточно, а всякие XOR-ы - не серьезно.
Тогда исправленный вариант выглядит так:
Код:
typedef uint16_t SSP_Address;
typedef uint16_t SSP_Command;
typedef uint8_t SSP_Argument_Size;
typedef uint8_t SSP_Checksum;

#pragma pack(push, 1)

// Package from master to sensor
typedef struct {
   SSP_Checksum crc8;
   SSP_Argument_Size size;
   SSP_Address target;
   SSP_Command command;
} SSP_Header;
#pragma pack(pop)

uint8_t ssp_is_package_valid(uint8_t* package, uint16_t size)
{
   if (size < sizeof(SSP_Header))
      return 0;

   // Now we can read header
   SSP_Header* header = (SSP_Header*) package;

   if (size != sizeof(SSP_Header) + header->size)
      return 0;

   // Now we can check CRC
   uint8_t crc8 = ssp_crc8(
         (uint8_t*) (package + sizeof(SSP_Checksum)),
         size - sizeof(SSP_Checksum)
   );
   if (crc8 != header->crc8)
      return 0;
   return 1;
}

/*
  Name  : CRC-8
  Poly  : 0x31    x^8 + x^5 + x^4 + 1
  Init  : 0xFF
  Revert: false
  XorOut: 0x00
  Check : 0xF7 ("123456789")
  MaxLen: 15 bytes (127 bits) - discovering errors of 1, 2, 3 and 2n+1 degree
*/
uint8_t ssp_crc8(uint8_t *pcBlock, uint16_t len)
{
    uint8_t crc = 0xFF;
    uint16_t i;
    while (len--)
    {
        crc ^= *pcBlock++;
        for (i = 0; i < 8; i++)
            crc = crc & 0x80 ? (crc << 1) ^ 0x31 : crc << 1;
    }
    return crc;
}

Есть ли другие предложения?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Умный датчик. Smart sensor.
СообщениеДобавлено: 03 янв 2017, 16:49 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 27 ноя 2011, 00:22
Сообщений: 1569
Откуда: Україна
Base64 предлагал скорее для чёткого разделения "слипшихся" пакетов.

Предложений больше нет, интересны нюансы. Как часто планируете проводить опрос датчиков и как будете их синхронизировать чтоб понять что это одна и та же посылка ИК? У вас поле адрес 16-битное, какое реальное количество устройств на одной шине будет?

_________________
Нет предела совершенству, но ресурсы заканчиваются быстро.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Умный датчик. Smart sensor.
СообщениеДобавлено: 04 янв 2017, 20:53 
Не в сети
Старожил

Зарегистрирован: 18 мар 2015, 13:19
Сообщений: 574
Откуда: Нижний Новгород
Краткие новости этого маленького проекта:
Заработало плавное управление диодами. Повязка быстро загружает "программу" в датчик, датчик её медленно исполняет. "Программа" - это схема мигания. С какими интервалами какие состояния светодиодов и вибромотора должны сменять друг друга. Смена состояний светодиода плавная (хотя можно подготовить "программу" и для резкой). Возможности открываются широкие. Код логики, разумеется, не завязан на конкретную переферию, можно приделать как простые, так и умные диоды, разницы нет.

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

По поводу адресации - напишу чуть позже пост.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Умный датчик. Smart sensor.
СообщениеДобавлено: 05 янв 2017, 03:02 
Не в сети
Старожил

Зарегистрирован: 18 мар 2015, 13:19
Сообщений: 574
Откуда: Нижний Новгород
Итак, по поводу адресов, вот основные требования, которые должны к ним предъявляться, на мой взгляд:

1. Каждый датчик должен иметь уникальный адрес, это очевидно: иначе на линии будут коллизии. Два датчика буду пытаться ответить одовременно, и даже при идентичных ответах тайминги не сойдутся.

2. Пользователь должен иметь возможность сопоставить определенным датчикам определенные параметры в настройках повязки: например, коффициент урона. Это нужно, чтобы организовать зоны поражения.

3. Датчики, для которых пользователь не задал никаких особых параметров, должны работать по-умолчанию. То есть, если к повязке подключается новый датчик с неизвестным адресом, он должен работать корректно. Другими словами, нужен механизм автоматического определения адресов датчиков. В самом простом варианте - юзер взял мозги повязки, достал из коробки наугад 5 датчиков, подключил, всё заработало без правки конфигурации и т.п.

4. Может ещё что-то?..

Как это все реализовывать:
По п. 1:
Тут все легко. Если адрес - это 2 байта, сгенерированных случайно при прошивке (или взятых из id чипа), и если к повязке подключено 10 датчиков, вероятность коллизии будет примерно 1/1460. То есть каждые полторы тысячи собранных комплектов может возникнуть коллизия, которая исправляется просто заменой части датчиков на какие-то другие. Можно увеличить адрес до 3 байт, тогда коллизия будет возникать в среднем каждые 370.000 комплектов, то есть практически никогда. Если датчиков 20, а не 10, то числа изменятся где-то на пол порядка. Ниже приведен график зависимости числа комплектов, среди которых в среднем у одного будет коллизия, в зависимости от битности адреса датчика при условии, что число подключенных датчиков равно 10:
Вложение:
Коллизии2.png
Коллизии2.png [ 29.78 KiB | Просмотров: 7792 ]


Кому интересно, откуда это, вот тривиальный скрипт на Питоне, который я написал, чтобы построить такой график:
Вложение:
Комментарий к файлу: Скрипт расчета вероятности коллизии адреса
address-collision-prob.py.zip [532 байт]
Скачиваний: 398


По п. 2:
Тут несколько вариантов:
- Можно адрес датчика писать на самом датчике. И пользователь в конфиг-файле явно укажет: доля такого-то учитывать, например, половину урона.
- Можно сделать ИК-пульт, который будет присваивать датчикам номер зоны поражения, по которому потом пользователь в конфиге что-то укажет. Но ИК-пульт - это лишнее устройство.
- Можно сделать такое конфигурирование через Андроид, чтобы на телефоне выводился список адресов подключенных к повязке датчиков, а по нажатии на адрес датчик подсвечивался, и можно было задать его параметры. Это сложнее, но вполне осущетвимо, учитывая, что в Caustic блютус будет в каждой повязке и управление с телефона прекрасно работает.
Разумнее для начала ограничиться первым вариантом. Всё-таки датчики меняются, или переставляются с жилета на голову крайне редко.
Но это уже не вопрос протокола, а скорее детали реализации.

По п. 3:
Вот тут самое интересное. Протокол должен предусматривать механизм получения повязкой адресов всех подключенных сенсоров. Просто перебрать все адреса не выйдет: их слишком много даже в двухбайтном пространстве, на это уйдут часы при скорости порта 112000 бит/с. Нужно использовать стандартные механизмы, которые применяются при коммуникации через общую физическую среду (как в WiFi, например). Упрощенно, это выглядит так: повязка попросит все датчики представиться. Датчики через случайные промежутки времени будут посылать сообщения со своими адресами. Рано или поздно получится принять пакет от какого-то датчика без коллизий. Такому датчику тут же посылается команда молчать. Если организовать процесс правильно, то он займет не более 20-30 итераций для комплекта из 10 датчиков, и не более 10 итераций для 4 датчиков.

У меня есть черновик этой процедуры с довольно нетривиальным алгоритмом. Как испытаю, расскажу.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Умный датчик. Smart sensor.
СообщениеДобавлено: 05 янв 2017, 13:51 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Зачем нам двухбайтовое адресное пространство?
Хватит и однобайтового.
Физически шина просто может не потянуть большое количество.
Вряд ли перед каждой игрой будут датчики переставлять.
Поэтому один раз запустить процедуру, которая опросит 255 адресов и расставить все "по местам" - ничего страшного.
Зато потом ничего опрашивать нет надобности.

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Умный датчик. Smart sensor.
СообщениеДобавлено: 05 янв 2017, 14:20 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Нужна кнопочка (перемычка) на каждом датчике.
Тогда процедура инициализации может выглядеть так:
На повязке запускаем процедуру настройки сенсоров - может нажатием кнопки, может ИК командой.
Повязка "молвит" (через динамик или пикалку) - какой датчик будет "зоной поражения 1"?
Нажимаем кнопочку на этом датчике, он шлет повязке свой UID.
Кто будет "зоной поражения 2"?
Нажимаем кнопочку на следующем датчике и т.д.
Можно и без кнопочек обойтись - тоже спец. ИК пакет в датчик выстреливать, то его могут и соседние датчики отловить.

Или подключать по очереди - номера зон в порядке подключения - тоже несложно реализовать.

Включили повязку, она шлет запрос - "новенькие есть"?
Как только подключаем первый датчик он ответит - есть, это я с таким то ИД.
Повязка ему - эй, ты, с таким то ИД будешь "зоной 1".
Наш "новенький" - подтверждаю, я с ИД таким то буду "зоной 1".
Потом снова запрос - новенькие есть?
Наш друг уже молчит, ибо не новенький уже.
На горячую или холодную цепляем следующий датчик, уже он ответит - я новенький, мой ИД такой-то.
И так далее...

Далее, уже в игре - нет смысла слать UID каждый раз, хватит номера зоны.

Хотя - этот вариант почти то же самое
Цитата:
Упрощенно, это выглядит так: повязка попросит все датчики представиться. Датчики через случайные промежутки времени будут посылать сообщения со своими адресами. Рано или поздно получится принять пакет от какого-то датчика без коллизий. Такому датчику тут же посылается команда молчать. Если организовать процесс правильно, то он займет не более 20-30 итераций для комплекта из 10 датчиков, и не более 10 итераций для 4 датчиков.


Но он не решает проблемы назначения зон!
Мы получим только список ИД без привязки к физическому расположению датчиков (зонам).

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Последний раз редактировалось Pingvin 05 янв 2017, 15:05, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 169 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9, 10, 11 ... 17  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB