www.open-tager.ru

открытый лазертаг форум
Текущее время: 23 ноя 2024, 17:48

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


Реклама

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


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



Начать новую тему Ответить на тему  [ Сообщений: 169 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7 ... 17  След.
Автор Сообщение
 Заголовок сообщения: Re: Умный датчик. Smart sensor.
СообщениеДобавлено: 27 дек 2016, 13:42 
Не в сети
Старожил

Зарегистрирован: 18 мар 2015, 13:19
Сообщений: 574
Откуда: Нижний Новгород
Pingvin писал(а):
Как у Вас происходит захват?
Я так и не понял... :?

Строчка
Код:
HAL_TIM_IC_Start_IT(&htim14, TIM_CHANNEL_1);

запускает таймер 14 в режиме Input Capture для канала 1. Таймер настроен на захват по обоим фронтам первого канала (см. tim.c). Когда приходит любой фронт, HAL вызывает каллбэк
Код:
HAL_TIM_IC_CaptureCallback()

Строчка
Код:
uint16_t capture_time = htim->Instance->CCR1;

записывает время захвата в тиках таймера в capture_time. Время предыдущего фронта лежит в last_edge_ticks (названия переменных не очень хорошие).
Если таймер переходит через максимум и сбрасывается, разность capture_time - last_edge_ticks всё равно корректна, т. к. предел счета и предел uint16_t совпадают, и работает очевидная особенность целочисленной арифметики: 1 - 65535 == 2.
Дальше в коде каллбэка работает элементарный детерминированный автомат, который разбирает последовательность интервалов.
Регулярно из главного цикла программы вызывается функция ir_task_tick(). Она проверяет таймаут передачи и обнаруживает конец посылки. Если конец обнаружен, то посылка копируется в другой буфер, и буфер приема очищается. Это нужно, чтобы пока входные данные обрабатываются, можно было уже принимать другие. Иначе есть риск, что в процессе обработки данные изменятся - это состояние "гонки данных", допускать такого нельзя.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Умный датчик. Smart sensor.
СообщениеДобавлено: 27 дек 2016, 13:59 
Не в сети
Старожил

Зарегистрирован: 18 мар 2015, 13:19
Сообщений: 574
Откуда: Нижний Новгород
LTagKirov писал(а):
1. "Заряжается" таймер для счётчика измерения длительности, подробности надо уточнить, практически это самое интересное ;)
2. Функция обратного вызова срабатывает после импульса на ножке или по таймеру?, интересно на любую
ножку можно повесить такую функцию ? И на каждую ножку будет нужен свой обработчик ?
Есть ли ограничение на количество ножек, ну кроме корпуса МК?
3. Импульс разбирается на соответствие части пакета с помощью автомата.
4. По результату разбора пакета - автомат обнуляется.
5. Полученный пакет хранится в буфере и забирается по мере необходимости.


1. Запуск при правильно настроенном таймере - 1 строчка, см, предыдущий пост.

2. В режиме захвата значения по внешнему импульсу происходит следующее: когда на ножку МК приходит фронт, текущее значение счетчика таймера аппаратно записывается в специальный регистр, а уже потом вызывается прерывание. Это позволяет максимально точно определять время прихода фронта, т.к. прерывание может неопределенное время ждать окончания других прерываний, да и точно не известны все тайминги. Соответственно в коде прерывания можно никуда не торопясь считать данные из регистра захвата.
По поводу ножек: у микроконтроллера есть несколько таймеров. Некоторые из них "продвинутые", и содержат, обычно, 4 "канала". Каналы могут генерировать ШИМ или захватывать внешнее значение как я описал. Ну и ещё некоторые вещи делать. В контроллере смарт-сенсора два таймера с 4 каналами и один с 1 каналом. Каналы привязаны к ножкам. Иногда есть возможность сделать remap - сменить ножку на какую-то другую определенную. В мощных МК есть до 4 вариантов, в слабых вариантов может не быть. Наш контроллер - один из слабейших.

Если нужно просто сделать прерывание по внешнему сигналу без захвата таймера, то в STM32 можно назначить обработчик почти на любую ножку МК. Даже на все сразу. Это называется EXTI.

Например, в Caustic я не использую захват таймера, а просто по прерыванию от нужной ножки беру время из "системных часов", сделанных на двух "последовательно соединенных" таймерах, считающих микросекунды. Точности более чем достаточно, и нет ограничения на выбор ножки для ИК-приемника. К тому же "системные часы" используются во многих местах Caustic.

3. Ага.
4. Ага.
5. Ага.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Умный датчик. Smart sensor.
СообщениеДобавлено: 27 дек 2016, 14:26 
Не в сети
Аксакал форума

