зачем мне опрашивать "+" и "-" чаще, если промежуточные опросы не несут никакой информации?
Затем чтобы нажатия этих "+" и "-" не пропустить. Как вы комповой клавиатурой пользуетесь? Не мешает ведь то, что она быстро на нажатия реагирует и эти нажатия не пропускает? Видимо нет, т.е. можно сделать все так, что будет работать хорошо для всех, а не только для тех, кто нажимает кнопку и держит до тех пор пока на экране что-то там не обновится. Тем более, как я говорил, опрашивать кнопки 10 раз в сек ничуть не сложнее, чем 3.
Может эту задачу решает проще аналоговая вычислительная машина,то есть конденсатор и резистор на кнопке(интегратор),вместо кучи транзисторов в МК и кодов для них?
Чтобы не плодить сущности.
Последний раз редактировалось главный колбасист Пт ноя 29, 2024 11:30:09, всего редактировалось 1 раз.
Adrift, много людей собрало мои устройства из моих тем на этом форуме, но ни один не пожаловался на работу кнопок. так что, кнопки у меня работают хорошо для всех, а не только для меня.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Для тех, кто не собрал - они вообще не работают!!!
А антидребезг нужен, когда обработчик быстрый. Что б одно нажатие "+" не превратилось в 100500 инкрементов.
Большой период опроса - тоже алгоритм антидребезга. И под этот период опроса нужно заводить отдельный таймер. Либо все процессы, если позволяет алгоритм, вязать к этому периоду. А если периоды опроса разные - 3 раза в сек и 100 раз в сек - то нужно делать таймеры индивидуально под каждый период. Все зависит от общего алгоритма программы и концепции обработки событий, внешних и внутренних. (Здесь под таймерами я имею ввиду не Т0/1/2/..., а программные счетчики, базирующиеся на каком то опорном временОм событии.)
Ну и походу спор плавно переполз в оффтоп для ассемблера... По кнопкам была отдельная тема где то...
А антидребезг нужен, когда обработчик быстрый. Что б одно нажатие "+" не превратилось в 100500 инкрементов.
Just_Fluffy, согласен. Именно ради инкрементов. Я выше рисовал график дребезга и обработку в своём понимании)
Для меня проще оказалось ввести задержку перед возвращением в опрос. Задержка нужна что бы пронаблюдать и осмыслить изменения которые произошли (на дисплее или ещё как система отреагировала). И однажды я понял, что использую эти задержки вместе с антидребезгом. Поэтому от антидребезга и отказался.
И да) задержки подстраиваю под себя. И они у меня локальные, а не глобально в цикле опроса порта)
shonty, если алгоритм основной программы разрешает задержки - то можно и так. Но в моем понимании антидребезг нужен не только как устранение собственно дребезга, а и как защита от помех и рандомных коротких нажатий сторонними предметами ... Ибо в моем понимании человек не может нажать кнопку на 2-5-7 мс. Соответственно, если нажатие длится менее какого то времени - это не нажатие. А в вашем случае будет сработка....
Для медленных систем /режим МК без генератора, МК только как управление/ всегда использую простой метод: кнопка/и: цифровое чтение (в LOW), пауза, цифровое чтение (в LOW). Если второе чтение "Да" - выполняем. Пауза 20 или 30 ms. Не занимает места в памятья, исключены любые проблемы bounce, MK работают примерно в 10 см от мощных электромагнитных полей (напр. около УМ 4*ГУ-50, МК на сантиметрах от П-фильтра). Отдавна принял активный "LOW" - гораздо более помехоустойчив, по крайней мере на столе с TRX и любых сигналах на проводах и в ефире вокруг МК.
В прошлом напр. протестировал 5-7 способов. Таймеры, специальные функции, много способов. В последнее время изпользую только простой метод. Почти всегда без едного конденсатора на шине. Иногда даже с внурт. pull-up из MK. Правда, с одной кнопкой, используемой в течение длительного периода, проводил исследование, было интересно. Bounce импульсы былы более 50 ms, много "иголок". Конечно кнопка: в корзину, но бывают и такие случаи. (частично пользуюсь переводчиком БГ->РУ)
Последний раз редактировалось veso74 Пт ноя 29, 2024 11:55:46, всего редактировалось 3 раз(а).
Just_Fluffy, да, в моём случае сработает. Подобно триггеру. Вы писали про алгоритмы, а я пишу про концепцию
Добавлено after 1 hour 14 minutes 29 seconds: Кстати, поинтересовался, есть ли антидребезг в клавиатурном контроллере типа tm1637: из ДШ, пишут что 键扫描(8×2bit), 增强型抗干扰按键识别电路 (Сканирование ключей (8×2 бит), улучшенная схема распознавания ключей с защитой от помех) Аппаратно наверное
А если периоды опроса разные - 3 раза в сек и 100 раз в сек - то нужно делать таймеры индивидуально под каждый период.
у меня в вышеописанном случае есть программный таймер по 10 мс. и есть счетчик по 10 мс. каждые 10 мс опрашивается кнопка Пуск/Стоп и другой счетчик считает число "нажатых" опросов этой кнопки. состояния счетчика по 10 мс разбиваются на 3 интервала - 33 (330 мс), 66 (660 мс) и 100 (1 сек), состояние счетчика 100 сбрасывает его на ноль. вот в эти 3 интервала происходит опрос кнопок + и -. и если тебе угодно, счетчик по 10 мс можешь называть тоже программным таймером, так как он в итоге отмеряет 1 секунду.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Защита от дребезга – простая задача. Надо дождаться, когда дребезг закончиться, тогда можно считывать положения кнопок. Я использовал простой вариант – программа считывает порт с кнопками 3 раза с интервалом 30 миллисекунд в 3 регистра РОН, например, r20, r21 и r22. Если r21 не равно r20, то начинаю считывать сначала. Когда все 3 регистра равны, то дребезг закончился, это реальное состояние кнопок. Плюсы такого решения. - Программа простейшая, можно написать за несколько минут. Не нужно никаких таймеров, независимых, параллельных, сквозных, вертикальных, горизонтальных и перпендикулярных счётчиков. - Всегда быстрая реакция на кнопки. В ассемблере обычно программа крутиться по кругу и довольно быстро, скажем, 10 мс, получается время реакции около 0,1 секунды, неплохо. Если круг длительный, можно вставить несколько команд считывания кнопок, время реакции сократиться. Командой называю строчку вызова программы считывания кнопок. - Можно считывать нажатие нескольких кнопок, это нередко бывает необходимо.
А кто-нибудь пробовал подсчитать процент неудачных срабатываний?
Добавлено after 3 minutes 45 seconds: Думаю что целесообразность борьбы с дребезгом должна вытекать из статистики ))
Не нужна статистика. Исправные кнопки должны работать чётко и стабильно. Если это не так, то, похоже, разработчик выбрал излишне сложный алгоритм и запутался в «горизонтальных и вертикальных» счётчиках. Если ли всё же интересует статистика, то ведь есть клавиатура и мышка, там кнопки стоят и используются интенсивно. За много лет работы не помню ни одного сбоя кнопок – вот и вся статистика.
чет тема про ассемблер в оффтоп скатывается... Давайте лучше такой микроконкурс объявим: минимальный код на асме AVR , что б поменять порядок следования бит в двухбайтовой переменной (АБВГ ДЕЖЗ ИЙКЛ МНОП --> ПОНМ ЛКЙИ ЗЖЕД ГВБА) Или вот такой - определить, что в байте единичный только 1 бит, все остальные в нуле.
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт дек 06, 2024 18:00:21
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19733 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Открыл для себя книжку "Алгоритмические трюки для программистов"?)
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Или вот такой - определить, что в байте единичный только 1 бит, все остальные в нуле.
Тоже через 256 байтную таблицу тремя командами, загрузить регистр из таблицы со смещением в исследуемом байте, вычесть регистр из регистра, проверить на ноль. В таблице все байты должны быть нулевыми, кроме восьми, содержащих один бит в соответствующих позициях и байта по нулевому смещению, который должен быть любым, кроме нуля.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения