Пт мар 30, 2018 12:30:03
Пт мар 30, 2018 12:56:26
ISR (TIMER2_OVF_vect)
{
static unsigned char takt = 0; // если takt только в этом обработчике, не зачем делать эту переменную глобальной
unsigned char a; // если а используется только в этом обработчике, не зачем делать эту переменную (тем более с таким именем)
static unsigned char b; // если b используется только в этом обработчике, не зачем делать эту переменную (тем более с таким именем) глобальной
if ((PORTD & ((1 << PD6) | (1 << PD7))) == 0) {
/* двигатель не крутится -> ничего не делаем */
takt = 0;
return;
}
/* двигатель крутится -> ждем */
if (++takt == 25) { /* на 25 тике запоминаем положение енкодера */
b=TCNT0;
return;
}
if (takt >= 30) {
/* насколько я понимаю, здесь надо отключить мотор, если приращение енкодера менее 20 */
a = TCNT0;
if ((unsigned char)(a - b) < 20) {
PORTD &= ~((1 << PD6) | (1 << PD7)); // Вы же хотите сбросить два старших бита
takt = 0; /* отключили мотор, сбросили счетчик тактов */
return;
}
/* Тут надо что-то сдедать, если енкодер продолжает выдавать 20 и более импульсов */
/* например, перезапускаем ожидание "прекращения импульсов" енкодера */
b = a;
takt = 25;
}
}
Пт мар 30, 2018 20:17:29
Пт мар 30, 2018 22:50:51
Сб мар 31, 2018 02:02:17
Сб мар 31, 2018 06:02:37
Ср апр 04, 2018 17:08:07