??? 8-bit Timer/Counter2 - управление фазой пина OC2A
- Войдите на сайт для отправки комментариев
Добрый день :)
прошу помощи... явного текста на мои сомнения не нашёл... это подтема тема "ФУОЗ+Тахометр"
Timer/Counter1 - в режиме измерения одного оборота коленвала ( захват счётчика ), прерывание по нарастающему фронту, в его ISR - ............................... и настройка Timer/Counter2 в режим счёта до OCR1A ( в этот момент надо обязательно OC1A = LOW )
в ISR Timer/Counter2 - ............................... и настройка Timer/Counter2 в режим счёта до OCR1A ( в этот момент надо обязательно OC1A = HIGH )
если триггерное переключение ( COM2A1 , COM2A0 = 0 , 1 ) - как поймать/установить фазу ?
если по сравнении ( Set OC2A on Compare Match ) = ( COM2A1 , COM2A0 = 1 , 1 ) - установится ли сразу же OC1A = LOW ? ....ему же при следующем сравнении нужно переключиться в HIGH ?
картинка :
Timer/Counter0 - не нужен, отпало.... Timer/Counter2 - ОДИН сделает две последовательных задержки....
как фазу "выход" - сделать как на картинке ? спасибо... :)
ещё вопрос - Timer/Counter2 сделает две задержки и вот как его притормозить лучше до следующего прерывания Timer/Counter1 ?
запретить счёт ( предделитель в 0 ) ? или запретить ему прерывание ( и пусть впустую считает ) ?
Установку бит OC1x следует проводить до установки бит конфигурации порта в регистре DDRx (ножка МК как выход). Прежде чем настроить вывод OC1x на вывод в регистре направления данных необходимо выполнить инициализацию регистра OC1x.
Самым простым способом решения этой задачи является использование бита принудительной установки результата сравнения (FOC1x) при работе таймера в нормальном режиме. Регистр OC1x сохраняет свое состояние даже при изменении режима работы таймера.
тоже не понятно :(
Не понял что нужно получить в итоге :)
Можно простыми словами без всяких там OC1x и др.? Почему простыми? Так можно будет исключить ошибки на начально уровне и понять, что нужно получить в итоге. Типа так: в момент прихода сигнала с датчика положения коленвала должно срабовать ..., после чего должно произойти ... И так весь процесс.
К примеру, у меня таймер2 считает сколько времени открыты форсунки и таким образом определяет расход топлива. Чуть позже буду пробовать переходить на 16-битный таймер, чтобы снизить кол-во прерываний.
нужно получить ИМЕННО эксЦеленноГрамму из поста #0
> в момент прихода сигнала с датчика положения коленвала должно срабовать ..., после чего должно произойти ... И так весь процесс.
...всё вышееееее - рассказал, кажися
Ну не совсем :) Допустим я понимаю, что такое угол опережения зажигания, для чего он и кусок другой инфы, но не знаю как сделать таймер (допустим), а другой чел - хорошо знает все нюансы таймеров, но не знает как работает бензиновый ДВС, точнее его система зажигания.
В любом случае по тем данным, что есть - надо посидеть и вникнуть в рисунок, а потом уже в текст. Т.е. нет легкочтения = резкое снижение вероятности скорой помощи.
ЗЫ: писал много и часто техзадания программистам и расшифровывал чужие :)
> В любом случае по тем данным, что есть - надо посидеть и вникнуть в рисунок, а потом уже в текст. Т.е. нет легкочтения = резкое снижение вероятности скорой помощи.
....спрошаемущему - ответится, когда-нить..... может Пухлявый расскажет... А ВДРУГ и Дохтур присоединится.... ВСЕМ рады !
Ну не совсем :) Допустим я понимаю, что такое угол опережения зажигания, для чего он и кусок другой инфы, но не знаю как сделать таймер (допустим), а другой чел - хорошо знает все нюансы таймеров, но не знает как работает бензиновый ДВС, точнее его система зажигания.
В любом случае по тем данным, что есть - надо посидеть и вникнуть в рисунок, а потом уже в текст. Т.е. нет легкочтения = резкое снижение вероятности скорой помощи.
ЗЫ: писал много и часто техзадания программистам и расшифровывал чужие :)
ничё страшного - хотите помочь, переспросите....
> хорошо знает все нюансы таймеров, но не знает как работает бензиновый ДВС, точнее его система зажигания.
вот от такого и хочется получить инфу :)
> Допустим я понимаю, что такое угол опережения зажигания, для чего он и кусок другой инфы, но не знаю как сделать таймер (допустим), а другой чел - хорошо знает все нюансы таймеров, но не знает как работает бензиновый ДВС, точнее его система зажигания.
В любом случае по тем данным, что есть - надо посидеть и вникнуть в рисунок, а потом уже в текст. Т.е. нет легкочтения = резкое снижение вероятности скорой помощи.
скорой и не ждём... а вы советы даёте не вникая в проблему ? ой-ой-ой - "тут таких по пояс будет" - поржать бы......
моя понял - что вы - не шарите в счётчиках, не шарите в движках ( дизель/бензин - пофиг ) или не хотите выдать секрет юзания счётчиков :( ....спасибо за критику :)
тему перечитайте, пожста
По тому, что я успел понять без перерисовывания :) нужен только один таймер, в прерывании таймера включать что-то, что будет бить искрой.
Если предельные обороты - 6000, то минимальное время между срабатыванием прерывания от датчика положения коленчатого вала (ДПКВ) - 10мс.
Теперь простое решение без лишних наворотов (это как раз то, о чем я писал: расписать всё простыми словами):
1) изначально установлен некий "угол опережения зажигания" (УОЗ), его прописываем в setup и с него всё начинается.
2) при каждом срабатывании прерывания от ДПКВ получаем время от штатной функции micros() и вычисляем текущие обороты двигателя:
3) составляем таблицу УОЗ и в зависимости от оборотов ставим соответствующее начальное значение счетчика таймера, например:
Также изначально нужно правильно выбрать предделитель таймера.
4) в функции прерывания по переполнению следующее:
> 1) изначально установлен некий "угол опережения зажигания" (УОЗ), его прописываем в setup и с него всё начинается.
НЕТ - разрабатывается цифровой аналог центробежного регулятора УОЗ !
> ......от штатной функции micros().....
вы не поняли.... моя желает ВСЁ ЭТО решить через СЧЁТЧИКИ !
а решить нано поведение пина OC2A.......
Не вижу никакого смысла в этом, но, в целом, можно и одним таймером обойтись... ИМХО - изврат. Тем более micros - это и есть таймер 0, только в упрощенном виде.
Ну может кто-то таки подскажет по изврату :)
> ну уж нет ! micros - это и есть таймер 0, только в упрощенном виде micros
ага, с увеличением тактов выполнения....
- моя задал конкретный вопрос - без миллисов и микросов....
Не нашёл тут замечания по этому поводу, так что добавлю
запретить счёт ( предделитель в 0 ) ?
По ссылке в той теме говорилось же, что предделитель может быть 8, 32, 64, 256 или 1024.
Понятно, значит просто вопрос терминологии случился :) То есть это как бы не сам предделитель, а биты ("код"), от которых он зависит.