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

 
 
> Подключение кнопочной клавиатуры к AVR.
Stolbov
сообщение Aug 14 2018, 18:23
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 5-08-17
Из: Санкт-Петербург
Пользователь №: 98 653



Всем добрый вечер!
Вообщем, я делаю небольшую поделку на основе микроконтроллера AVR,
но так как мне нужно было 6 кнопок, а выводов осталось мало, я решил
попробовать "выкрутиться" из этой ситуации таким образом, как это показано
на рисунке.
Прикрепленное изображение

PA0 и PA1 - ножки микроконтроллера, на которых постоянно находится
высокий уровень. В первый момент времени я устанавливаю на PB0 низкий
уровень, и, получается, что когда мы нажимаем кнопку S1 или S4, на одном из
входов МК так же установится низкий уровень напряжения. Таким образом,
можно отследить, какая кнопка нажата в момент времени. Остальные кнопки
опрашиваются по этому же алгоритму (подаём 0 на PB1, а потом на PB2).
За сим вопрос: правильно ли я вообще делаю? Когда я проводил эксперимент
с одной кнопкой, всё работало, и я с лёгкостью мог отследить её нажатие, но
когда я собрал эту схему на макетке, всё пошло крахом: ни одна кнопка не отзывается.
Если кто-нибудь сможет разобраться, есть ли у этой схемы шанс заработать,
буду премного благодарен. Код опроса этой конструкции так же прилагаю
(может быть, его можно было бы сделать изящнее, но получилось вот так).
Код
#define STEP1 1 //Метки для атомата
#define STEP2 2
#define STEP3 3

//...

DDRA |= (0<<PORTA0)|(0<<PORTA1); //Настройка ножек порта А на вход
DDRB |= (1<<PORTB0)|(1<<PORTB1)|(1<<PORTB2); //Настройка ножек порта B на выход

//..

int button_flag; //Флаг для цикла
int button_state; //Для хренения состояния автомата

//..

void key_polling()
{
    button_state = STEP1; //Первое состояние
    button_flag = 1; //Устанавливаем флаг
    while(button_flag == 1)
    {
        switch(button_state)
        {
            case STEP1: //Опрашиваем кнопки 1 и 4
                PORTB |= (0<<PORTB0)|(1<<PORTB1)|(1<<PORTB2); //На ножке PB0 устанавливаем низкий уровень
                if((PINA & (1<<PORTA0) == 0)) //Если на PA0 - 0, то...
                {
                    //Некое действие
                    button_state = STEP2; //Переходим к опрос следующей двойки
                }
                else if((PINA & (1<<PORTA1) == 0)) //Если на PA1 - 0, то...
                {
                    //Что-то делаем
                    button_state = STEP2;
                }
                else //Если не получили низкий уровень ни на одной из ножек
                {
                    button_state = STEP2;
                }        
            break;
            
            case STEP1: //Опрашиваем кнопки 2 и 5
                PORTB |= (1<<PORTB0)|(0<<PORTB1)|(1<<PORTB2); //На PB1 устанавливаем низкий уровень
                //Код, аналогичный блоку STEP1
            break;
            
            case STEP3: //Опрашиваем кнопки 3 и 6
                PORTB |= (1<<PORTB0)|(1<<PORTB1)|(0<<PORTB2); //На PB2 устанавливаем низкий уровень
                //Код, аналогичный блоку STEP1
                button_flag = 0; //Так как все кнопки опросили, обнуляем флаг для выхода из цикла
            break;
        }
    }
}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Stolbov   Подключение кнопочной клавиатуры к AVR.   Aug 14 2018, 18:23
- - @Ark   Ноги порта PB должны быть первоначально конфигурир...   Aug 14 2018, 20:01
- - Plain   Скорость работы неизвестна, и кнопки фантастически...   Aug 14 2018, 20:09
- - vladec   Цитата(может быть, его можно было бы сделать изящн...   Aug 15 2018, 06:25
|- - @Ark   Цитата(vladec @ Aug 15 2018, 09:25) Для ш...   Aug 15 2018, 06:48
- - jcxz   Цитата(Stolbov @ Aug 14 2018, 21:23) За с...   Aug 15 2018, 06:53
|- - Arlleex   Цитата(jcxz @ Aug 15 2018, 10:53) Неправи...   Aug 15 2018, 07:49
|- - jcxz   Цитата(Arlleex @ Aug 15 2018, 10:49) Да м...   Aug 15 2018, 13:34
|- - haker_fox   QUOTE (jcxz @ Aug 15 2018, 21:34) То что ...   Aug 15 2018, 14:51
|- - jcxz   Цитата(haker_fox @ Aug 15 2018, 17:51) Пр...   Aug 15 2018, 15:04
|- - haker_fox   QUOTE (jcxz @ Aug 15 2018, 23:04) Без дио...   Aug 16 2018, 01:25
- - jeelman   если не требуется большая защищённость от помех и ...   Aug 15 2018, 07:20
- - haker_fox   QUOTE (Stolbov @ Aug 15 2018, 02:23) Если...   Aug 15 2018, 09:56
|- - Arlleex   Цитата(haker_fox @ Aug 15 2018, 13:56) Ва...   Aug 15 2018, 10:05
- - Stolbov   haker_fox, мне нужна быстрая реакция на нажатие. Н...   Aug 15 2018, 10:32
|- - haker_fox   QUOTE (Stolbov @ Aug 15 2018, 18:32) hake...   Aug 15 2018, 13:02
|- - @Ark   Цитата(Stolbov @ Aug 15 2018, 13:32) Я се...   Aug 15 2018, 13:40
- - Stolbov   haker_fox, я просто не верно выразился по поводу ...   Aug 15 2018, 14:02
|- - Plain   Цитата(Stolbov @ Aug 15 2018, 17:02) пыта...   Aug 15 2018, 14:59
- - Arlleex   Ну да. Такие комбинации я не учел Без диодов дей...   Aug 15 2018, 16:46


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

 


RSS Текстовая версия Сейчас: 27th April 2024 - 09:47
Рейтинг@Mail.ru


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