www.open-tager.ru

открытый лазертаг форум
Текущее время: 25 ноя 2024, 03:04

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


Реклама

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


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



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

Зарегистрирован: 27 ноя 2011, 00:22
Сообщений: 1569
Откуда: Україна
ИМХО должна быть проверка импульсов на соответствие по мин. и макс. длине, как то так:
Стартовый импульс 2300 - 2500 мкс
Пауза между битами 550 - 650 мкс
И в декодировании проверять:
Бит "0" - 550-650 мкс,
бит "1" - 1150 - 1250 мкс.

Всего-то надо добавить в проверки еще несколько условий, компактности не повредит.
Сделать для заголовка проверку так:
Код:
if (RX_START == 0 && CCP1M0 == 0 && CCP_buf > 4400 && CCP_buf < 5000)

И для паузы:
Код:
 if (CCP1M0 && (CCP_buf > 1300 or CCP_buf < 1100))       // if bit too long, then error

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


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

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

Зарегистрирован: 15 окт 2012, 12:24
Сообщений: 1246
а зачем проверять это при приеме пакета?
чтобы отработать ошибку и тут же принять новую? Проводить проверку при приеме можно только для пауз. Все остальное не имеет особого смысла. Ибо известна заранее точно только длина пауз и их положение в посылке. Даже проверка длинны стартового импульса помоему не имеет смысла. Пусть он будет к примеру длиннее, ну и что? Может это наоборот даст лучшую чувствительность к приему. Слишком жесткие условия тоже же не айс

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


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

Зарегистрирован: 15 окт 2012, 12:24
Сообщений: 1246
есть правда одно но, которое пришлось допустить наобум - максимальная длинна паузы. Я сделал ее 1800 (900 мкс) и думаю это многовато, но для эксперимента оставил. И нижний предел длинны паузы не проверил. Вот тут конеш ошибка явная. Факт. Если паузы будут всегда короткими, то примется все что угодно :oops:


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

Зарегистрирован: 27 ноя 2011, 00:22
Сообщений: 1569
Откуда: Україна
mail_robot писал(а):
а зачем проверять это при приеме пакета?
чтобы отработать ошибку и тут же принять новую? Проводить проверку при приеме можно только для пауз. Все остальное не имеет особого смысла. Ибо известна заранее точно только длина пауз и их положение в посылке. Даже проверка длинны стартового импульса помоему не имеет смысла. Пусть он будет к примеру длиннее, ну и что? Может это наоборот даст лучшую чувствительность к приему. Слишком жесткие условия тоже же не айс

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

Проверять придется затем, что-бы не засчитать засветку от солнца как начало пакета, чтоб люминесцентные лампе не "нагенерировали" выстрелов.
И паузы проверять не только на макс длинну, но и на минимальную. Иначе любой самый кратковременный перерыв импульса во время приема засчитается как коректная пауза.

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


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

Зарегистрирован: 15 окт 2012, 12:24
Сообщений: 1246
Код:
if (CCP1M0 && CCP_buf > 1300 && CCP_buf <1100)       // if bit too long or too short, then error


так наверное правильнее будет
но опять же, только для пауз. Остальное целесообразнее делать в обработчике пакета уже в основной проге, чтобы не загружать этой работой прерывание. Их итак хватает


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

Зарегистрирован: 27 ноя 2011, 00:22
Сообщений: 1569
Откуда: Україна
Про допуски в длительностях импульсов - из практиик приемники ТСОП имеют свойство уменьшать принимаемые сигналы на 10-20мкс (наверное АРУ так отраьбатывает). Так что в допусках коректный диапазон для импульсов желательно расширять "вниз", а для пауз - "вверх".

ЗЫ
Код:
CCP_buf > 1300 && CCP_buf <1100
- такое условие никогда не сработает ;), логическое ИЛИ надо вместо И

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


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

Зарегистрирован: 15 окт 2012, 12:24
Сообщений: 1246
Pacifist писал(а):
mail_robot писал(а):
а зачем проверять это при приеме пакета?
чтобы отработать ошибку и тут же принять новую? Проводить проверку при приеме можно только для пауз. Все остальное не имеет особого смысла. Ибо известна заранее точно только длина пауз и их положение в посылке. Даже проверка длинны стартового импульса помоему не имеет смысла. Пусть он будет к примеру длиннее, ну и что? Может это наоборот даст лучшую чувствительность к приему. Слишком жесткие условия тоже же не айс

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

Проверять придется затем, что-бы не засчитать засветку от солнца как начало пакета, чтоб люминесцентные лампе не "нагенерировали" выстрелов.
И паузы проверять не только на макс длинну, но и на минимальную. Иначе любой самый кратковременный перерыв импульса во время приема засчитается как коректная пауза.


про старт подумаю. Может и правда стоит сделать. Потому как неизвестно заранее в какой момент посылки шумового пакета будет принят именно он. Он просто может оказаться в середине где нибудь.
да, надо проверять. Спасибо за настойчивый пинок )))
при или второпях затупил. конечно ИЛИ


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

Зарегистрирован: 15 окт 2012, 12:24
Сообщений: 1246
поправил код


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

Зарегистрирован: 27 ноя 2011, 00:22
Сообщений: 1569
Откуда: Україна
Правильное использование "железа" контроллеров позволяет писать весьма компактный и быстрый код. За что люблю ПИКи - что у них можно подобрать для себя почти любую нужную конфигурацию по ресурсам, хоть 7 ССР модулей :).
Берем PIC16F737 - имеем 3 ССР модуля, на один вешаем прием от ТСОР, на другой - ШИМ выстрела ИК, на третий - ШИМ звука. Чем не бюджетное решение?

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


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

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

Зарегистрирован: 15 окт 2012, 12:24
Сообщений: 1246
Код:
CCP_buf = CCPR1;                // save CCPR1


эту строчку наверное можно даже убрать и читать значения прямо из буфера чтобы избавиться от переменной. Хотя есть вероятность что импульс будет очень короткий и успеет за несколько тактов процессора обновить буфер приема. Но тогда по идее не успеет переключиться детектор фронта/среза и 2 импульса примутся как один с общей длинной.... хм. Над подумать
вроде ничего особенно плохого случиться не должно


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

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


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

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


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

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