www.open-tager.ru

открытый лазертаг форум
Текущее время: 19 апр 2024, 07:28

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


Реклама

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


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



Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
СообщениеДобавлено: 17 ноя 2013, 18:23 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 15 окт 2012, 12:24
Сообщений: 1246
да я как то думаю что итак хватит )) наши одобрямс дали, а для меня это главное. Кто захочет сделать под себя - исходники будут в открытом доступе. Хоть олимпийское табло туда вкорячить можно при желании

снайпер кстати в прицел отлично разглядит индикатор и передаст по рации если попросят. У нас все с рациями бегают. Игрок без связи - анахронизм. И команды без связи обычно в лузерах. Ну оно и понятно - координации на поле нет


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 17 ноя 2013, 19:48 
Не в сети
Местный

Зарегистрирован: 09 май 2013, 15:47
Сообщений: 487
Откуда: Россия, Пермь.
Тем более что для статус-бара придется еще что то наколхаживать, ног МК для управления не хватит.


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

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
zverev.perm писал(а):
Тем более что для статус-бара придется еще что то наколхаживать, ног МК для управления не хватит.

Так вот и дорастем до "Аскета"! :lol: :lol: :lol:
"Созреем", так сказать! ;) :)
Чуток бы времени свободного побольше - показал бы, как можно и с 4 и 10 дисплеями работать + светодиодные линейки + звук + ... сами продолжите!
Не точка будет - новогодняя ёлка! ;) :lol:

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


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

Зарегистрирован: 15 окт 2012, 12:24
Сообщений: 1246
Один раз эту елку пнут и вешай новые игрушки ))))


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

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
mail_robot писал(а):
Один раз эту елку пнут и вешай новые игрушки ))))

Ну пнуть что угодно можно!
Дурак и вашу точку поламает, не сомневайтесь.

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


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

Зарегистрирован: 15 окт 2012, 12:24
Сообщений: 1246
Первое правило надежности - чем меньше деталей, тем надежнее девайс. Мой надо будет попинать чуть подольше )))


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

Зарегистрирован: 15 окт 2012, 12:24
Сообщений: 1246
дописал таки толковую функцию приема байта по ИК каналу, которая не чувствительна к длине пакета и достаточно простая и компактная. Но работать будет только на PIC16F886, потому как задействует ресурсы железа для разгрузки программной части

для отработки прерываний по фронту и срезу использован модель CCP1 процессора, чтобы не заморачиваться с прерываниями на портах. Для счета соответственно таймер TMR1, который работает автоматически. То есть управляется внешним сигналом GATE, от TSOPа. Как только сигнал падает в ноль, таймер начинает считать сам, потом по прерыванию от ССP он свое значение защелкивает в его регистры хранения (все это железка сама делает). Нам остается только считать его показания, переключить модуль CCP на прерывание теперь уже по фронту и просто сидеть и ждать следующего события. Каждый бит принятый при активном сигнале TSOP сохраняется в массиве. А каждое значение длинны паузы проверяется на соответствие и в случае превышения длинны паузы фиксируется битый пакет. Отработка конца передачи производится в основном цикле программы по обычному таймауту. 0,035 сек примерно

Код:
if (CCP1IF)
    {
        CCP_buf = CCPR1;                // save CCPR1
        CCP1IF = 0;                     // clear interrupt flag
        TMR1 = 0x0000;                  // clear TMR1

        if (CCP1M0)                     // if last interrupt on rising
        {
            T1GINV = 1;                 // rising count enable
            CCP1M0 = 0;                 // next interrupt on falling
        }
        else
        {
            T1GINV = 0;                 // falling count enable
            CCP1M0 = 1;                 // next interrupt on rising
        }

        // bit receive handler
        if (RX_START)
        {
            if (!CCP1M0)                // after each rising edge
            {
                _input[packet_counter] = CCP_buf; // recieve bit without encoding
                packet_counter ++;              // increment bit counter
            }
           
            // error recieving handler
            if (CCP1M0 && CCP_buf > 1300 || CCP_buf <1100)       // if bit too long or too short, then error
            {
                RX_START = 0;                   // stop recieve
                RX_END = 0;                     // clear flags
                packet_counter = 0;             // and counters
            }
        }

        // start bit handler
        if (RX_START == 0 && CCP1M0 == 0 && CCP_buf > 4700 && CCP_buf < 4900)           // start packet receiving if header detect
        {
            RX_START = 1;                                             // detect start bit
        }   
    }


в код основного цикла пишем то что ниже, для отработки конца пакета

Код:
while (1)
{
// end of packet handler
if (TMR1IF) EndOfPacketHndl(); 
}

// end of packet handler
void EndOfPacketHndl(void)
{
    TMR1IF = 0;                         // clear interrupt flag
    T1GINV = 0;                         // switch count on falling
    TMR1 = 0x0000;                      // clear Timer 1
    CCP1M0 = 0;                         // reset next interrupt on falling

    if (packet_counter > 10)            // packet received succsessful
        {
            RX_START = 0;               // reset RX flag
            RX_END = 1;                 // set end flag
            packet_counter = 0;         // clear counter
        }
        else                            // packet corrupt
        {
            RX_START = 0;               // reset RX flag
            RX_END = 0;                 // ERROR
            packet_counter = 0;         // clear counter
        }
}


тут я немножко упростил проверки, и битость пакета проверяется просто по длине. Врятли придет сразу 10 помех, да еще и с правильными паузами. Поэтому если пакет короче ожидаемого, то просто гасим его да и все как ошибочный.
а дальше с массивом _input[] можно делать все что угодно. Я забил на декодирование, так как мне нужен только цвет команды

все значения в массиве будут иметь размер ровно вдвое больше, чем предполагаемый бит, потому как разрешение счетчика 0,5 мкс
к примеру если нолик у нас равен по длинне 600 мс, то его значение в массиве будет примерно 1200 (плюс минус)
единичка соответственно вдвое длиннее, то есть 2400 в десятичном измерении


Последний раз редактировалось mail_robot 08 дек 2013, 11:28, всего редактировалось 5 раз(а).

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

Зарегистрирован: 27 ноя 2011, 00:22
Сообщений: 1569
Откуда: Україна
А на проверки длительностей импульсов тоже "забили" ? ;)
К примеру
Код:
 if (RX_START == 0 && CCP1M0 == 0 && CCP_buf > 4000)
- любой импульс с длительностью больше 2мс будет считаться стартовым?

Длительности пауз вообще не проверяете?
Код:
if (CCP1M0 && CCP_buf > 1800)       // if bit too long, then error
если больше 900мкс - тогда ошибка. А если 100мкс, тогда все норм?

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


Последний раз редактировалось Pacifist 08 дек 2013, 11:04, всего редактировалось 2 раз(а).

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

Зарегистрирован: 15 окт 2012, 12:24
Сообщений: 1246
да, любой импульс больше 2 мс будет стартовым
длительность пауз проверяю, остальное нет. Потому как эту проверку можно будет сделать потом при разборе пакета. Просто если длина битов будет выходить за рамки допуска (К примеру какой то окажется 800) весь пакет браковать да и все

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


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

Зарегистрирован: 15 окт 2012, 12:24
Сообщений: 1246
зато получилось очень компактно и ресурсы проца почти не жрет лишними прерываниями
у того же Пингвина в коде я заметил, что счетчик импульсов обновляется по каждому (!) прерыванию таймера 2. А это вообще то затратно по ресурсам. Может я что не так понял конечно, но прочитал так


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

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


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

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


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

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