www.open-tager.ru

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

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


Реклама

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


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



Начать новую тему Ответить на тему  [ Сообщений: 62 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.
Автор Сообщение
СообщениеДобавлено: 09 фев 2013, 21:21 
Не в сети
Аксакал форума

Зарегистрирован: 29 авг 2011, 11:08
Сообщений: 1849
вот вариант использованый мной, работает простым опросом с частотой от 2кгц(реже неработает), до 10..15КГц (быстрее нет смысла) Частота опроса фиксированная, по ней измеряются длительности импульсов пауз

Код:
    ir_state_prev = ir_state;
    ir_state = read_ir();

    if (ir_state == ir_state_prev) { // state not changed - increment counter

        if (ir_cnt < IR_CNT_MAX) ir_cnt++;

        if (ir_state && (ir_cnt >= IR_OFF_GAP)) {

         // если принят не полный код, отметить "свист пули"
      
            ir_bits_cnt = 0;
            ir_data = 0;
        }   // обнаружен GAP

    } else { // state changed

        ir_cnt_preprev = ir_cnt_prev;
        ir_cnt_prev = ir_cnt;
        ir_cnt = 0;
       
        if (ir_state) { // transition 0->1 - start bit or data bit


         if ((ir_cnt_preprev >= IR_START_PRE_MAX) &&
                (ir_cnt_prev >= IR_START_MIN) &&
                (ir_cnt_prev <= IR_START_MAX)) { // start pulse
           
             ir_data = ir_bits_cnt = 0; // clear data buffer



         } else if ((ir_cnt_preprev >= IR_SPACE_MIN)&&(ir_cnt_preprev <= IR_SPACE_MAX)) {
                if ((ir_cnt_prev >= IR_0_MIN)&&(ir_cnt_prev <= IR_0_MAX)) { // received bit 0
                    if (ir_bits_cnt < IR_BITS_MAX) {
                        ir_bits_cnt++;
                        ir_data <<= 1;


            //       по первому биту уточнить длинну пакета
                    }
                } else if ((ir_cnt_prev >= IR_1_MIN)&&(ir_cnt_prev <= IR_1_MAX)) { // received bit 1
                    if (ir_bits_cnt < IR_BITS_MAX) {
                        ir_bits_cnt++;
                        ir_data <<= 1;
                        ir_data |= 1;

                    }
                }
            }
            // store final code
            if ((ir_bits_cnt == IR_BITS_MAX)&&(ir_code == IR_CO_NONE))
         {
                ir_code = ir_data;

         } // BITS_MAX

        }
    }
}




PS. Прошивку себе уже написал ;) К сожалению пока немогу выложить исходники (писал на заказ), только кусочки :geek:

_________________
"За 2 месяца максимум можно чертёж сделать, еще за 3 фундамент." (c) Номернабис


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 09 фев 2013, 22:19 
Не в сети
Новосел
Аватар пользователя

Зарегистрирован: 07 янв 2013, 17:48
Сообщений: 68
Конкретика пошла... Пингвин, респектушки!
А теперь, шоб я усё понЯл, просьба объяснить...
"Прерывания по ИНТ" - это основное прерывание для приема пачки, а "прерывание по Таймеру" - это собственно тот самый счетчик для подсчета длительности пачки?
Если так, тады вопрос: А во время приема можно осуществлять передачу? и наоборот?
Т.о. в прерывания по ИНТУ уход при изменении сигнала, а по ТАймеру когда???


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 09 фев 2013, 22:22 
Не в сети
Новосел
Аватар пользователя

Зарегистрирован: 07 янв 2013, 17:48
Сообщений: 68
LTagKirov писал(а):
вот вариант использованый мной, работает простым опросом с частотой от 2кгц(реже неработает), до 10..15КГц (быстрее нет смысла) Частота опроса фиксированная, по ней измеряются длительности импульсов пауз

PS. Прошивку себе уже написал ;) К сожалению пока немогу выложить исходники (писал на заказ), только кусочки :geek:


