www.open-tager.ru

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

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


Реклама

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


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



Начать новую тему Ответить на тему  [ Сообщений: 62 ]  На страницу 1, 2, 3, 4, 5 ... 7  След.
Автор Сообщение
 Заголовок сообщения: Концепция "оптимальной" прошивки.
СообщениеДобавлено: 02 фев 2013, 23:20 
Не в сети
Аксакал форума
Аватар пользователя

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

Вношу первое предложение (вернее - это предложение LTKirov) - использовать для формирования несущей ИК сигнала аппаратные возможности контролллера, а именно - таймер1 в режиме ШИМ с коррекцией фазы и частоты.
Цитата:
Режим ШИМ с коррекцией фазы и частоты.

Этот режим доступен для 16-битного таймера-счётчика 1 и только для вывода OC1A. В этом режиме таймер-счётчик также как и в режиме ШИМ с коррекцией фазы увеличивает значение регистра TCNTn на единицу на каждом такте до достижения верхней границы, а затем уменьшает до нуля, и т.д. Верхней границей также может быть 65535 либо значение, записанное в регистр OCR1A.

Отличие от режима ШИМ с коррекцией фазы состоит в том, что в этом режиме значение регистра OCR1A обновляется из буферного регистра не при TCNT1, равном верхней границе, а при TCNT1 равном 0.


Что это нам даст?
Это даст нам возможность не только точно настроить частоту сигнала, но и позволит в широких пределах менять его скважность (мощность ИК излучения)!
Про освобождение процессорного времени даже не говорю...

Надо бы рассчитать все коэффициенты, определить в каких регистрах какие биты нужно выставить/сбросить и попробовать! ;) :)

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

Остаётся ещё много задач - как формировать передаваемый пакет, как обрабатывать принимаемый, как воспроизводить звук и т.д.

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

Высказывайте критику и свои предложения! ;) :)


P.S. Глянул даташит - вроде и в режиме FAST PWM можно верхний предел счетчика задавать для таймера1. Короче - изучать надо и пробовать...

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


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

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

Модуль ECCP у PIC18F14K50 очень хорошо умеет делать все вышеописанное. Однако есть одна проблема - модуляция. Мы же передаем не только несущую, мыж ее еще модулируем по длинне пачек. На выходах стоят управляющие защелки (TRIS) которые управляют состоянием выхода. Работает/не работает (третье состояние). Можно рулить через них, но для этого надо задействовать второй таймер, который бы отсчитывал ширину пачек импульсов (0/1) и менял состояние выхода на открыто/закрыто вовремя. Этот процесс получается все равно надо делать по прерываниям от таймера.
По сути дело PWM будет только с одной установки генерировать несущую. Это я так понимаю всего лишь дело одной конфигурационной процедуры, которая настроит регистры и запустит это дело на исполнение.
А вот вторая часть более ответственная и сложная. Ее неплохо было бы продумать в совокупности с процедурой арбитража, которая обеспечивала бы 100% возможность приема в ходе передачи. Ато получится как у нас сегодня на полигоне. Пока стреляем принять ничего не можем. А это неправильно. У смоленска таких проблем нет. Хотя кое какие мелкие глючки непонятной природы всетки проскакивают тоже.

значит надо выбрать что приоритетнее - выстрел или пуля? если они прилетают одновременно. По идее пуля, как я мыслю ;)

Приехал мне кстати PicKit2. Но изза паяльника руки до него так и недошли еще.

Проскакивала инфа, что есть какая то прога-калькулятор, которая все это дело умеет рассчитывать. Только вот поискать не удосуживался как то пока.


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

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Ну я предлагаю попробовать для приема пакета использовать режим захвата таймера.
Хватит ли на все таймеров - вот вопрос. :?
Для звука таймер нужен (даже два).
Пробовать надо, может чего и получится.
Кстати, Аскет при стрельбе очередями урон фиксирует, толко очередь прекращается, надо по новой курок нажать, чтобы продолжить.

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


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

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


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

