Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > [avr] HIDKey


Автор: Delfin29fly 26.3.2010, 14:15
Собрал сей девайс  http://www.obdev.at/products/vusb/hidkeys.html  , подключил к программе Mach3. Но как-то кнопки странно работают. Сделал видео 
http://www.youtube.com/watch?v=pwHVTDoG2Ig
Сначала кнопка работает правильно, но после нескольких нажатий подряд начинает наблюдаться задержка срабатывания, причем задержка возрастает. А далее вообще кнопка "теряется". Если нажать другую, а потом вернуться, цикл повторяется.
Пробовал ставить фирменный numpad, такой проблемы нет.
Где же искать причину?

Автор: Delfin29fly 28.3.2010, 10:19
Может, здесь что изменить?

Код

    // Button  
    tmp = PINA;
    msk = 0;
    for (i=0;i<8;i++)//8
    {
        msk = 1 << i;
        
        if (tmp&msk)
        {
            if (key[i][0]==0)
            {
                keyDidChange=1;
            }
            key[i][0] = 1;
            key[i][1] = 0;
        }
        else
        {
            if (key[i][1]<KEY_DELAY)
            {
                
                key[i][1]++;
                //
            }
            else
            {
                key[i][0] = 0;
                keyDidChange=1;
            }
        }
        
    }
    tmp = PINC|0x80;
    msk = 0;
    for (i=0;i<7;i++)//8
    {
        msk = 1 << i;
        
        if (tmp&msk)
        {
            if (key[8+i][0]==0)
            {
                keyDidChange=1;
            }
            key[8+i][0] = 1;
            key[8+i][1] = 0;
        }
        else
        {
            if (key[8+i][1]<KEY_DELAY)
            {
                
                key[8+i][1]++;
                //
            }
            else
            {
                key[8+i][0] = 0;
                keyDidChange=1;
            }
        }
        
    }


Автор: cardinal 28.3.2010, 15:07
Цитата(Delfin29fly @  26.3.2010,  12:15 Найти цитируемый пост)
Где же искать причину? 

Почему то думаю, что искать надо в железе...

Автор: Delfin29fly 28.3.2010, 15:37
В самой схеме? Я пробовал ставить резистор 75кОм от кнопки на +5V, никаких изменений. И что интересно, если использовать тактовую кнопку типа TSA1PS130, то эффект проявляется в меньшей степени (но проявляется), а если использовать кнопку B170H, то практически сразу.

Автор: cardinal 28.3.2010, 18:07
Delfin29fly, код я так понимаю твой? Если нет, то дай ссылку на файл с кодом (а не на много разных файлов). Если да, то подумай как решить проблему дребезга (именно поэтому разные кнопки по разному реагируют).

Автор: Delfin29fly 28.3.2010, 21:34
Код писал не я. Делал товарищ по моей просьбе (не безвоздмездно). Сейчас с ним связь оборвалась. Сам я в этом деле почти ноль. Но мне нужно доделать девайс. 
И вот то и дело, что кнопки реагируют одинаково. Повторюсь. Если нажимать одну и туже кнопку с частотой более 1 сек(на глаз), всё работает нормально. Если увеличивать частоту, нормально сработает 7-10 раз, затем появляется видимая задержка около 1 сек, а далее нажатие кнопки ни к чему не приводит. Нужно выждать какое-то время, тогда опять всё повторяется. Я хоть и не очень в теме вопроса, но разве эффект дребезга может себя так проявлять? Откуда набегает задержка срабатывания. Я выложил часть кода, это же описывает работу кнопки? Если причина где-то в этом куске, подскажите, скомпелировать я уже научился!
Ещё здесь  #define KEY_DELAY  2  менял на 1
 

А здесь
Код

 if(TIFR & (1<<TOV0))
        {   // 22 ms timer 
            TIFR = 1<<TOV0;
            TimeCounter++;
            keyScan();
            if(TimeCounter>554)//554
            {
                TimeCounter=0;
                GICR|=0x40;
                buildReport();
                //reportBuffer[2]=PIND;
                usbSetInterrupt(reportBuffer, sizeof(reportBuffer));
            }

554 менял от 300 до 570. При 300 что-то более-менее похоже на правильную работу, но всё-же не так.

Автор: cardinal 29.3.2010, 01:03
Цитата(Delfin29fly @  28.3.2010,  19:34 Найти цитируемый пост)
554 менял от 300 до 570.

Поменяй на 1000 smile


Delfin29fly, если ты
Цитата(Delfin29fly @  28.3.2010,  19:34 Найти цитируемый пост)
Сам я в этом деле почти ноль.

то вариантов то всего два
1. спросить с того, который пропал (найти его соответственно перед этим)
2. найти другого, который сделает

Часто чтобы понять в чем проблема надо поиграться с железкой и с кодом. Ни у кого на форуме нет ни твоего кода, ни твоей железки. Соответственно все советы будут скорее от балды. А в конце концов окажется, что у тебя кнопка плохо припаяна (или просто ###кнопка)... smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)