Например TDA7294

Форум РадиоКот :: Просмотр темы - Attiny2313 и PA0
Форум РадиоКот
https://radiokot.ru/forum/

Attiny2313 и PA0
https://radiokot.ru/forum/viewtopic.php?f=57&t=160015
Страница 1 из 1

Автор:  alex1126 [ Пт янв 11, 2019 14:10:34 ]
Заголовок сообщения:  Attiny2313 и PA0

Есть схема, где на ноги PA0 и PA1 повешены две кнопки. Прошивка эти кнопки проверяет и делает всякие действия. Причем распознает одиночное нажатие, многократные нажатия и нажатия и удержания.
Одиночные нажатия обрабатываются по отдельности каждой кнопки а многократные нажатия и удержания мне не важно с какой кнопки, поэтому проверка на них идет вместе (if(PINA&0b11)).
Проблемма заключается в том что одиночные нажатия отрабатываются нормально, а когда доходит дело до многократных нажатий или удержаний, то кнопка на PA1 отрабатывает нормально, а PA0 - нет, а учитывая что проверяются на нажатия они одним условием, то я вообще не понимаю ничего...
Гляньте кто нить свежим взглядом, может подскажет кто что.

Код:
unsigned char            butt_on_state=WAVE_ALW_ON_LOW,
            butt_off_state=WAVE_ALW_OFF_LOW,
            st_t=0;
signed char      lc=-1;

         int   tmrLo=0,      //счетчик таймера понижения яркости
            tmrOff=0,      //счетчик таймера включения/отключения света
            tmrTun=0;   //счетчик таймера настройки света
unsigned char   is_tune=0,      //признак того что регулируют яркость и не надо выключать свет
            state_butt;   //Состояние главного конечного автомата кнопки (общий для двух)


   switch (state_butt) {
      case BUTTON_NOT_PRESS:
         if ((BUTT_LOW_PRESS)||(BUTT_HI_PRESS)) {
            tmrLo=200;
            state_butt=BUTTON_PRESS;
         }
         if (BUTT_LOW_PRESS) {
            butt_on_state=WAVE_ALW_ON_LOW;
            butt_off_state=WAVE_ALW_OFF_LOW;
            st_t=0;
            lc=-1;
         }
         if (BUTT_HI_PRESS) {
            butt_on_state=WAVE_ALW_ON_HI;
            butt_off_state=WAVE_ALW_OFF_HI;
            st_t=SP_COUNT-1;
            lc=1;
         }
         
         tmrTun++;
         if (tmrTun>100) is_tune=0;
      break;      
      
      case BUTTON_PRESS:
         tmrLo--;
         if (tmrLo<0) {
            if (lvl>0) {
               lvl--;
               Led_Correct(lc);
            }
            tmrLo=10;
            is_tune=1;
            tmrTun=0;
         }
//         if ((!(BUTT_LOW_PRESS))&&(!(BUTT_HI_PRESS))) {
         if (!(PINA&0b11)) { /* если ни одна кнопка не нажата*/
            tmrOff=100;
            state_butt=BUTTON_UNPRESS;
         }      
      break;      
      
      case BUTTON_UNPRESS:
         tmrOff--;
         if (tmrOff<0) {
            if (!is_tune) { /* одиночное нажатие кнопки*/
               if ((state<WAVE_ALW_ON_LOW) || (state>WAVE_ALW_ON)) state=butt_on_state;
               else state=butt_off_state;
               st=st_t;
            }
            state_butt=BUTTON_NOT_PRESS;   
         }
//         if ((BUTT_LOW_PRESS)||(BUTT_HI_PRESS)) {
         if (PINA&0b11) {       /*если нажата любая кнопка*/
            if (lvl<245) {
               lvl+=10;
               Led_Correct(lc);
            }
            is_tune=1;
            tmrTun=0;
            state_butt=BUTTON_NOT_PRESS;
         }      
      break;   
   }

Автор:  Dimon456 [ Пт янв 11, 2019 15:04:19 ]
Заголовок сообщения:  Re: Attiny2313 и PA0

Попробуем погадать...
BUTTON_PRESS - это видимо нажатие кнопки, со с значением еще не определился.
BUTTON_UNPRESS - это видимо отжали кнопку.

а state_butt откуда берется? первичное состояние 0 или 1? А может так как объявлен тип unsigned char state_butt, тогда видимо от 0 до 255, но так как при объявлении unsigned char state_butt принимает значение 0, и опять если, опять если..., то возможно, что BUTTON_NOT_PRESS=0, а кто у нас экстрасенс, не подскажете?

Полностью проект выложите.

Автор:  alex1126 [ Пт янв 11, 2019 15:10:47 ]
Заголовок сообщения:  Re: Attiny2313 и PA0

Там enum тип и button_notpress имеет нормальное значение.
Но я вроде разобрался. Там (немного в другом месте) было сравнение знакового и беззнакоаого числа. Исправил - вроде вылечилось. Странно несколько, на мой взгляд.... погоняю сейчас

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/