Цитата(k155la3 @ Jul 24 2017, 11:03)

Задайте состояния выходов для энкодера таблицей.
И прокручивайте ее по кругу - наиболее приближенная к реальному энкодеру эмуляция.
(закрашенные сектора на диске - таже таблица)
это то что я делаю в коде - прокручиваю состояния каждый тайм слот (1-2-3-4).
снизил частоту и подключил светодиоды на выходы. мигают одновременно. значит скоп тут не виноват.
пробовал выставлять выход через ODR
Код
void TIM7_IRQHandler(void)
{
switch (enc_state)
{
case 0:
//ENC_PORT->BSRR |= ENC_PIN_A; //1
//ENC_PORT->BRR |= ENC_PIN_B; //0
ENC_PORT->ODR = 0x200;
break;
case 1:
//ENC_PORT->BSRR |= ENC_PIN_A; //1
//ENC_PORT->BSRR |= ENC_PIN_B; //1
ENC_PORT->ODR = 0x600;
break;
case 2:
//ENC_PORT->BRR |= ENC_PIN_A; //0
//ENC_PORT->BSRR |= ENC_PIN_B; //1
ENC_PORT->ODR = 0x400;
break;
case 3:
//ENC_PORT->BRR |= ENC_PIN_A; //0
//ENC_PORT->BRR |= ENC_PIN_B; //0
ENC_PORT->ODR = 0x000;
break;
}
if(enc_state == 3)
enc_state = 0;
else
enc_state++;
TIM7->SR = 0;
}
тот же результат
если я ставлю 4 брекпойнта - в каждом кейсе - то я вижу что состояния выходов меняются по таблице (10 11 01 00). но когда код бежит они мигают одновременно.
Сообщение отредактировал Jenya7 - Jul 24 2017, 07:06