Например TDA7294

 Форум РадиоКот • Просмотр темы - Attiny2313 и PA0
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Пн янв 21, 2019 00:23:26



Часовой пояс: UTC + 3 часа [ Летнее время ]


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Attiny2313 и PA0
СообщениеДобавлено: Пт янв 11, 2019 15:10:34 
Мучитель микросхем

Зарегистрирован: Ср дек 19, 2012 13:16:22
Сообщений: 416
Рейтинг сообщения: 0
Есть схема, где на ноги 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;   
   }


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Attiny2313 и PA0
СообщениеДобавлено: Пт янв 11, 2019 16:04:19 
Прорезались зубы

Карма: 1
Зарегистрирован: Вс дек 25, 2016 09:34:54
Сообщений: 231
Рейтинг сообщения: 0
Попробуем погадать...
BUTTON_PRESS - это видимо нажатие кнопки, со с значением еще не определился.
BUTTON_UNPRESS - это видимо отжали кнопку.

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

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


Вернуться наверх
 
JLCPCB, 10 прототипов ПП всего за $2 и 2 дня доставка!

Крупнейший производитель печатных плат в Китае, 300,000+ заказчиков, 10,000+ он-лайн заказов в день.

Рассчитайте цену онлайн:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: Attiny2313 и PA0
СообщениеДобавлено: Пт янв 11, 2019 16:10:47 
Мучитель микросхем

Зарегистрирован: Ср дек 19, 2012 13:16:22
Сообщений: 416
Рейтинг сообщения: 0
Там enum тип и button_notpress имеет нормальное значение.
Но я вроде разобрался. Там (немного в другом месте) было сравнение знакового и беззнакоаого числа. Исправил - вроде вылечилось. Странно несколько, на мой взгляд.... погоняю сейчас


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $88 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Второй конкурс по дизайну печатных плат от PCBWay!
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 



Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y