??? 8-bit Timer/Counter2 - управление фазой пина OC2A

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Добрый день :)

прошу помощи... явного текста на мои сомнения не нашёл... это подтема тема "ФУОЗ+Тахометр"

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 ?

картинка :

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Timer/Counter0 - не нужен, отпало.... Timer/Counter2 - ОДИН сделает две последовательных задержки....

как фазу "выход" - сделать как на картинке ? спасибо... :)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

ещё вопрос - Timer/Counter2 сделает две задержки и вот как его притормозить лучше до следующего прерывания Timer/Counter1 ?

запретить счёт ( предделитель в 0 ) ? или запретить ему прерывание ( и пусть впустую считает ) ?  

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
In non-PWM waveform generation modes, the match output of the comparator can be forced by
writing a one to the Force Output Compare (FOC2x) bit. Forcing compare match will not set the
OCF2x Flag or reload/clear the timer, but the OC2x pin will be updated as if a real compare
match had occurred (the COM2x1:0 bits settings define whether the OC2x pin is set, cleared or
toggled).
 
может быть мне сюда надо ? к FOC2A ? не могу разобраться :(
SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Установку бит OC1x следует проводить до  установки бит конфигурации порта в регистре DDRx (ножка МК как выход). Прежде чем настроить вывод OC1x на вывод в регистре направления данных необходимо выполнить инициализацию регистра OC1x.

Самым простым способом решения этой задачи является использование бита принудительной установки результата сравнения (FOC1x) при работе таймера в нормальном режиме. Регистр OC1x сохраняет свое состояние даже при изменении режима работы таймера. 

тоже не понятно :(

melvladimir
Offline
Зарегистрирован: 08.03.2013

Не понял что нужно получить в итоге :)

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

К примеру, у меня таймер2 считает сколько времени открыты форсунки и таким образом определяет расход топлива. Чуть позже буду пробовать переходить на 16-битный таймер, чтобы снизить кол-во прерываний.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

нужно получить ИМЕННО эксЦеленноГрамму из поста #0

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

в момент прихода сигнала с датчика положения коленвала должно срабовать ..., после чего должно произойти ... И так весь процесс.

...всё вышееееее - рассказал, кажися

melvladimir
Offline
Зарегистрирован: 08.03.2013

Ну не совсем :) Допустим я понимаю, что такое угол опережения зажигания, для чего он и кусок другой инфы, но не знаю как сделать таймер (допустим), а другой чел - хорошо знает все нюансы таймеров, но не знает как работает бензиновый ДВС, точнее его система зажигания.

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

ЗЫ: писал много и часто техзадания программистам и расшифровывал чужие :)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

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

....спрошаемущему - ответится, когда-нить..... может Пухлявый расскажет... А ВДРУГ и Дохтур присоединится.... ВСЕМ рады !

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

melvladimir пишет:

Ну не совсем :) Допустим я понимаю, что такое угол опережения зажигания, для чего он и кусок другой инфы, но не знаю как сделать таймер (допустим), а другой чел - хорошо знает все нюансы таймеров, но не знает как работает бензиновый ДВС, точнее его система зажигания.

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

ЗЫ: писал много и часто техзадания программистам и расшифровывал чужие :)

ничё страшного - хотите помочь, переспросите.... 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

хорошо знает все нюансы таймеров, но не знает как работает бензиновый ДВС, точнее его система зажигания.

вот от такого и хочется получить инфу :)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Допустим я понимаю, что такое угол опережения зажигания, для чего он и кусок другой инфы, но не знаю как сделать таймер (допустим), а другой чел - хорошо знает все нюансы таймеров, но не знает как работает бензиновый ДВС, точнее его система зажигания.

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

 

скорой и не ждём... а вы советы даёте не вникая в проблему ? ой-ой-ой - "тут таких по пояс будет" - поржать бы......

моя понял - что вы - не шарите в счётчиках, не шарите в движках ( дизель/бензин - пофиг ) или не хотите выдать секрет юзания счётчиков :( ....спасибо за критику :)

 

тему перечитайте, пожста

melvladimir
Offline
Зарегистрирован: 08.03.2013

По тому, что я успел понять без перерисовывания :) нужен только один таймер, в прерывании таймера включать что-то, что будет бить искрой.

Если предельные обороты - 6000, то минимальное время между срабатыванием прерывания от датчика положения коленчатого вала (ДПКВ) - 10мс.

Теперь простое решение без лишних наворотов (это как раз то, о чем я писал: расписать всё простыми словами):

1) изначально установлен некий "угол опережения зажигания" (УОЗ), его прописываем в setup и с него всё начинается.
2) при каждом срабатывании прерывания от ДПКВ получаем время от штатной функции micros() и вычисляем текущие обороты двигателя:



if (micros() > prev_mks) {
	rpm = 60000000 / (micros() - prev_mks);
}

3) составляем таблицу УОЗ и в зависимости от оборотов ставим соответствующее начальное значение счетчика таймера, например:



if (rpm > 1500 && rpm < 2001) {
	TCNT2=50;
	TIMSK2 |= (1 << TOIE2); //разрешает прерывание по переполнению таймера
}

Также изначально нужно правильно выбрать предделитель таймера.

4) в функции прерывания по переполнению следующее:

ISR(TIMER2_OVF_vect) {
	TIMSK2 &= ~(1<<TOIE2); //запрет прерывания по переполнению
	что-то делаем еще;
}

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

1) изначально установлен некий "угол опережения зажигания" (УОЗ), его прописываем в setup и с него всё начинается.

НЕТ - разрабатывается цифровой аналог центробежного регулятора УОЗ !

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

> ......от штатной функции micros().....

вы не поняли.... моя желает ВСЁ ЭТО решить через СЧЁТЧИКИ !

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

а решить нано поведение пина OC2A.......

melvladimir
Offline
Зарегистрирован: 08.03.2013

Не вижу никакого смысла в этом, но, в целом, можно и одним таймером обойтись... ИМХО - изврат. Тем более micros - это и есть таймер 0, только в упрощенном виде.

Ну может кто-то таки подскажет по изврату :)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

> ну уж нет ! micros - это и есть таймер 0, только в упрощенном виде micros

ага, с увеличением тактов выполнения....

- моя задал конкретный вопрос - без миллисов и микросов....

dezz0riented
dezz0riented аватар
Offline
Зарегистрирован: 27.07.2014

Не нашёл тут замечания по этому поводу, так что добавлю

SU-27-16 пишет:

запретить счёт ( предделитель в 0 ) ? 

Не представляю смысла в установке предделителя в ноль и как бы это работало там внутри.

По ссылке в той теме говорилось же, что предделитель может быть 8, 32, 64, 256 или 1024.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
Table 17-9. Clock Select Bit Description
CS22 CS21 CS20
   0       0        0             No clock source ( Timer/Counter stopped )
dezz0riented
dezz0riented аватар
Offline
Зарегистрирован: 27.07.2014

Понятно, значит просто вопрос терминологии случился :) То есть это как бы не сам предделитель, а биты ("код"), от которых он зависит.