Обсуждаем контроллеры компании Atmel.
Ответить

Re: Энкодер+AtMega32a

Чт янв 16, 2020 17:12:42

Так а в обычном офисе-то работает?

в моем обычном нет (FreeOffice)
Изображение
на виртуальной win7 установлен office2003 - там работает
Там пару битовых полей записать

угу - я для F4 не стал с этим даже разбираться, оставил как есть
Код:
  /* Configure the main PLL */
    RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) |
                   (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24);

Re: Энкодер+AtMega32a

Вт янв 21, 2020 19:46:14

В итоге разобрался я со своей проблемой, все оказалось проще чем я думал. Тот код, что я писал изначально так и оставил
Спойлер
Код:
void EncoderScan(void)
{
   next_state = PIND & 0x05;   // Берем текущее значение
   // И сравниваем со старым
   
   // Смотря в какую сторону оно поменялось -- увеличиваем
   // Или уменьшаем счетный регистр
   
   switch(prev_state)
   {
      case 4:
      {
         if(next_state == 5) up_state++;
         if(next_state == 0) down_state++;
         break;
      }
     
      case 0:
      {
         if(next_state == 4) up_state++;
         if(next_state == 1) down_state++;
         break;
      }
      case 1:
      {
         if(next_state == 0) up_state++;
         if(next_state == 5) down_state++;
         break;
      }
      case 5:
      {
         if(next_state == 1) up_state++;
         if(next_state == 4) down_state++;
         break;
      }
   }
   
   prev_state = next_state;      // Записываем новое значение
   // Предыдущего состояния
   
   
   if (up_state >= 4)            // 1 раз за 4 импульса изменяем состояние передачи
   {
      sw++;
      infoPage++;                   // Передача +
      up_state = 0;
      Light_timer=Light_Time;
   }
   if (down_state >= 4)
   {
      sw--;
      infoPage--;
      // Передача -
      down_state = 0;
      Light_timer=Light_Time;
   }

}


с той только разницей что опрашиваю его не в общем теле и не по внешнему прерыванию, а в прерывании по таймеру. К сожалению сильно пришлось перелопачивать код, прикручивая его к таймерам.
Ответить