реклама на сайте
подробности

 
 
> Дребезг контактов, Как избежать?
Labinskiy Nikola...
сообщение Jul 9 2006, 18:55
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 27
Регистрация: 5-07-06
Из: Украина, Донецк
Пользователь №: 18 606



Кнопка замыкает ножку на землю.
Mega16
Код
#include <avr/io.h>
#include <avr/interrupt.h>

#define F_CPU 8000000UL  // 8 MHz
#include <util/delay.h>

ISR(INT2_vect)
{
  int i;
  for (i=0;i<3;i++)
    _delay_ms(10);
  if ((PINB & 0x04)==0) // ножка внешнего прерывания
      PORTA ^= 1;
}

int main()
{
  PORTA = 0;
  DDRA = 0xFF;

  PORTB = 0xFF;
  DDRB = 0x00;
  
  MCUCSR &= ~_BV(ISC2);  // по заднему фронту (H->L)
  GICR = _BV (INT2);
  sei ();

  for(;;)
  return(0);
}


Идея вроде бы правильная, но на практике срабатывает плоховато...
В чем ошибка?

Сообщение отредактировал Labinskiy Nikolay - Jul 9 2006, 18:59


--------------------
If you can't make it good - don't make it look good ;)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
fantasy
сообщение Jul 10 2006, 15:19
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 69
Регистрация: 17-09-05
Из: Kirov
Пользователь №: 8 659



Внесу свою реплику в дискуссию...

Код
#define _fDreb 5 //защита от дребезга (0.05 сек.)
#define _fRepite 39 //время первого автоповтора (0.4 сек.)
#define _nRepite 10 //время второго и последующего автоповтора (0.1 сек.)

//уровни напряжений для кнопок (_minKey1 > _minKey2 > _minKey3 > _minKey4)
#define _minKey1 ... //минимальный уровень напряжения для кнопки 1
#define _minKey2 ... //минимальный уровень напряжения для кнопки 2
#define _minKey3 ... //минимальный уровень напряжения для кнопки 3
#define _minKey4 ... //минимальный уровень напряжения для кнопки 4
    
unsigned int ADCresult;
unsigned char newHKey, oldHKey, drebCount;
unsigned char _key;

    ADCresult = ...;   //данные с АЦП
    
    //... вызывается с частотой ~100 Гц
    newHKey = 0;
    if(ADCresult>=_minKey1)
    {
newHKey = 0x01; //key1
    }
    else if(ADCresult>=_minKey2)
    {
newHKey = 0x02; //key2
    }
    else if(ADCresult>=_minKey3)
    {
newHKey = 0x04; //key3
    }
    else
    {
newHKey = 0x08; //key4
    };
    if((oldHKey!=newHKey)||(newHKey==0x0))
    {
_key = false;
drebCount = _fDreb;
    }
    else
    {
if((--drebCount)==0)
{
     //расшифровываем нажатие на кнопки
     if(newHKey&0x01)key1=true;
     if(newHKey&0x02)key2=true;
     if(newHKey&0x04)key3=true;
     if(newHKey&0x08)key4=true;
     drebCount = _fRepite;  //предполагаем повторное нажатие
     if(_key==false)drebCount = _nRepite; //устанавливаем ожидание 1-го нажатия
     _key = true;
};
    };
    oldHKey = newHKey;


