Во первых, чтобы определить работает двигатель или нет, нужно мерять обороты ХХ.
Это табу!!!! Объясню почему.
1. Лампочка давления масла не вариант, она может быть погашена, но небольшой ток через нее идет и этого может быть достаточно, чтобы на порт пришла 1. Второй вариант зимой лампа давления погаснет гораздо раньше чем запустится двигатель (густое масло создаем большее давление).
2. измерять по напряжению, тоже не вариант, может быть всякое, обрыв и проскальзывание ремня навесного оборудования, неисправен регулятор напряжения, не работает генератор.
Во вторых чтобы определить обороты достаточно использовать один порт. Скажем, за 0,5сек считаем количество прерываний на порту переводим 620 об/мин в об/0,5сек и сравниваем с полученным значением. Все это будет выполнятся "в фоне" и МК никак не нагрузит. Код несколько строчек. Вот единственное на 412 москвиче стоит бобина с прерывателем и понадобится преобразовать в цифру НН на бобине, схем в нете по моему много. надо на вход МК подавать устойчивую 1 (3-5В).
Вот простой пример здесь я использовал TIMER1 он работает по совпадению, кто то писал, что хочет определить заведен ли двигатель. Можете использовать этот кусок кода из моего проекта кнопки START-STOP Engine работает у меня на машине более 2 лет, так что критика не принимается
//____________________
// Обработчик внешнего прерывание на ноге INT0
//____________________
interrupt [EXT_INT0] void ext_int0_isr(void)
{
IntCount++; // Колличество прерываний увеличиваем на 1
}
//____________________
//
// Обработчик прерывание TIMER1 по достижении 0.5 сек
//_____________________
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
FTaho=IntCount; // Запомнить в FTaho текущее колличествво прерываний
IntCount=0; // Обнулить счетчик колличества прерываний
TCNT1=0; // Сбросить счетчик TIMER1
}
// Настройка TIMER1
TCCR1A=0x80; // разрешить прерывание по совпадению
TCCR1B=0x05; // предделитель 1024
TCNT1=0; // сбросить счетчик
OCR1AH=0x0f; // OCR1 выставлен на совпадение при
OCR1AL=0x42; // достижении 3906 (8МГц/1024=7812Гц-1 сосчитает за 1 сек) 3906(0x0F42) - за 0,5 сек.
В третьих если обороты ХХ падают ниже 620 об/мин, то скорее всего двигатель просто заглохнет и программа отработает правильно.
И последнее 30А можно измерять с точностью до 0,1А