Вентилятор охлаждения двигателя (Engine's cooling fan)

Русскоязычный форум SECU-3 по общим вопросам. General discussion in Russian language. English sub-forum.

Moderator: STC

User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Вентилятор охлаждения двигателя

Post by STC »

Вроде приоритеты прерываний есть. Приоритет определяется положением вектора в таблице векторов прерываний. Чем ближе к началу таблицы тем выше приоритет. Неудобство прерываний в другом, нет нормальных масок прерываний. Нельзя быстро запретить только выбранное прерывание.
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
Arseniy
LQFP112 - Up with the play
Posts: 154
Joined: Wed Dec 08, 2010 2:21 am
Location: Minsk Belarus
Contact:

Re: Вентилятор охлаждения двигателя

Post by Arseniy »

Приоритеты там просто первоочередность выполнения в случае одновременного возникновения нескольких прерываний. Я имел ввиду полноценную систему приоритетов, как в MCS-51, где прерывание может прервать обработку другого прерывания с более низким приоритетом и не может с более высоким.
Единственный простой выход просто на долго не задерживаться в обработке прерывания, чтобы другие не ждали.
User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Вентилятор охлаждения двигателя

Post by STC »

Теперь понял что ты имел ввиду. Я делаю следующее:
1. Я стараюсь "не задерживаться" в прерываниях;
2. При входе в обработчик прерывания я стараюсь сделать неотложные операции(которые могут повлиять на качество результата) в первую очередь, затем я разрешаю прерывания и другие прерывания могут прервать текущее прерывание;
3. Если прерывание критическое или очень короткое, то я не разрешаю другие прерывания в процессе его выполнения.

Для п.2 важна возможность маскировать отдельные прерывания, а в AVR такой возможности нет (я имею ввиду что у меня это не получилось). Eсть только флаг который маскирует все прерывания. Если запрещать и разрешать отдельные прерывания битами которые есть, то флаги присутствия прерываний в очереди теряются. Но это я пробовал давно, уже немножко забыл, но вроде проблема именно в этом.

вот один из примеров где это нужно:
#ifdef COOLINGFAN_PWM
//CKP processing creates a big delay which negatively affects cooling fan's PWM. We
//need to enable T/C 2 interrupts. TODO: it is bad idea to enable all interrupts
//here. We need only OCIE2 and TOIE2.
__enable_interrupt();
#endif
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
Arseniy
LQFP112 - Up with the play
Posts: 154
Joined: Wed Dec 08, 2010 2:21 am
Location: Minsk Belarus
Contact:

Re: Вентилятор охлаждения двигателя

Post by Arseniy »

Странно, почему теряются флаги прерываний в очереди при запрете отдельными битами. Насколько знаю, установлен или нет, например, бит TOIE0 в TIMSK, а при переполнении T0 выставляется бит в TIFR. Если прерывание запрещено, то флаг так и будет стоять, и как только установишь бит в TIMSK так сразу получишь прерывание. Может проблема в том, если за это время возникло несколько этих событий прерываний, а флаг запроса все равно один. Но такая же беда будет и при общем маскировании всех прерываний.
User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Вентилятор охлаждения двигателя

Post by STC »

Я сам этого не понимаю. Даташит ничего не говорит об этом, он просто говорит что при помощи TIMSK можно маскировать прерывания.
Но, когда я пытаюсь замаскировать все остальные прерывания и оставить только OCIE2 и TOIE2, то начинаются глюки:

Code: Select all

Прерывания были запрещены при входе в обработчик прерывания
uint8_t timsk_sv = TIMSK;
TIMSK = _BV(OCIE2) | _BV(TOIE2);
_ENABLE_INTERRUPTS();
...код...
_DISABLE_INTERRUPTS();
TIMSK = timsk_sv;
Прерывания будут разрешены при выходе из обработчика прерывания
Этот код я пытался ставить в обработчике прерывания от ДПКВ чтобы убрать разрешение лишних прерываний.
У меня создается впечатление что при изменении регистра TIMSK флаги прерываний находящихся в очереди теряются, но даташит ничего не говорит об этом. Хоть пиши в службу поддержки Atmel...
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Вентилятор охлаждения двигателя

Post by STC »

Проблема снята. Мне получилось правильно замаскировать нужные прерывания. Atmel AVR позволяет маскировать прерывания с сохранением флагов прерываний.
Причина была в невнимательности.
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
zazuba
LQFP112 - Up with the play
Posts: 104
Joined: Wed Jul 20, 2011 10:25 am
Location: Rostov-on-Don
Contact:

Re: Вентилятор охлаждения двигателя

Post by zazuba »

Будет ли сека работать только с одним датчиком температуры? Т.е. отслеживать температуру и вкл/выкл реле вентилятора?
Без подсоединения остальных датчиков.
GAZ 2410
ender11
LQFP112 - Up with the play
Posts: 197
Joined: Sat Dec 11, 2010 4:05 pm

Re: Вентилятор охлаждения двигателя

Post by ender11 »

Atmel AVR позволяет маскировать прерывания с сохранением флагов прерываний.
кстати. а как это делается?
User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Вентилятор охлаждения двигателя

Post by STC »

Будет ли сека работать только с одним датчиком температуры? Т.е. отслеживать температуру и вкл/выкл реле вентилятора?
Без подсоединения остальных датчиков.
Не проверял, но должна.
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Вентилятор охлаждения двигателя

Post by STC »

кстати. а как это делается?
Биты в регистре TIMSK. Но такой регистр есть только для таймеров. Например, для АЦП такого регистра нет и когда я пытался замаскировать прерывание от АЦП, то его флаг прерывания терялся.
Короче, криво это сделано в архитектуре AVR.
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
Post Reply