--------------------
В голове слышался грохот: рушились грандиозные планы...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Labinskiy Nikolay   Дребезг контактов   Jul 9 2006, 18:55
- - Yura_K   Код int i; for (i=0;i<3;i++) _dela...   Jul 9 2006, 19:13
- - rezident   Есть два стандартных способа опроса клавиатуры с у...   Jul 9 2006, 19:25
|- - Stas633   Цитата(rezident @ Jul 9 2006, 23:25) Есть...   Jul 9 2006, 22:32
- - TamTam   [quote name='Stas633' date='Jul 10 200...   Jul 9 2006, 22:50
|- - Velund   С весовыми резисторами имеет смысл связываться тол...   Jul 9 2006, 23:59
|- - Stas633   Цитата(Velund @ Jul 10 2006, 03:59) С вес...   Jul 10 2006, 07:45
|- - Kovrov   Цитата(Stas633 @ Jul 10 2006, 11:45) Мне ...   Jul 10 2006, 08:46
|- - defunct   Цитата(Stas633 @ Jul 10 2006, 09:45) Инте...   Feb 11 2010, 23:02
- - upc2   Можно с использованием флагов.В прерывании устанав...   Jul 10 2006, 04:32
- - Kovrov   Такой вариант обхода дребезга - пользуюсь когда мн...   Jul 10 2006, 06:17
- - rezident   При использовании ADC и "аналоговой" кла...   Jul 10 2006, 09:27
|- - Stas633   Цитата(rezident @ Jul 10 2006, 13:27) При...   Jul 10 2006, 10:40
- - Kovrov   по профилю работы часто приходится общаться с проф...   Jul 10 2006, 11:36
|- - Stas633   Цитата(Kovrov @ Jul 10 2006, 15:36) .... ...   Jul 10 2006, 11:52
- - BVU   Программных алгоритмов антидребезга может быть дос...   Jul 10 2006, 13:01
- - Labinskiy Nikolay   Всем спасибо за ответы - пойду экспериментировтаь   Jul 10 2006, 16:36
- - dio   Понимаю что вопрос тупой, но всё таки ... Упростил...   Jul 19 2006, 17:58
- - smk   Как выяснилось в моем случае, полезно обеспечивать...   Feb 10 2010, 17:48
|- - Marian   Цитата(smk @ Feb 10 2010, 19:48) Как выяс...   Feb 11 2010, 13:49
|- - rezident   Цитата(smk @ Feb 10 2010, 22:48) Иначе ск...   Feb 11 2010, 15:53
- - Oleg_IT   Как-то уже приводил здесь этот код. Кодunsigned l...   Feb 11 2010, 09:23
- - Lexdaw   А я по опросу входа (кнопки) сдвигаю регистр влево...   Feb 11 2010, 13:24
|- - Corvus   А простой инкремент/декремент чем не угодил?   Feb 11 2010, 13:47
|- - ReAl   Цитата(Corvus @ Feb 11 2010, 15:47) А про...   Feb 12 2010, 05:56
|- - Corvus   Цитата(ReAl @ Feb 12 2010, 08:56) Если Вы...   Feb 12 2010, 09:09
- - smk   Нет, просто события внутри микроконтроллера опереж...   Feb 11 2010, 17:08
|- - sonycman   Цитата(smk @ Feb 11 2010, 21:08) Нет, про...   Feb 11 2010, 17:17
|- - rezident   Цитата(smk @ Feb 11 2010, 22:08) Нет, про...   Feb 11 2010, 17:25
- - Oleg_IT   Товарищ смешивает две задачи, устранения дребезга ...   Feb 11 2010, 19:27
|- - rezident   Цитата(Oleg_IT @ Feb 12 2010, 00:27) Това...   Feb 11 2010, 21:31
- - smk   Цитатая лично на точно таких же принципах о чем то...   Feb 12 2010, 06:58
|- - muravei   Цитата(smk @ Feb 12 2010, 09:58) в следст...   Feb 12 2010, 08:18
|- - rezident   Цитата(smk @ Feb 12 2010, 11:58) Действие...   Feb 12 2010, 14:26
- - smk   КодЧтобы так сильно не рисковать стоит проверять ...   Feb 12 2010, 09:30
- - andr_doy   давно и с большим успехом пользую следущий код //....   Feb 12 2010, 09:50
- - sonycman   Цитата(ReAl @ Feb 12 2010, 09:56) Да ещё ...   Feb 12 2010, 13:42


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th August 2025 - 05:27
Рейтинг@Mail.ru


Страница сгенерированна за 0.03149 секунд с 7
ELECTRONIX ©2004-2016