[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3341642#p3341642"]тогда хотябы так:
Код: Выделить всё
ISR (TIMER2_OVF_vect)
{
takt++;
if (takt==40) {b=TCNT0;}
if (takt==50)
{
a=TCNT0;
if (a-b<20) {PORTD &= ~(1 << PD6)&&~(1 << PD7);}
b=a;
takt=40;
}
}
ждет 40 тактов, берёт первую пробу, ещё через 10 берет вторую и сравнивает, следующее сравнение будет через 10 тактов
при запуске двигателя не забудь скинуть
takt=0; чтобы обеспечить твои обязательные 2 секунды работы двигателя.
Добавлено after 7 minutes 11 seconds:
по приблизительным подсчетам при тактовой 8 МГц при рабочих оборотах переполнение Т0 может произойти уже на 3х тактах (а при меньшей тактовой частоте и раньше), поэтому вместо (takt==50) надо писать (takt==42)[/uquote]
Ты написал то же, что и я только "перефразировав". Я уже писал, что так не работает. Переполнение таймера ТО, при частоте 8MHz будет через 8000000\1024\256=30 тактов.
Вот проект в Proteus с твоим примером, может так нагляднее будет (так же в вложении библиотека для драйвера упр. мотором).