Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос новичка по C
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Jagupop
Тренируюсь на ATTINY 2313. Повесил кнопку на PD0, другой конец - на землю. Как проверить ее нажатие? Я сделал так:

while(PIND == 0xFF)

перед этим, естественно, было в программе:

DDRD = 0x00;
PORTD = 0xFF;

но реакции на нажатие кнопки нет. Поставьте на путь истинный!!

Спасибо.
SasaVitebsk
Зачем весь порт если надо тебе один бит?

Примерно так
if((PING & (1<<SYNH_START_BIT))!=0) TekTime=0; // Инициализация TekTime для SLAVE
if((PINE & (1<<SYNH_READY))==0){ // Инициализация кадра для SLAVE
defunct
А какой реакции Вы ждете?

давайте по-другому.
Давайте подключим кнопку к PD0, а к PB0 - светодиод (тоже между пином порта и землей, ну резистор не забудем есстессно).

пишем
Код
int main(void)
{
   DDRD = 0x00;
   PORTD = (1 << PD0);

   DDRB = (1 << PB0);
   for(;;)
   {
      // в цикле читаем значене кнопки, инвертируем и выводим на светодиод
      if ( PIND & (1 <<  PD0))  // кнопка отжата?
          PORTB &= ~(1 << PB0); // потушить светодиод
      else // нажата?
          PORTB |= (1 << PB0); // зажечь
   }
}


Если удерживать кнопку нажатой - светодиод будет светиться.
wodya
Чего-то я про PINE и PING не понял

Я бы написал так

void PressKey(void)
{
// Нажатие кнопки
}

void main(void)
{
PORTD = 0x01;
DDRD = 0x00;
while(1)
{
if((PIND&0x01) == 0) PressKey();
}
}

Хотя, в реальном приложении это неправильно. Лучше использовать INT0 для детектирования нажатия. Но это если нужно однократное нажатие. Если нужно например инкрементировать величину, то лучше использовать алгоритм антидребезга.
Jagupop
Спасибо! Буду продолжать "играться". А вот насчет алгоритма антидребезга - можно попоробнее? Ужасно интересно!!!
smk
Алгоритм антидребезга подразумевает выдержку после нажатия кнопки. Так чтобы обеспечивался принцип: одно нажатие - одно действие. Так, например, если не противостоять дребезгу, то при простом подсчете нажатий можно получить намного большее число срабатываний.
CSB
устранения дребезга см. тут 1
см. тут 2
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.