Потихоньку запиливаю пионер-friendly библиотеку для взаимодействия со смарт-сенсором. Пока не готово, но дело идет.
Вынес её в отдельный репозиторий:
https://github.com/DAlexis/lasertag-ssp . Это нужно для того, чтобы облегчить использование библиотеки в разных проектах (лично я буду использовать как минимум в двух: Smart sensor и Caustic system).
Git поддерживает подмодули (submodules) - это кода один репозиторий включается в другой в виде директории. Таким образом, не нужно содержать одинаковые файлы в разных репозиториях и потом, при изменении, лихорадочно всё синхронизировать руками. В общем, кто не знаком с этим - вот инфа:
https://git-scm.com/book/ru/v1/%D0%98%D ... 0%BB%D0%B8 . Подмодули - это фишка git, а не github, так что если ваш закрытый-засекреченный репозиторий лежит, например, на bitbucket.org, всё равно можно использовать подмодули с github.
Я проектирую библиотеку так, что она не тянула с собой никаких зависимостей: ни HAL, ни SPL ей не нужен. Она не завязана на какую-то конкретную реализацию ИК-приемника или систему управления светодиодами, то есть подойдет для любого проекта. Она даже не знает, через какую шину всё работает. В случае чего можно будет переключиться на другой вид связи. Привязка к "внешнему миру" происходит через драйвер:
https://github.com/DAlexis/lasertag-ssp ... p-driver.h .
Часть смарт-сенсора почти готова, часть "мастер-устройства" (повязки) в процессе.
Пионер-friendly потому, что количество функций, выведенных наружу, минимально и их назначение довольно очевидно.
Для отладки с компьютера решил писать эмулятор на C++. Он не готов, работа в процессе. Для работы с последовательным портом и для других асинхронных операций я использовал Boost Asio - всем, кто пишет на C++, рекомендую освоить, это мощнейший инструмент для работы с любыми видами связи. Код будущего эмулятора тут:
https://github.com/DAlexis/lasertag-sma ... /master-pc Интерфейс протокола сводится к следующим командам от повязки к сенсору:
- Запросить данные, принятные ИК-приемником. На эту команду сенсор отвечает.
- Передать ИК-пакет
- Добавить задание для "анимации". Подразумевается следующее: у повязки есть RGB-диод и вибромотор. Одно "задание" означает: через столько-то миллисекунд после предыдущего задания значения R, G, B каналов и состояние вибромотора должны стать такими-то. Между двумя состояниями значения R, G, B автоматически линейно меняются. Задания образуют очередь. Таким образом можно реализовать практически любую цветовую анимацию, и у смарт-сенсора нет никаких "пресетов" изначально. То есть, по идее, его не понадобится перепрошивать никогда.
Pingvin писал(а):
onegray писал(а):
Наверное вы MOE для 1-го таймера забыли включить.
Нашел в ref man
Код:
TIMy->BDTR |= TIM_BDTR_MOE;
Pingvin писал(а):
Рано радовался - так до конца этот навороченный Таймер 1 не победил.
Начал разные цвета прогонять - хрень какая то получилась.
Вот именно поэтому я стараюсь пользоваться HAL, а не устаревшим SPL. Такие вещи, как инициализация каналов таймеров для разных нужд ещё ни разу не подводили, причем для чипов разных серий. Эта магическая операция с битом TIM_BDTR_MOE где-то в недрах HAL успешно делается, я смотрел.
ЗЫ: Вот в самый неподходящий момент подводит железо. Помер китайский USB-UART преобразователь на FT232RL, поэтому приходится писать код вслепую. Сегодня будет новый.
ЗЗЫ: Всех с наступающим новым годом!