Много было разговоров, что нужен некий оптимальный алгоритм работы прошивки для лазертаг-стволов, этакий "ориентир" для прошивкописателей, чтобы каждый не изобретал "свой велосипед".
Предлагаю попытаться построить такую концепцию.
Вношу первое предложение (вернее - это предложение LTKirov) - использовать для формирования несущей ИК сигнала аппаратные возможности контролллера, а именно - таймер1 в режиме ШИМ с коррекцией фазы и частоты.
Цитата:
Режим ШИМ с коррекцией фазы и частоты.
Этот режим доступен для 16-битного таймера-счётчика 1 и только для вывода OC1A. В этом режиме таймер-счётчик также как и в режиме ШИМ с коррекцией фазы увеличивает значение регистра TCNTn на единицу на каждом такте до достижения верхней границы, а затем уменьшает до нуля, и т.д. Верхней границей также может быть 65535 либо значение, записанное в регистр OCR1A.
Отличие от режима ШИМ с коррекцией фазы состоит в том, что в этом режиме значение регистра OCR1A обновляется из буферного регистра не при TCNT1, равном верхней границе, а при TCNT1 равном 0.
Что это нам даст?
Это даст нам возможность не только точно настроить частоту сигнала, но и позволит в широких пределах менять его скважность (мощность ИК излучения)!
Про освобождение процессорного времени даже не говорю...
Надо бы рассчитать все коэффициенты, определить в каких регистрах какие биты нужно выставить/сбросить и попробовать!
Результатов эксперимента очень хотелось бы видеть в виде оформленной, легко адаптируемой библиотечки на Си.
Остаётся ещё много задач - как формировать передаваемый пакет, как обрабатывать принимаемый, как воспроизводить звук и т.д.
По поводу приема пакета предлагаю так же попробовать аппаратные фозможности, а именно - таймер в режиме захвата.
Высказывайте критику и свои предложения!
P.S. Глянул даташит - вроде и в режиме FAST PWM можно верхний предел счетчика задавать для таймера1. Короче - изучать надо и пробовать...