Обсуждаем контроллеры компании Atmel.
Ответить

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт ноя 29, 2024 08:39:29

зачем мне опрашивать "+" и "-" чаще, если промежуточные опросы не несут никакой информации?

Затем чтобы нажатия этих "+" и "-" не пропустить. Как вы комповой клавиатурой пользуетесь? Не мешает ведь то, что она быстро на нажатия реагирует и эти нажатия не пропускает? Видимо нет, т.е. можно сделать все так, что будет работать хорошо для всех, а не только для тех, кто нажимает кнопку и держит до тех пор пока на экране что-то там не обновится. Тем более, как я говорил, опрашивать кнопки 10 раз в сек ничуть не сложнее, чем 3.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт ноя 29, 2024 08:59:02

Может эту задачу решает проще аналоговая вычислительная машина,то есть конденсатор и резистор на кнопке(интегратор),вместо кучи транзисторов в МК и кодов для них?

Чтобы не плодить сущности.
Последний раз редактировалось главный колбасист Пт ноя 29, 2024 11:30:09, всего редактировалось 1 раз.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт ноя 29, 2024 09:17:12

Adrift, много людей собрало мои устройства из моих тем на этом форуме, но ни один не пожаловался на работу кнопок. так что, кнопки у меня работают хорошо для всех, а не только для меня.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт ноя 29, 2024 09:24:36

Starichok51 писал(а):так что, кнопки у меня работают хорошо для всех,
тут ошибочка логическая)

кнопки работают хорошо, только для всех кто собрал :)
что дааалеко не для всех))

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт ноя 29, 2024 10:33:38

ну да, а для тех, кто не собрал - работают плохо.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт ноя 29, 2024 10:56:29

Для тех, кто не собрал - они вообще не работают!!! :))

А антидребезг нужен, когда обработчик быстрый. Что б одно нажатие "+" не превратилось в 100500 инкрементов.

Большой период опроса - тоже алгоритм антидребезга. И под этот период опроса нужно заводить отдельный таймер. Либо все процессы, если позволяет алгоритм, вязать к этому периоду.
А если периоды опроса разные - 3 раза в сек и 100 раз в сек - то нужно делать таймеры индивидуально под каждый период. Все зависит от общего алгоритма программы и концепции обработки событий, внешних и внутренних.
(Здесь под таймерами я имею ввиду не Т0/1/2/..., а программные счетчики, базирующиеся на каком то опорном временОм событии.)

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

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт ноя 29, 2024 11:19:21

Just_Fluffy писал(а):А антидребезг нужен, когда обработчик быстрый. Что б одно нажатие "+" не превратилось в 100500 инкрементов.
Just_Fluffy, согласен. Именно ради инкрементов.
Я выше рисовал график дребезга и обработку в своём понимании)

Для меня проще оказалось ввести задержку перед возвращением в опрос. Задержка нужна что бы пронаблюдать и осмыслить изменения которые произошли (на дисплее или ещё как система отреагировала).
И однажды я понял, что использую эти задержки вместе с антидребезгом. Поэтому от антидребезга и отказался.

И да) задержки подстраиваю под себя. И они у меня локальные, а не глобально в цикле опроса порта)

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт ноя 29, 2024 11:37:53

shonty, если алгоритм основной программы разрешает задержки - то можно и так.
Но в моем понимании антидребезг нужен не только как устранение собственно дребезга, а и как защита от помех и рандомных коротких нажатий сторонними предметами ...
Ибо в моем понимании человек не может нажать кнопку на 2-5-7 мс. Соответственно, если нажатие длится менее какого то времени - это не нажатие. А в вашем случае будет сработка....

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт ноя 29, 2024 11:47:55

Для медленных систем /режим МК без генератора, МК только как управление/ всегда использую простой метод: кнопка/и: цифровое чтение (в 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 раз(а).

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт ноя 29, 2024 13:06:56

Just_Fluffy писал(а):А в вашем случае будет сработка..
Just_Fluffy, да, в моём случае сработает. Подобно триггеру.
Вы писали про алгоритмы, а я пишу про концепцию :)

Добавлено after 1 hour 14 minutes 29 seconds:
Кстати, поинтересовался, есть ли антидребезг в клавиатурном контроллере типа tm1637:
из ДШ, пишут что 键扫描(8×2bit), 增强型抗干扰按键识别电路 (Сканирование ключей (8×2 бит), улучшенная схема распознавания ключей с защитой от помех)
Аппаратно наверное Изображение

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт ноя 29, 2024 14:19:03

Just_Fluffy писал(а):А если периоды опроса разные - 3 раза в сек и 100 раз в сек - то нужно делать таймеры индивидуально под каждый период.
у меня в вышеописанном случае есть программный таймер по 10 мс. и есть счетчик по 10 мс.
каждые 10 мс опрашивается кнопка Пуск/Стоп и другой счетчик считает число "нажатых" опросов этой кнопки.
состояния счетчика по 10 мс разбиваются на 3 интервала - 33 (330 мс), 66 (660 мс) и 100 (1 сек), состояние счетчика 100 сбрасывает его на ноль. вот в эти 3 интервала происходит опрос кнопок + и -.
и если тебе угодно, счетчик по 10 мс можешь называть тоже программным таймером, так как он в итоге отмеряет 1 секунду.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Ср дек 04, 2024 20:47:55