Зарегистрирован: 29 авг 2011, 11:08
Сообщений: 1849
Alexies писал(а):
Например, в Caustic я не использую захват таймера, а просто по прерыванию от нужной ножки беру время из "системных часов", Точности более чем достаточно, и нет ограничения на выбор ножки для ИК-приемника.
Так сначала и думал про устройство, но смотрю по коду смартдатчика и вижу что хитрее заточено ;) В принципе согласен, таймеры экономить смысле нет никакого, выгоды от того что они остановлены особо нету - из МК их не выковырять ну пусть тогда работают, а 3..4 зон вполне достаточно для геймплея.

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Умный датчик. Smart sensor.
СообщениеДобавлено: 27 дек 2016, 16:56 
Не в сети
Аксакал форума
Аватар пользователя

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

По поводу ремапов...
Сегодня целый день голову ломал - не могу вывести ШИМ сигнал на ножку PA9 (Таймер 1, второй канал).
На PB1 выводится (таймер 14, первый канал).
Вроде все аналогично делаю, что за фигня?
Алтернативные функции настраиваю.
Может ремап ещё какой нужен?
:?
Кода под рукой нет.

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Умный датчик. Smart sensor.
СообщениеДобавлено: 27 дек 2016, 17:46 
Не в сети
Новосел

Зарегистрирован: 10 авг 2015, 13:46
Сообщений: 60
Наверное вы MOE для 1-го таймера забыли включить.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Умный датчик. Smart sensor.
СообщениеДобавлено: 27 дек 2016, 18:46 
Не в сети
Аксакал форума
Аватар пользователя

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

А что это такое?

P.S.
Нашел в ref man
Код:
TIMy->BDTR |= TIM_BDTR_MOE;


А как это при помощи SPL выставить?
Буду копать, спасибо!

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Умный датчик. Smart sensor.
СообщениеДобавлено: 27 дек 2016, 22:10 
Не в сети
Старожил

Зарегистрирован: 18 мар 2015, 13:19
Сообщений: 574
Откуда: Нижний Новгород
Начинаю потихоньку самую сложную часть проекта: взаимодействие через однопроводной последовательный порт. Новый код пишу пока в ветку https://github.com/DAlexis/lasertag-sma ... ementation . Протокол обмена предлагаю назвать SSP - Smart Sensor Protocol, собственно. Аббревиатура, вроде, не затасканная.

Чтобы проще было тестировать связь, пока в качестве повязки будет выступать компьютер. На нем будет работать эмулятор на питоне или на C++.

Первая очевидная трудность состоит в следующем: многие, и я в том числе, выводят отладочную информацию на компьютер при помощи свободного UART-а. Трудность в том, что у выбранного чипа только один UART. А отлаживать код без возможности вставить printf() куда-то - дело неблагодарное. Другой вариант - ввод через SWD - не поддерживается на Cortex M0, судя по всему. Поэтому в протоколе будет предусмотрено "дебажное сообщение", которое никто не должен принимать. В общем дело идет, может завтра заработают некоторые команды.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Умный датчик. Smart sensor.
СообщениеДобавлено: 28 дек 2016, 01:00 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 27 ноя 2011, 00:22
Сообщений: 1569
Откуда: Україна
Alexies писал(а):
НПротокол обмена предлагаю назвать SSP - Smart Sensor Protocol, собственно. Аббревиатура, вроде, не затасканная.
...

Абсолютно не затасканная, к примеру - Synchronous Serial Port

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Умный датчик. Smart sensor.
СообщениеДобавлено: 28 дек 2016, 05:43 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
SSCP - Smart Sensor Communication Protocol


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

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Умный датчик. Smart sensor.
СообщениеДобавлено: 28 дек 2016, 08:44 
Не в сети
Аксакал форума
Аватар пользователя

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

Второй канал таймера 1, ножка PA9.
DMA прикручено.

Прием пакета и RGB индикация уже есть...

Ещё раз спасибо onegray! :geek:

Кстати - от 3,3В прекрасно работает!
Яркость опупенная - в глазах "зайчики".

API такое
Цитата:

#define NUM_LEDS 2

RGB_t leds[NUM_LEDS];

int main(void)
{

ws2812b_Init();
leds[0].r=100;
leds[0].g=0;
leds[0].b=0;

leds[1].b=100;

while(1)
{
while (!ws2812b_IsReady()); // wait
ws2812b_SendRGB(leds, NUM_LEDS);

}
}


И кстати..
PA9 - толерантна к 5В.
Так что питать можно напрямки от лития, не нагружая линейный стабилизатор.
Ща запитаю RGB от 5 Вольт.
P.S. От 5В - полёт нормальный! ;) 8-)

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


Последний раз редактировалось Pingvin 28 дек 2016, 10:03, всего редактировалось 1 раз.

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

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


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

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


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

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