Зарегистрирован: 29 авг 2011, 11:08
Сообщений: 1849
Похоже надо биты ИТОГО выложить :D
Как они получены читайте на языке оригинала там всё более менее понятно :geek:

setup_PWM(void) {

TCCR1A = 0x00; // Выходы отключены от таймера
TCCR1B = 0x11; // таймер работает, прескалер отключен

// Выбран режим Phase & Freq Corect PWM
// f = Fosc / ( 2 * N * TOP)

ICR1H = 0x00; // максимальный модуль счёта
ICR1L = ICR1_VAL; // примерно 222, для частоты 36КГц

// TCCR1A = 0х80; // звук подключен ШИМ прямой
// TCCR1A = 0х02; // ИК подключен ШИМ прямой

OCR1AH = 0x00; // два разных шима на этой частоте
OCR1AL = 0x00; // Звук ШИМ

OCR1BH = 0x00;
OCR1BL = ICR1_VAL / 2; // ИК передатчик скважность 50%

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


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

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


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

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


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

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
LTagKirov писал(а):
Pingvin писал(а):
Ну я предлагаю попробовать для приема пакета использовать режим захвата таймера.


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

Взял на заметку. :)

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


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

Зарегистрирован: 13 июл 2011, 17:05
Сообщений: 475
Откуда: Perm
LTagKirov писал(а):
Похоже надо биты ИТОГО выложить :D
Как они получены читайте на языке оригинала там всё более менее понятно :geek:
setup_PWM(void) {
а так взлетит? или подразумевается, что когда стреляем, то звука нет?

update:
чёт поторопился, походу. надо будет по ДШ биты развернуть, а то так не совсем понятно. предложенная ранее идея с:
Код:
таймер0 - общий таймер для всяческих измерений в прошивке;
таймер1 - шим звука;
таймер2 - шим стрельбы;
как-то проще и понятней (и отлично работает)


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

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
LTagKirov писал(а):
Похоже надо биты ИТОГО выложить :D
Как они получены читайте на языке оригинала там всё более менее понятно :geek:

setup_PWM(void) {

TCCR1A = 0x00; // Выходы отключены от таймера
TCCR1B = 0x11; // таймер работает, прескалер отключен

// Выбран режим Phase & Freq Corect PWM
// f = Fosc / ( 2 * N * TOP)

ICR1H = 0x00; // максимальный модуль счёта
ICR1L = ICR1_VAL; // примерно 222, для частоты 36КГц

// TCCR1A = 0х80; // звук подключен ШИМ прямой
// TCCR1A = 0х02; // ИК подключен ШИМ прямой

OCR1AH = 0x00; // два разных шима на этой частоте
OCR1AL = 0x00; // Звук ШИМ

OCR1BH = 0x00;
OCR1BL = ICR1_VAL / 2; // ИК передатчик скважность 50%


Конкретика пошла - очень здорово! :)
У меня вопрос - счетчик у тамера один?
Считать он будет до 222 ( ICR1_VAL) - так?
Ну ШИМ на ИК работать будет, вопросов нет, а звук то получается "урезан" да максимального значения сеймпла в 222 (вместо 255 при 8 битах)?

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


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

Зарегистрирован: 29 авг 2011, 11:08
Сообщений: 1849
Pingvin писал(а):
Ну ШИМ на ИК работать будет, вопросов нет, а звук то получается "урезан" да максимального значения сеймпла в 222 (вместо 255 при 8 битах)?


Разрешение ЦАП конечно уменьшается, но некритично на 8кгц дискретизации hi-fi качество не получить всё равно 8-)

tommy писал(а):
подразумевается, что когда стреляем, то звука нет?

ШИМ независимые ограничений на одновременность звука и выстрела нет.

tommy писал(а):
таймер2 - шим стрельбы;[/code]как-то проще и понятней (и отлично работает)

Таймер 2 не может одновременно ШИМ выдавать и генерировать произвольную частоту. Делать программный ШИМ, мне лениво. Есть смысл использовать таймер 2 для звука, а Таймер 1 для ИК

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


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

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


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

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


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

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