www.open-tager.ru
http://www.open-tager.ru/forum/

Концепция "оптимальной" прошивки.
http://www.open-tager.ru/forum/viewtopic.php?f=5&t=1894
Страница 4 из 7

Автор:  LTagKirov [ 09 фев 2013, 21:21 ]
Заголовок сообщения:  Re: Концепция "оптимальной" прошивки.

вот вариант использованый мной, работает простым опросом с частотой от 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:

Автор:  KEROL [ 09 фев 2013, 22:19 ]
Заголовок сообщения:  Re: Концепция "оптимальной" прошивки.

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

Автор:  KEROL [ 09 фев 2013, 22:22 ]
Заголовок сообщения:  Re: Концепция "оптимальной" прошивки.

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

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


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

Автор:  Pingvin [ 09 фев 2013, 23:41 ]
Заголовок сообщения:  Re: Концепция "оптимальной" прошивки.

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


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

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

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

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

Автор:  Pingvin [ 10 фев 2013, 00:03 ]
Заголовок сообщения:  Re: Концепция "оптимальной" прошивки.

KEROL, если не секрет - сами то чего "мутите"?

Автор:  KEROL [ 10 фев 2013, 07:14 ]
Заголовок сообщения:  Re: Концепция "оптимальной" прошивки.

Pingvin писал(а):
KEROL, если не секрет - сами то чего "мутите"?

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

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

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

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

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

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

Автор:  mail_robot [ 10 фев 2013, 09:31 ]
Заголовок сообщения:  Re: Концепция "оптимальной" прошивки.

чето у меня такое чуйство, что обработчик прерывания какой то очень раздутый. Не пробовали считать машинное время на 72 кгцах? Боюсь там будет либо впритык, либо через край, но заметно это будет не всегда

Автор:  mail_robot [ 10 фев 2013, 09:40 ]
Заголовок сообщения:  Re: Концепция "оптимальной" прошивки.

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

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

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

Автор:  LTagKirov [ 10 фев 2013, 09:56 ]
Заголовок сообщения:  Re: Концепция "оптимальной" прошивки.

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


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

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

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




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


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

Автор:  Pingvin [ 10 фев 2013, 12:09 ]
Заголовок сообщения:  Re: Концепция "оптимальной" прошивки.

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


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

Страница 4 из 7 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/