Защита от дребезга – простая задача.
Надо дождаться, когда дребезг закончиться, тогда можно считывать положения кнопок.
Я использовал простой вариант – программа считывает порт с кнопками 3 раза с интервалом 30 миллисекунд в 3 регистра РОН, например, r20, r21 и r22. Если r21 не равно r20, то начинаю считывать сначала. Когда все 3 регистра равны, то дребезг закончился, это реальное состояние кнопок.
Плюсы такого решения.
- Программа простейшая, можно написать за несколько минут. Не нужно никаких таймеров, независимых, параллельных, сквозных, вертикальных, горизонтальных и перпендикулярных счётчиков.
- Всегда быстрая реакция на кнопки. В ассемблере обычно программа крутиться по кругу и довольно быстро, скажем, 10 мс, получается время реакции около 0,1 секунды, неплохо. Если круг длительный, можно вставить несколько команд считывания кнопок, время реакции сократиться. Командой называю строчку вызова программы считывания кнопок.
- Можно считывать нажатие нескольких кнопок, это нередко бывает необходимо.

А если серьёзно, то мелкие кнопки совсем дребезжащие. Да и изнашиваются. Вон, в данный момент на мышке правая кнопка все нервы портит в Протеусе.(

Замените кнопку, она стоит копейки, берегите нервы.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Ср дек 04, 2024 20:57:48

А кто-нибудь пробовал подсчитать процент неудачных срабатываний?

Добавлено after 3 minutes 45 seconds:
Думаю что целесообразность борьбы с дребезгом должна вытекать из статистики ))

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт дек 06, 2024 11:23:05

А кто-нибудь пробовал подсчитать процент неудачных срабатываний?

Добавлено after 3 minutes 45 seconds:
Думаю что целесообразность борьбы с дребезгом должна вытекать из статистики ))

Не нужна статистика. Исправные кнопки должны работать чётко и стабильно.
Если это не так, то, похоже, разработчик выбрал излишне сложный алгоритм и запутался в «горизонтальных и вертикальных» счётчиках.
Если ли всё же интересует статистика, то ведь есть клавиатура и мышка, там кнопки стоят и используются интенсивно. За много лет работы не помню ни одного сбоя кнопок – вот и вся статистика.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт дек 06, 2024 17:12:16

чет тема про ассемблер в оффтоп скатывается...
Давайте лучше такой микроконкурс объявим:
минимальный код на асме AVR , что б поменять порядок следования бит в двухбайтовой переменной (АБВГ ДЕЖЗ ИЙКЛ МНОП --> ПОНМ ЛКЙИ ЗЖЕД ГВБА)
Или вот такой - определить, что в байте единичный только 1 бит, все остальные в нуле.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт дек 06, 2024 18:00:21

Открыл для себя книжку "Алгоритмические трюки для программистов"?)

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт дек 06, 2024 18:16:15

Gudd-Head, нет, не открыла. Просто 2 страницы обсуждаем алгоритмы, а не ассемблер. Поэтому захотелось разбавить оффтоп ассемблером )))))

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт дек 06, 2024 18:59:55

Just_Fluffy писал(а):минимальный код на асме AVR , что б поменять порядок следования бит в двухбайтовой переменной (АБВГ ДЕЖЗ ИЙКЛ МНОП --> ПОНМ ЛКЙИ ЗЖЕД ГВБА)
элементарно, Ватсон!
сдвигаем эту пару регистров вправо, а потом из переноса в другую пару регистров влево. и копируем вторую пару в первую.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт дек 06, 2024 19:33:44

Just_Fluffy писал(а):минимальный код на асме AVR , что б поменять порядок следования бит в двухбайтовой переменной (АБВГ ДЕЖЗ ИЙКЛ МНОП --> ПОНМ ЛКЙИ ЗЖЕД ГВБА)
элементарно, Ватсон!
сдвигаем эту пару регистров вправо, а потом из переноса в другую пару регистров влево. и копируем вторую пару в первую.

Медленно. Даже совсем в лоб, через 256 байтную таблицу получится намного быстрее.

Добавлено after 10 minutes 27 seconds:
Или вот такой - определить, что в байте единичный только 1 бит, все остальные в нуле.

Тоже через 256 байтную таблицу тремя командами, загрузить регистр из таблицы со смещением в исследуемом байте, вычесть регистр из регистра, проверить на ноль. В таблице все байты должны быть нулевыми, кроме восьми, содержащих один бит в соответствующих позициях и байта по нулевому смещению, который должен быть любым, кроме нуля.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт дек 06, 2024 20:47:04

Gudd-Head, нет, не открыла.

А зря (или пиздишь).
Изображение
Ответить