Здравствуйте. техническая задача не оригинальна. делаю очередной собственный велосипед - контроллер системы зажигания для маленького двухцилиндрового моторчика. сечас на макете первый вариант кода работает так: таймер tim2 на первом канале вылавливает значение времени в тиках фронта датчика хола на коленвале, таймер крутится по кругу непрерывно. в прерывании захвата я забираю значение времени из него вычитаю предыдущее которое хранится в временной переменной. таким образом по каждому фронту я узнаю текущий период оборота КВ. тут же я расчитыааю задержку на импульс зажигания и записываю в регистры сравнетя ведомого tim5. которыйработает в одноимпульсном режиме one shot, с запуском через триггер захата в tim2. все дубово, код не влияет на тайминги, нет джиттера ....но есть смутное ощущение...что можно сделать умнее. я попробывал сделать тоже самое но на одном таймере. то есть захват работает также но включены еще и канал сравнения tim2, в его регистр я заношу значение текущего захваченного фронта + расчитання задержка. выходы молчат. при совпадении генерится событие OC и прерывание. но как сбросить состояние выхода в момент следующего входного импульса? в стандартном режиме его сбрасывает по событию переполнения счетчика. можно канибудь настроить канал OC чтоб его сбрасывало от события захвата?
|