Форум по разработке и ремонту электронной техники Киевский форум радиолюбителей и электронщиков. Форумы по разработке и ремонту электронной техники
    Схемы электрические принципиальныеГлавная    ФорумФорум    ПоискПоиск по форуму    Личные сообщенияФайлообменник    Личные сообщенияРадиотехнический каталог   

Фотогалерея   <b>Профиль</b>Ваш профиль    Личные сообщенияЛичные сообщения    ГруппыГруппы   

FAQFAQ    РегистрацияРегистрация    ВходВход

Уважаемые посетители! Это старая версия форума. Новая версия находится по адресу: http://www.remexpert.com
Алгоритм обработки кнопок (без матриц)
На страницу 1, 2, 3  След.
 
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Форум по разработке и ремонту электронной техники -> Микроконтроллеры, процессоры, ПЛИС...
 
Автор Сообщение
AndryG
Модератор


Зарегистрирован: 24.07.2006
Сообщения: 411
Откуда: Helios-3

СообщениеДобавлено: 18 Апр 2007, 15:00    Заголовок сообщения: Алгоритм обработки кнопок (без матриц) Ответить с цитатой

Избитая тема, но не нашел нормального описания ... везде "чисто академичные случаи" ... или простые примеры с одной кнопкой на прерывании.

Для проработки вопроса предлагаю такие условия:
- нужна программа-минимум - без крутых наворотов ...
- рассматриваем небольшое к-во кнопок ... 4 штуки вполне хватит.
- не рассматриваем схемы подключения и сканирования кнопок.
- в основном цикле клавиатура представлена "словом состояния клавиатуры" - и больше никаких заморочек по клавиатуре.
- преывания внешние не используем ... доступен только таймер.
- не поднимаем спор о времени сканирования Улыбка 10 или 20 мс и точка Восклицание
- для расширений возможней кнопок допускаются варианты нажатий:
- различие по к-ву нажатий кнопок (одна/несколько)
- по времени нажатий (короткое/длительное)
- автоповтор НЕ ДЕЛАЕМ это уже круто


Жизненный цикл события нажатия кнопки можно разделить на следующие этапы:
- (0) сканируем состояния кнопок и записываем в внутренний буфер "слово текущего состояния кнопок" (МЕТОДЫ СКАНИРОВАНИЯ ЗДЕСЬ НЕ РАССМАТРИВАЕМ - о этом много написано)
- (1) избавляемся от дребезга
- (2) определяем состояние кнопки, записываем в "слово состояния клавиатуры"
- (3) в основной программе обрабатываем слово состояния клавиатуры и модифицируем его для сброса обработанного состояния.

Нашел один интересный пост - советую почитать ... но там уж очень крутая обработка описана ... слишком ресурсоемкая.

Для избежания разночтений предлагаю следующую терминологию
Состояния кнопки в данный момент (используется в драйвере клавиатуры - в основном цикле не видно и не используется)
0 -- кнопка придавлена
1 -- кнопка отжата
Состояния кнопки:
НЕ_НАЖАТА -- нормальное состояние кнопки ... кнопка вверху и никто ее не трогает
ПРЕДНАЖАТА -- первый переход линии с 1-0 ( 1->0 начало дребезга)
НАЖАТА -- факт нажатия кнопки ... после дребезга кнопку нажали (1->0 дребезг обработан)
ДОЛГО_НАЖАТА -- факт длительного удержания кнопки (0 ... 0 )
ОТПУЩЕНА -- факт отпускания кнопки (0->1)
Иные параметры:
Т_ДЛ -- время длительного нажатия кнопки
СОСТ_КЛ -- слово состояния клавиатуры (его организация не определена пока - это вопрос (2))


Все добавления терминологии буду дописывать в этот пост ... просматривайте его, если где что не ясно.

Восклицание Прошу не приводить километражи асм-кода ... "у меня сделано так" ... нужен алгоритм, а не конкретная реализация ... так-как имея алгоритм можно реализовать на чем угодно.
Восклицание Прошу думать, что Вы пишите, и думать всё ли вы написали - не бросайте, пжлст, по 5 постов подряд с предложением в каждом.
Свой надуманный вариант пока не предлагаю ... для "чистоты" Ваших мыслей. Улыбка

_________________
AndryG
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
urry
Живет здесь... (>100)
Живет здесь... (>100)


Зарегистрирован: 23.10.2006
Сообщения: 243

СообщениеДобавлено: 18 Апр 2007, 15:26    Заголовок сообщения: Ответить с цитатой

алгоритм - это считать количество 0 и 1 на входе - если преобладает то или иное - нажата или отжата. Грубо, но действенно.
_________________
меня не интересует мнение людей. которые разбираются в этом вопросе. Только тех, кто сами что-то сделали (А. Энштейн)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AndryG
Модератор


Зарегистрирован: 24.07.2006
Сообщения: 411
Откуда: Helios-3

СообщениеДобавлено: 18 Апр 2007, 16:13    Заголовок сообщения: Ответить с цитатой

действительно, но академически ... в таком стиле уже много написано ... куда и как мне дальше приткнуть эти 0 и 1 ? Как в программе устроить обработку этого потока, как его сохранить удобней, как его интерпретировать? Как удобней хранить и обрабатывать?

Давайте конкретизируем задачу.

Есть 4 (К0-К3) кнопки. Опрос клавиатуры ведется в таймере каждые 10 мс.
В устройстве предусмотрены варианты использования кнопок:
- одиночное короткое нажатие ( плюс, минус, перебор вариантов)
- одиночное длительное нажатие (смена режима, подтверждение выбора)
- множественное длительное нажатие (две и больше кнопки нажаты одновременно длительное время - заходим в особо важные настройки, отключаем/включаем особые режимы работы)
вариант длительного множественного нажатия не рассматриваем - это цирк будет Улыбка - попасть одновременно и сразу отпустить три кнопки - точно цирк

