Ассемблер (ASM) для AVR в вопросах и ответах
Re: Ассемблер (ASM) для AVR в вопросах и ответах
[uquote="Starichok51",url="/forum/viewtopic.php?p=4654393#p4654393"]зачем мне опрашивать "+" и "-" чаще, если промежуточные опросы не несут никакой информации?[/uquote]
Затем чтобы нажатия этих "+" и "-" не пропустить. Как вы комповой клавиатурой пользуетесь? Не мешает ведь то, что она быстро на нажатия реагирует и эти нажатия не пропускает? Видимо нет, т.е. можно сделать все так, что будет работать хорошо для всех, а не только для тех, кто нажимает кнопку и держит до тех пор пока на экране что-то там не обновится. Тем более, как я говорил, опрашивать кнопки 10 раз в сек ничуть не сложнее, чем 3.
Затем чтобы нажатия этих "+" и "-" не пропустить. Как вы комповой клавиатурой пользуетесь? Не мешает ведь то, что она быстро на нажатия реагирует и эти нажатия не пропускает? Видимо нет, т.е. можно сделать все так, что будет работать хорошо для всех, а не только для тех, кто нажимает кнопку и держит до тех пор пока на экране что-то там не обновится. Тем более, как я говорил, опрашивать кнопки 10 раз в сек ничуть не сложнее, чем 3.
- главный колбасист
- Это не хвост, это антенна
- Сообщения: 1324
- Зарегистрирован: Чт авг 21, 2014 11:11:48
- Откуда: краснодарский край
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Может эту задачу решает проще аналоговая вычислительная машина,то есть конденсатор и резистор на кнопке(интегратор),вместо кучи транзисторов в МК и кодов для них?
Чтобы не плодить сущности.
Чтобы не плодить сущности.
Последний раз редактировалось главный колбасист Пт ноя 29, 2024 11:30:09, всего редактировалось 1 раз.
- Starichok51
- Модератор
- Сообщения: 19045
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Adrift, много людей собрало мои устройства из моих тем на этом форуме, но ни один не пожаловался на работу кнопок. так что, кнопки у меня работают хорошо для всех, а не только для меня.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
тут ошибочка логическая)Starichok51 писал(а):так что, кнопки у меня работают хорошо для всех,
кнопки работают хорошо, только для всех кто собрал
что дааалеко не для всех))
- Starichok51
- Модератор
- Сообщения: 19045
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
ну да, а для тех, кто не собрал - работают плохо.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
- Just_Fluffy
- Вымогатель припоя
- Сообщения: 532
- Зарегистрирован: Ср июн 29, 2022 16:25:45
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Для тех, кто не собрал - они вообще не работают!!!
А антидребезг нужен, когда обработчик быстрый. Что б одно нажатие "+" не превратилось в 100500 инкрементов.
Большой период опроса - тоже алгоритм антидребезга. И под этот период опроса нужно заводить отдельный таймер. Либо все процессы, если позволяет алгоритм, вязать к этому периоду.
А если периоды опроса разные - 3 раза в сек и 100 раз в сек - то нужно делать таймеры индивидуально под каждый период. Все зависит от общего алгоритма программы и концепции обработки событий, внешних и внутренних.
(Здесь под таймерами я имею ввиду не Т0/1/2/..., а программные счетчики, базирующиеся на каком то опорном временОм событии.)
Ну и походу спор плавно переполз в оффтоп для ассемблера... По кнопкам была отдельная тема где то...
А антидребезг нужен, когда обработчик быстрый. Что б одно нажатие "+" не превратилось в 100500 инкрементов.
Большой период опроса - тоже алгоритм антидребезга. И под этот период опроса нужно заводить отдельный таймер. Либо все процессы, если позволяет алгоритм, вязать к этому периоду.
А если периоды опроса разные - 3 раза в сек и 100 раз в сек - то нужно делать таймеры индивидуально под каждый период. Все зависит от общего алгоритма программы и концепции обработки событий, внешних и внутренних.
(Здесь под таймерами я имею ввиду не Т0/1/2/..., а программные счетчики, базирующиеся на каком то опорном временОм событии.)
Ну и походу спор плавно переполз в оффтоп для ассемблера... По кнопкам была отдельная тема где то...
Белая и Пушистая
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Just_Fluffy, согласен. Именно ради инкрементов.Just_Fluffy писал(а):А антидребезг нужен, когда обработчик быстрый. Что б одно нажатие "+" не превратилось в 100500 инкрементов.
Я выше рисовал график дребезга и обработку в своём понимании)
Для меня проще оказалось ввести задержку перед возвращением в опрос. Задержка нужна что бы пронаблюдать и осмыслить изменения которые произошли (на дисплее или ещё как система отреагировала).
И однажды я понял, что использую эти задержки вместе с антидребезгом. Поэтому от антидребезга и отказался.
И да) задержки подстраиваю под себя. И они у меня локальные, а не глобально в цикле опроса порта)
- Just_Fluffy
- Вымогатель припоя
- Сообщения: 532
- Зарегистрирован: Ср июн 29, 2022 16:25:45
Re: Ассемблер (ASM) для AVR в вопросах и ответах
shonty, если алгоритм основной программы разрешает задержки - то можно и так.
Но в моем понимании антидребезг нужен не только как устранение собственно дребезга, а и как защита от помех и рандомных коротких нажатий сторонними предметами ...
Ибо в моем понимании человек не может нажать кнопку на 2-5-7 мс. Соответственно, если нажатие длится менее какого то времени - это не нажатие. А в вашем случае будет сработка....
Но в моем понимании антидребезг нужен не только как устранение собственно дребезга, а и как защита от помех и рандомных коротких нажатий сторонними предметами ...
Ибо в моем понимании человек не может нажать кнопку на 2-5-7 мс. Соответственно, если нажатие длится менее какого то времени - это не нажатие. А в вашем случае будет сработка....
Белая и Пушистая
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1905
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Для медленных систем /режим МК без генератора, МК только как управление/ всегда использую простой метод: кнопка/и: цифровое чтение (в LOW), пауза, цифровое чтение (в LOW). Если второе чтение "Да" - выполняем. Пауза 20 или 30 ms. Не занимает места в памятья, исключены любые проблемы bounce, MK работают примерно в 10 см от мощных электромагнитных полей (напр. около УМ 4*ГУ-50, МК на сантиметрах от П-фильтра). Отдавна принял активный "LOW" - гораздо более помехоустойчив, по крайней мере на столе с TRX и любых сигналах на проводах и в ефире вокруг МК.
В прошлом напр. протестировал 5-7 способов. Таймеры, специальные функции, много способов. В последнее время изпользую только простой метод. Почти всегда без едного конденсатора на шине. Иногда даже с внурт. pull-up из MK. Правда, с одной кнопкой, используемой в течение длительного периода, проводил исследование, было интересно. Bounce импульсы былы более 50 ms, много "иголок". Конечно кнопка: в корзину, но бывают и такие случаи. (частично пользуюсь переводчиком БГ->РУ)
В прошлом напр. протестировал 5-7 способов. Таймеры, специальные функции, много способов. В последнее время изпользую только простой метод. Почти всегда без едного конденсатора на шине. Иногда даже с внурт. pull-up из MK. Правда, с одной кнопкой, используемой в течение длительного периода, проводил исследование, было интересно. Bounce импульсы былы более 50 ms, много "иголок". Конечно кнопка: в корзину, но бывают и такие случаи. (частично пользуюсь переводчиком БГ->РУ)
Последний раз редактировалось veso74 Пт ноя 29, 2024 11:55:46, всего редактировалось 3 раза.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Just_Fluffy, да, в моём случае сработает. Подобно триггеру.Just_Fluffy писал(а):А в вашем случае будет сработка..
Вы писали про алгоритмы, а я пишу про концепцию
Добавлено after 1 hour 14 minutes 29 seconds:
Кстати, поинтересовался, есть ли антидребезг в клавиатурном контроллере типа tm1637:
из ДШ, пишут что 键扫描(8×2bit), 增强型抗干扰按键识别电路 (Сканирование ключей (8×2 бит), улучшенная схема распознавания ключей с защитой от помех)
Аппаратно наверное