И за кусочки спасибо... Не хватает коментариев в коде, чтоб однозначно понять логику алгоритма... код у вас не большой и, если не сложно, по пунктам объясните чего и зачем... ;)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 09 фев 2013, 23:41 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
KEROL писал(а):
Конкретика пошла... Пингвин, респектушки!
А теперь, шоб я усё понЯл, просьба объяснить...
"Прерывания по ИНТ" - это основное прерывание для приема пачки, а "прерывание по Таймеру" - это собственно тот самый счетчик для подсчета длительности пачки?
Если так, тады вопрос: А во время приема можно осуществлять передачу? и наоборот?
Т.о. в прерывания по ИНТУ уход при изменении сигнала, а по ТАймеру когда???


Не за что - всё это есть в репах!
Прерывание INT наступает тогда, когда меняется напряжение на выходе TSOPа.
Прерывания по таймеру происходят с частотой 72КГц (удвоенная частота несущей) и служат как для генерации несущей и отправки пакета, так и для подсчета длительности пачек и пауз между пачками.
Прием и отправка друг другу совершенно не мешают и могут выполнятья одновременно (асинхронно, так сказать).

Последнее предложение не понял. :?
Таймер тикает все время с частотой 2xF0=72КГц.

Вроде коменты в коде подробные и сам код небольшой - прогоните мысленно алгоритм, может понятней станет принцип работы.

P.S. А ещё лучше - соберите девайс и пощупайте это все на ральном железе. ;) :)

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 10 фев 2013, 00:03 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
KEROL, если не секрет - сами то чего "мутите"?

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 10 фев 2013, 07:14 
Не в сети
Новосел
Аватар пользователя

Зарегистрирован: 07 янв 2013, 17:48
Сообщений: 68
Pingvin писал(а):
KEROL, если не секрет - сами то чего "мутите"?

Оффтоп, но отвечу, ведь тут бы каждый высказался/похвалился... :D
У производителей ЛТ оборудования очень дорогие гаджеты (даже не буду приводить примеры) и чаще представляют собой "универсальное устройство", из-за своей универсальности весьма далекое от отдельного оригинального девайса. В один корпус пытаются запихать и бомбу, и точку радиации, и аптечку, и гранату, и точку доминирования...Цена такого гаджета сопоставима с ценой самосборного ствола. Позиция владельцев клубов понятна: им выгоднее покупать дополнительны стволы, т.к. каждый ствол приносит деньги, а за гаджеты клиент не доплачивает))) Позиция производителей тоже ясна: клубы берут себе в основном стволы, гаджеты берут в меньшем количестве (нафига брать к 10 стволам 6 аптечек?), а гемор с производством таких девайсов не маленький, потому и цена такая высокая...

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

Я пока делаю на ПИКах (выложу, не раньше, чем все будет готово - недоделки не буду выкладывать), на Атмегу не полезу. Пишу на АСМе. Си - в перспективе. Поэтому просто код для меня не несет смысла, а важен алгоритм. Я в коде Пингвина разберусь полюбас: Си не сложен, коментов хватает...

Изучаю STM32 и VS1053... на них может и соберусь делать начинку для ствола, но плата для HSL - это не то, на что я буду делать упор...

Большая просьба, не стоит в этой теме обсуждать девайсы от профессиональных производителей лазертага. Свои собственные наработки, думаю, можно обсудить, но без особой привязки к железу, важно понять алгоритм: Пингвин напишет на Си для Атмеги, я на АСМе для Пиков...

Над чем работаю сейчас(не всего хватает по железу):
1. Точка радиации - через предустановленные промежутки времени отнимает у игроков в радиусе поражения определенное количество жизни. Такю штуку многие производители делают. Я вместе с корпусом легко вписываюсь ( с хорошим запасом) в 500р.
2. Артефакт. У этого устройства может быть разный функционал. Но я делаю артефакт с рандомным действием. Типа артефакт-Джокер. АРтефакт заряжается несколько (до 120) секунд. Нажимаешь кнопочку - получаешь случайный эффект: восстановить 10 - 50 ХП, пополнить патроны, пополнить и ХП и Патроны, убить игрока и т.д. Потом артефакт опять заряжается... Прошивки некоторых производителей такое позволяют... Себестоимость полубас меньше 500р.
3. "Радиоактивная растительность": В углу здания (или на дереве) будет висеть хрень с несколькими отростками в виде светодиодной ленты. В "готовность" такая хроень выходит постепенно, распуская свои щапальцы-отростки (светодиоды загораются один за другим, через сдвиговый регистр). После того, как это растение зацвело оно начинает действовать как точка радиации. Но в эту хрень можно шмальнуть - тогда она завянет ( светодиоды погаснут не все разом, а постепенно, один за другим).И по себестоимости я смогу уложиться в 1000р и даже ниже, но точного расчета у меня пока нет... А вот тут мне и нужен алгоритм приема.
С передачей проблем никаких и с ШИМом и без него...


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 10 фев 2013, 09:31 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 15 окт 2012, 12:24
Сообщений: 1246
чето у меня такое чуйство, что обработчик прерывания какой то очень раздутый. Не пробовали считать машинное время на 72 кгцах? Боюсь там будет либо впритык, либо через край, но заметно это будет не всегда


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 10 фев 2013, 09:40 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 15 окт 2012, 12:24
Сообщений: 1246
на стм32 и вс1053 лучше собрать себе сотовый телефон, для таггера и пика 16-го хватает
девайсы у ЛТ не универсальные, они просто одинаковые. Потому как чтото другое для гранаты или растяжки выдумывать просто незачем. То же самое относится и к аптечками и аномалиям. По сути это одни и те же девайсы с разной прошивкой. В чем усматривается крамола то я не понял? все логичнее некуда

Стволы это стволы, а все остальное это инфраструктура, без которой играть быстро станет неинтересно. Она ровным слоем размазана по цене стволов. Так что выгодно или нет вы неправильно рассуждаете молодой человек )))) Просто без них будет сложнее заставить клиента брать стволы и отдавать вам за них деньги.

все остальное категорически поддерживаю. Но цену надо называть уже с учетом рыночной надбавки. Вы же не бесплатно на свете живете, чтобы даром свой труд раздавать )


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 10 фев 2013, 09:56 
Не в сети
Аксакал форума

Зарегистрирован: 29 авг 2011, 11:08
Сообщений: 1849
KEROL писал(а):
Не хватает коментариев в коде, чтоб однозначно понять логику алгоритма..


Уже расписывал алгоритм

read_ir() = значение ножи ТСОП. Окончание приёма по получении IR_BITS_MAX битов

LTagKirov писал(а):
Простейшее решение опрос входа с частотой 8кгц, отлично работает. Логика как с кнопкой - подавление дребезга. Счётчик постоянного состояния вывода неважно 1 или 0, как только выход изменил состояние смотрим сколько натикало, и принимаем решение преамбула, биты или пауза получена. Если паузу сделать другой длинны (как сделал полигон), можно даже конкренттое состояние вывода 1 или 0 не смотреть, всё однозначно определяется по длиннам счётчика, для майлс придётся наверно смотреть (незнаю не для майлс код пишу). Для длительностей 600us алгоритм работает даже на частоте опроса 2 кгц, надо всего-то определить три разных длинны импульсов.




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


Делать своё изделие по причине цены нецелесообразно, проще купить б\у недорого 8-)

_________________
"За 2 месяца максимум можно чертёж сделать, еще за 3 фундамент." (c) Номернабис


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 10 фев 2013, 12:09 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
LTagKirov писал(а):
read_ir() = значение ножи ТСОП. Окончание приёма по получении IR_BITS_MAX битов


Осмелюсь высказать своё ИМХО - ориентироваться на фиксированную длину пакета не очень здорово. :?
А если приняты только первые несколько бит пакета, а остальные "потерялись" - так и будем "висеть" в ожидании недополученных бит? :? :(

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


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

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


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

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


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

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