Как это удобно организовать? Потом постараюсь масштабировать.

_________________
AndryG
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
avr123.nm.ru
Знатный посетитель (>20)
Знатный посетитель (>20)


Зарегистрирован: 07.08.2006
Сообщения: 67

СообщениеДобавлено: 18 Апр 2007, 17:10    Заголовок сообщения: Ответить с цитатой

Я конденсаторы параллельно контактам уважаю.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AndryG
Модератор


Зарегистрирован: 24.07.2006
Сообщения: 411
Откуда: Helios-3

СообщениеДобавлено: 19 Апр 2007, 7:10    Заголовок сообщения: Ответить с цитатой

Цитата:
- не рассматриваем схемы подключения и сканирования кнопок.

Про конденсаторы и т.д. и .т.п все форумы говорят ... а дальше ни слова.

Есть что сказать - говорите ... нет - слушайте.

_________________
AndryG
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
urry
Живет здесь... (>100)
Живет здесь... (>100)


Зарегистрирован: 23.10.2006
Сообщения: 243

СообщениеДобавлено: 19 Апр 2007, 7:17    Заголовок сообщения: Ответить с цитатой

AndryG писал(а):
д куда и как мне дальше приткнуть эти 0 и 1 ? Как в программе устроить обработку этого потока, как его сохранить удобней, как его интерпретировать? Как удобней хранить и обрабатывать?

Берутся 2 счетчика - какое-то время опрашивается вход. Если читается 0, то инкремент счетчика 0, если 1 - инкремент счетчика 1. В конце 2 числа сравниваются.
Я первый раз такое увидел при обработке сигнала от механического энкодера - такая "трещотка", как на микроволновке - считает количество импульсов от поворота колеса и, в зависимости от того, в какую сторону крутят, увеличение или уменьшение. Вверху кнопка для фиксации.

_________________
меня не интересует мнение людей. которые разбираются в этом вопросе. Только тех, кто сами что-то сделали (А. Энштейн)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
banzayy
Живет здесь... (>100)
Живет здесь... (>100)


Зарегистрирован: 12.09.2006
Сообщения: 287
Откуда: Луганск

СообщениеДобавлено: 19 Апр 2007, 16:18    Заголовок сообщения: Ответить с цитатой

есть пример в книге, есть книги по СИ для AVR. Для просмотра установить плагин DjVu


AtmelBook(Гребнев).part1.rar
 Описание:

Файлообменник
 Название файла:  AtmelBook(Гребнев).part1.rar
 Размер файла:  1.91 MB
 Скачено:  1838 раз(а)

Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
banzayy
Живет здесь... (>100)
Живет здесь... (>100)


Зарегистрирован: 12.09.2006
Сообщения: 287
Откуда: Луганск

СообщениеДобавлено: 19 Апр 2007, 16:19    Заголовок сообщения: Ответить с цитатой

это продолжение


AtmelBook(Гребнев).part2.rar
 Описание:

Файлообменник
 Название файла:  AtmelBook(Гребнев).part2.rar
 Размер файла:  1.83 MB
 Скачено:  908 раз(а)

Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
AlexBoy
Частый гость (>5)
Частый гость (>5)


Зарегистрирован: 05.04.2007
Сообщения: 8

СообщениеДобавлено: 19 Апр 2007, 17:15    Заголовок сообщения: Ответить с цитатой

Если нужно регистрировать одновременное нажатие только одной кнопки то делаю примерно так:
Готовый код возвращается в KeyStatus

Код:

volatile unsigned char last = 0, KeyStatus = 0, WaitDelay = 0;

void ProcessKeys(void)
  {
    unsigned char cur, new_press, new_release;
    if (WaitDelay)   // задержка на дребезг
      {
        --WaitDelay;
        return;
      }
    cur = GetStatus();                      // опрос порта
    new_press = (last^cur) & cur;      // выделяем новые нажатия
    new_release = (last^cur) & last;  // выделяем новые отпускания
    last = cur;
    if (new_press)
     {
       KeyStatus = new_press;
       WaitDelay = 10;                    // дребезг нажатия
       return;
     }
    if (new_release)
     {
       WaitDelay = 10;                   // дребезг отпускания
     }
  }
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AndryG
Модератор


Зарегистрирован: 24.07.2006
Сообщения: 411
Откуда: Helios-3

СообщениеДобавлено: 20 Апр 2007, 9:43    Заголовок сообщения: Ответить с цитатой

Не могу скачать архивы с предыдущих постов ... почти до конца доходит и обрывает Грусть

Люди, у вас получилось нормсально скачать? У меня проблемы или у сервера?

_________________
AndryG
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Форум по разработке и ремонту электронной техники -> Микроконтроллеры, процессоры, ПЛИС... Часовой пояс: GMT + 2
На страницу 1, 2, 3  След.
Страница 1 из 3

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете добавлять вложения в этом форуме
Вы можете просматривать вложения в этом форуме


Rambler's Top100 PageRank Яндекс цитирования
Сайты наших друзей: Гири, все о гирях, Автоматизация магазинов, супермаркетов, ресторанов, кинотеатров,
Весы электронные, Сканеры штрих-кода, Принтеры штрих-кода

Powered by phpBB © 2001, 2005 phpBB Group

Время генерации страницы: 0.6647s (PHP: 92% - SQL: 8%) - SQL запросов: 13 - GZIP enabled - Debug on