- Starichok51
- Модератор
- Сообщения: 19045
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
у меня в вышеописанном случае есть программный таймер по 10 мс. и есть счетчик по 10 мс.Just_Fluffy писал(а):А если периоды опроса разные - 3 раза в сек и 100 раз в сек - то нужно делать таймеры индивидуально под каждый период.
каждые 10 мс опрашивается кнопка Пуск/Стоп и другой счетчик считает число "нажатых" опросов этой кнопки.
состояния счетчика по 10 мс разбиваются на 3 интервала - 33 (330 мс), 66 (660 мс) и 100 (1 сек), состояние счетчика 100 сбрасывает его на ноль. вот в эти 3 интервала происходит опрос кнопок + и -.
и если тебе угодно, счетчик по 10 мс можешь называть тоже программным таймером, так как он в итоге отмеряет 1 секунду.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Защита от дребезга – простая задача.
Надо дождаться, когда дребезг закончиться, тогда можно считывать положения кнопок.
Я использовал простой вариант – программа считывает порт с кнопками 3 раза с интервалом 30 миллисекунд в 3 регистра РОН, например, r20, r21 и r22. Если r21 не равно r20, то начинаю считывать сначала. Когда все 3 регистра равны, то дребезг закончился, это реальное состояние кнопок.
Плюсы такого решения.
- Программа простейшая, можно написать за несколько минут. Не нужно никаких таймеров, независимых, параллельных, сквозных, вертикальных, горизонтальных и перпендикулярных счётчиков.
- Всегда быстрая реакция на кнопки. В ассемблере обычно программа крутиться по кругу и довольно быстро, скажем, 10 мс, получается время реакции около 0,1 секунды, неплохо. Если круг длительный, можно вставить несколько команд считывания кнопок, время реакции сократиться. Командой называю строчку вызова программы считывания кнопок.
- Можно считывать нажатие нескольких кнопок, это нередко бывает необходимо.
[uquote="OKF",url="/forum/viewtopic.php?p=4653829#p4653829"]А если серьёзно, то мелкие кнопки совсем дребезжащие. Да и изнашиваются. Вон, в данный момент на мышке правая кнопка все нервы портит в Протеусе.([/uquote]
Замените кнопку, она стоит копейки, берегите нервы.
Надо дождаться, когда дребезг закончиться, тогда можно считывать положения кнопок.
Я использовал простой вариант – программа считывает порт с кнопками 3 раза с интервалом 30 миллисекунд в 3 регистра РОН, например, r20, r21 и r22. Если r21 не равно r20, то начинаю считывать сначала. Когда все 3 регистра равны, то дребезг закончился, это реальное состояние кнопок.
Плюсы такого решения.
- Программа простейшая, можно написать за несколько минут. Не нужно никаких таймеров, независимых, параллельных, сквозных, вертикальных, горизонтальных и перпендикулярных счётчиков.
- Всегда быстрая реакция на кнопки. В ассемблере обычно программа крутиться по кругу и довольно быстро, скажем, 10 мс, получается время реакции около 0,1 секунды, неплохо. Если круг длительный, можно вставить несколько команд считывания кнопок, время реакции сократиться. Командой называю строчку вызова программы считывания кнопок.
- Можно считывать нажатие нескольких кнопок, это нередко бывает необходимо.
[uquote="OKF",url="/forum/viewtopic.php?p=4653829#p4653829"]А если серьёзно, то мелкие кнопки совсем дребезжащие. Да и изнашиваются. Вон, в данный момент на мышке правая кнопка все нервы портит в Протеусе.([/uquote]
Замените кнопку, она стоит копейки, берегите нервы.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А кто-нибудь пробовал подсчитать процент неудачных срабатываний?
Добавлено after 3 minutes 45 seconds:
Думаю что целесообразность борьбы с дребезгом должна вытекать из статистики ))
Добавлено after 3 minutes 45 seconds:
Думаю что целесообразность борьбы с дребезгом должна вытекать из статистики ))
Re: Ассемблер (ASM) для AVR в вопросах и ответах
[uquote="shonty",url="/forum/viewtopic.php?p=4656412#p4656412"]А кто-нибудь пробовал подсчитать процент неудачных срабатываний?
Добавлено after 3 minutes 45 seconds:
Думаю что целесообразность борьбы с дребезгом должна вытекать из статистики ))[/uquote]
Не нужна статистика. Исправные кнопки должны работать чётко и стабильно.
Если это не так, то, похоже, разработчик выбрал излишне сложный алгоритм и запутался в «горизонтальных и вертикальных» счётчиках.
Если ли всё же интересует статистика, то ведь есть клавиатура и мышка, там кнопки стоят и используются интенсивно. За много лет работы не помню ни одного сбоя кнопок – вот и вся статистика.
Добавлено after 3 minutes 45 seconds:
Думаю что целесообразность борьбы с дребезгом должна вытекать из статистики ))[/uquote]
Не нужна статистика. Исправные кнопки должны работать чётко и стабильно.
Если это не так, то, похоже, разработчик выбрал излишне сложный алгоритм и запутался в «горизонтальных и вертикальных» счётчиках.
Если ли всё же интересует статистика, то ведь есть клавиатура и мышка, там кнопки стоят и используются интенсивно. За много лет работы не помню ни одного сбоя кнопок – вот и вся статистика.
- Just_Fluffy
- Вымогатель припоя
- Сообщения: 532
- Зарегистрирован: Ср июн 29, 2022 16:25:45
Re: Ассемблер (ASM) для AVR в вопросах и ответах
чет тема про ассемблер в оффтоп скатывается...
Давайте лучше такой микроконкурс объявим:
минимальный код на асме AVR , что б поменять порядок следования бит в двухбайтовой переменной (АБВГ ДЕЖЗ ИЙКЛ МНОП --> ПОНМ ЛКЙИ ЗЖЕД ГВБА)
Или вот такой - определить, что в байте единичный только 1 бит, все остальные в нуле.
Давайте лучше такой микроконкурс объявим:
минимальный код на асме AVR , что б поменять порядок следования бит в двухбайтовой переменной (АБВГ ДЕЖЗ ИЙКЛ МНОП --> ПОНМ ЛКЙИ ЗЖЕД ГВБА)
Или вот такой - определить, что в байте единичный только 1 бит, все остальные в нуле.
Белая и Пушистая
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Открыл для себя книжку "Алгоритмические трюки для программистов"?)
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Just_Fluffy
- Вымогатель припоя
- Сообщения: 532
- Зарегистрирован: Ср июн 29, 2022 16:25:45
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Gudd-Head, нет, не открыла. Просто 2 страницы обсуждаем алгоритмы, а не ассемблер. Поэтому захотелось разбавить оффтоп ассемблером )))))
Белая и Пушистая
- Starichok51
- Модератор
- Сообщения: 19045
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
элементарно, Ватсон!Just_Fluffy писал(а):минимальный код на асме AVR , что б поменять порядок следования бит в двухбайтовой переменной (АБВГ ДЕЖЗ ИЙКЛ МНОП --> ПОНМ ЛКЙИ ЗЖЕД ГВБА)
сдвигаем эту пару регистров вправо, а потом из переноса в другую пару регистров влево. и копируем вторую пару в первую.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
- ПростоНуб
- Собутыльник Кота
- Сообщения: 2723
- Зарегистрирован: Пт сен 07, 2018 20:20:02
- Откуда: деревня в Тульской губернии
Re: Ассемблер (ASM) для AVR в вопросах и ответах
[uquote="Starichok51",url="/forum/viewtopic.php?p=4657279#p4657279"]
сдвигаем эту пару регистров вправо, а потом из переноса в другую пару регистров влево. и копируем вторую пару в первую.[/uquote]
Медленно. Даже совсем в лоб, через 256 байтную таблицу получится намного быстрее.
Добавлено after 10 minutes 27 seconds:
[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4657244#p4657244"]Или вот такой - определить, что в байте единичный только 1 бит, все остальные в нуле.[/uquote]
Тоже через 256 байтную таблицу тремя командами, загрузить регистр из таблицы со смещением в исследуемом байте, вычесть регистр из регистра, проверить на ноль. В таблице все байты должны быть нулевыми, кроме восьми, содержащих один бит в соответствующих позициях и байта по нулевому смещению, который должен быть любым, кроме нуля.
элементарно, Ватсон!Just_Fluffy писал(а):минимальный код на асме AVR , что б поменять порядок следования бит в двухбайтовой переменной (АБВГ ДЕЖЗ ИЙКЛ МНОП --> ПОНМ ЛКЙИ ЗЖЕД ГВБА)
сдвигаем эту пару регистров вправо, а потом из переноса в другую пару регистров влево. и копируем вторую пару в первую.[/uquote]
Медленно. Даже совсем в лоб, через 256 байтную таблицу получится намного быстрее.
Добавлено after 10 minutes 27 seconds:
[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4657244#p4657244"]Или вот такой - определить, что в байте единичный только 1 бит, все остальные в нуле.[/uquote]
Тоже через 256 байтную таблицу тремя командами, загрузить регистр из таблицы со смещением в исследуемом байте, вычесть регистр из регистра, проверить на ноль. В таблице все байты должны быть нулевыми, кроме восьми, содержащих один бит в соответствующих позициях и байта по нулевому смещению, который должен быть любым, кроме нуля.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4657259#p4657259"]Gudd-Head, нет, не открыла.[/uquote]
А зря (или пиздишь).

А зря (или пиздишь).

[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]