Как поместить цикл в case оператора switch

Обсуждаем контроллеры компании Atmel.
Ответить
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Пример в студию. Без комментариев. Готовый проект. 3 кнопки. 3 выхода. Подавление дребезга.
Контактная информация:
Реклама
Опытный кот
Аватара пользователя
Сообщения: 848
Зарегистрирован: Ср авг 03, 2022 05:22:56

Сообщение MLX90640 »

Подавление дребезга? Давайте разберемся. Возможно, у вас снова случится разрыв шаблона, но тем не менее...
Входы кнопок опрашиваются с некоторыми интервалами времени (за исключением случаев использования прерываний по фронту). На практике, интервал от 5 мс до 50 мс перекрывает дребезг даже довольно разболтанных кнопок. Плюс к этому, конденсатор параллельно кнопке так же фильтрует дребезг. Это обычная, нормальная практика, ничего удивительного. Конденсатор защищает и от случайных выбросов и ошибочных из-за них срабатываний. Если всего этого недостаточно, можно добавить интегрирующий алгоритм.
Реклама
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

:) Пример в студию. От тебя много слов, мало пользы. Зато много слов о том, какой вы опупительный профессионал.

6 страница пошла. Фейспалм.
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 848
Зарегистрирован: Ср авг 03, 2022 05:22:56

Сообщение MLX90640 »

Да я то без проблем, да вот только вы снова не разберетесь в тексте, который не соответствует вашим шаблонам и вашей форме записи. Вы же настолько зашорены своими рамками, что даже не видите иной формы записи того же самого. За вас же беспокоюсь, у вас же снова случится разрыв шаблона и срыв башни :) Еще и днище выбьет :)

Demiurg, вобщем, идите лучше проспитесь :) утро вечера мудреннее. А с утра снова начнете удалять свои мессаги, чтоп стыдно не было :)
Реклама
Эиком - электронные компоненты и радиодетали
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

У меня нет никаких разрывов шаблонов. Не стесняйтесь. Вы 6 страниц показываете, что специалист. И даже графы умеете читать. Пример в студию.
Контактная информация:
Реклама
Открыл глаза
Сообщения: 44
Зарегистрирован: Пн окт 05, 2020 17:20:11

Сообщение uuu000 »

Ребята у меня предложение пока только 6 страниц написали! Подправьте мой код для переключения выходов с фиксацией.
Реклама
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Я тебе пример дал. 3 кнопки. Нажатие каждой кнопки отключает все выходы и переключает соответствующий выход. Пустьмы включили устройство. Все выходы отключены. Нажали 1-ую кнопку, включился 1 -ый выход. Нажали 2-ую кнопку, отключился первый выход, включился второй. Повторное нажатие кнопок выключает соответствующий выход.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15593
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Может таки со схемки начать, а уж под нее и пример нарисовать конкретно.
Иначе это будут только теоретические пространные обсуждения.
8)
Кстати... никто не запрещает и аппаратный антидребезг применять - как на "перекидном контакте" и рассыпухе, так и на специализированных емкостных кнопах...
:roll:
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

В одном промышленном приборе видел rs-триггеры на кнопки. Видать, не хватило тяму тогда программно антидребезг сообразить. :)
Конденсаторы ставить чревато. Могут пины МК выгореть. Плюс, возможное обгорание контактов.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15593
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Не обязательно - все зависит от требований и особенностей устройства.
Когда программа позволяет опрос делать, а когда лишнее время на сканирование не слишком удобно.
Удачнее всего кнопы с антидребезгом при свеодиодном индикаторе "на рассыпухе" уживаются. Или в программе еще какой основной блок непрерывным сканированием выходных (внутренних)линий/условий занят. Да и кнопы с "перекидным контактом" на сегодня относительная редкость.
:roll:
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Опрос кнопок с антидребезгом это всегда выполнение кода, хоть в основном цикле, хоть в прерывании. В моем примере сделано в основном цикле. И вы знаете мой подход. Дробление выполнения всех задач. Итерация основного цикла должна выполняться с запасом в течении системного тика. В моих устройствах даже динамическая индикация часто в основном цикле.

При нынешних мк затраты на подавление антидребезга малы, чтобы воспринимать это как какие то траты ресурсов.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15593
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Просто озвучены возможные варианты.
Это такой же подход, как и использование специализированных микросхем для внешней обвязки устройства (или самодельных на дополнительных МК). Что лучше, а что хуже - это уж остается решать в каждом отдельном случае в зависимости от опыта, знаний и имеющихся ресурсов.
К примеру Воть такая "кнопа" весьма удобна:
https://img.radiokot.ru/files/20529/1g6cmrs760.JPG
https://img.radiokot.ru/files/20529/286589ggbo.jpg
https://img.radiokot.ru/files/20529/2d6voi2hag.jpg
НО... нуждается в подаче питания, а пленочных клавиатур да механических кноп "на замыкание" достаточно много.
В то же время бывают варианты схем, где можно антидребезг заменить на контроль допустимых соседних состояний (как например для энкодера с парой контактов)...
:roll:
Друг Кота
Аватара пользователя
Сообщения: 6668
Зарегистрирован: Пт сен 10, 2021 15:19:36
Откуда: Протвино

Сообщение AlexS4 »

:)) непонимаю о чем речь, устранение дребезга хоть 8 кнопок сразу или матрицы 16x8 никогда не было сколь нибудь ресурсоемкой задачей, даже 40 лет назад с i8048.

наиболее прямой путь это в очень коротком прерывании с периодом 5..50mS отслеживать изменения битов входного порта, всего разом или по маске если менее 8 входов или 2-3 портов если их 16 или 24. вычисление изменений 8входов это 1байт памяти и 2-3 комманд на порт, одна из которых xor )). фиксируем отсутствие изменений между соседними тиками и наличие изменений от зафиксированного значения и понимаем что соответствующие входы изменились. все делается элементарно групповыми битовыми командами без ветвлений. периодом таймера выставляем толерантность к дребезгу. если параноидальная защита от дребезга -отслеживаем/храним состояние всех битов входного слова за несколько более коротких тиков, можно хоть счетчиками набирать тик-кворум :)
Опытный кот
Аватара пользователя
Сообщения: 848
Зарегистрирован: Ср авг 03, 2022 05:22:56

Сообщение MLX90640 »

[uquote="Demiurg",url="/forum/viewtopic.php?p=4301780#p4301780"]Пример в студию.[/uquote]
Да нивапрос :) Однако, предупреждаю относительно разрыва вашего шаблона мЫшления. Структура компоновки файлов, характер использования заголовочных файлов, да и вообще, более сложный АРМ-подобный микроконтроллер порвет ваши рамочные шаблоны вклочья и сорвет крышу :))) Причем, я тут не стал делать метод таблицы переходов, чтобы у вас вдобавок днище не выбило :) Вобщем, "учись, студент"(С) А если будут какие-то недовольства, то есть два варианта: а) вы ничего не поняли и порвали свой шаблон и б) "я художник, я так вижу". Потому что программист должен обладать гибким мышлением и уметь задачу решать гибко, не зашоренно на рамочных шаблонах.

Вложения
Blink.zip
(128.87 КБ) 40 скачиваний
Открыл глаза
Сообщения: 44
Зарегистрирован: Пн окт 05, 2020 17:20:11

Сообщение uuu000 »

А что с моим кодом?
Опытный кот
Аватара пользователя
Сообщения: 848
Зарегистрирован: Ср авг 03, 2022 05:22:56

Сообщение MLX90640 »

Я думаю, сенсей Demiurg должен это сделать, он же мастер. Я то че, я так, шанешки по карманам тырю... :)
В принципе, Demiurg чето ж написал. Наверно оное работает, на первый взгляд вроде всё для этого есть. Даже если нелогично написано, но в принципе, можно попробовать. Пусть он сам ответит за свой код.
uuu000, в вашем коде функции button_KA, button_KA1, button_KA2 должны присваивать разные значения (1, 2, 3) глобальной переменной mode, которая потом будет определять через switch-case, какому светодиоду разрешить мигание. Или хотябы на первых порах просто включение.
Чтобы сделать мигания светодиодов, нужно сделать три счетчика (по одному для каждого светодиода), которые будут декрементироваться одновременно в конце цикла while(1). И как только какой счетчик дойдет до 0 от начального значения, это будет означать истечение интервала. Можно через if(cnt1 == 0) переключить светодиод на противоположное состояние, а переменной cnt1 заново задать начальное значение. Для остальных счетчиков так же.
Теперь, чтобы разрешать и запрещать мигания, можно разрешать или запрещать декременты счетчиков cnt1, cnt2, cnt3. Или же наоборот, при работающих счетчиках через доп.проверку условия переключать светодиод или принудительно оставлять его выключенным.
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

MLX90640, Не впечатлил. Не соответствует твоим заявлениям о гениальности, умению читать графы, гибкости мышления, отсутствия шаблонов.
Я ради интереса глянул с чего наш спор вообще начался. Ладно я тогда выпил, меня подзанесло. А ты то что закусился? Якобы затронул твою шаблонность?
По видео. Что то ты быстро отснял. Ты слишком быстро понажимал кнопки, не совсем понятно, как ведут себя выходы.
По коду. Некоторые моменты у нас схожи. Местами нормально написано, местами коряво. Грубо, небрежно, второпях. Невнятные названия переменных. Ты такой типа крутой программер, что тебе плевать, что после тебя будут разбираться с кодом. Особенно начинающие. Как ТС. К примеру.
Вывод. Мы с тобой некоторые места написали практически идентично. Типа шаришь. Но ты небрежен. И совсем не уважаешь участников этого форума. Мне есть с чем сравнивать. Когда то учился у спецов с профильных форумов.

Автор Кирилл. Не Питер случайно?
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 848
Зарегистрирован: Ср авг 03, 2022 05:22:56

Сообщение MLX90640 »

Ну что и ожидалось, у вас произошел разрыв шаблона :)
Ты слишком быстро понажимал кнопки, не совсем понятно, как ведут себя выходы.
Млляяя... Ну у ютуба есть уменьшение скорости в 4 раза. Там сделано всё то, что хотел топикстартер - три МИГАЮЩИЕ светодиода с разной частотой. Нажатие на кн.1 включает мигание светика1, нажатие на кн.2 включает мигание светика 2, нажатие на кн.3 - мигание светика 3. Повторное нажатие ТОЙ ЖЕ кнопки - выключает мигание светика.

По коду. Ну так это общепринятая практика. Формат Doxygen, подписаны описания, и некоторые примеры. Это ж "модульность, инкапсуляция", как вы заявляли и чего у вас не получилось :)
Брежно или небрежно, но это общепринятая практика - разделять мухи от котлет и лошадей от коней :) Уровни абстракции кода, понимашь ли.

Если "уважать участников форума", то... извините, под каждого не подстроишься. У кого-то такие шаблоны, у кого-то другие. Вон, у топикстартера вообще всё иначе. Я примерно так писал на этапах познавания программирования.
Ну а если учесть, что я уже 10 лет как не работаю с АВР, то я не могу писать так, как топикстартер. Я попытался написать попроще, без излишеств, наглядно-глядельно, даже блок-схему участка кода привел. Вы начали возмущаться. Ну чтож тут поделать то. Под всех не подстроишься. Особенно когда есть общепринятая практика.
Не Питер случайно?
Нее, не Питер, хотя там каждый год бываю
учился у спецов с профильных форумов.
Ммм... А я по книжкам учился, по-старинке. У авторов языка программирования и по мануалам производителей МК.
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Ты все таки нездоров на голову в плане офигенного раздутого самомнения. У спецов, это значит, что мне есть с чем сравнивать. Ты уже по нескольким пунктам в этом топике налажал. Не впечатлил.
Так что выдохни. И с этого момента ты пишешь только конструктив. Не то какой ты опупительный спец (не доказал). Не то, какой наш уровень. (не доказал, не тебе судить). Сугубо по делу.
Если арм-щик иди и там доказывай свою состоятельность. Здесь тема AVR.
Я сегодня занят. Пока пример программных таймеров и как помигать светодиодом. Пример старый. Завтра попробую накидать под твой запрос. Три кнопки, три выхода.
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 848
Зарегистрирован: Ср авг 03, 2022 05:22:56

Сообщение MLX90640 »

Нет, ну я же предупреждал об опасности разрыва вашего шаблона. А вы непослушались. Вот щас у вас днище и выбивает.
Впечатлил или невпечатлил, а я не актер, чтобы впечатлять. Ну и тут задача то примитивная, чтобы прям чето изобрести такое эдакое... Кстати, мож FreeRTOS смонтировать, для впечатления, а? :) Там вообще переворот всего мЫшления - все функции, реализующие задачи, представляют собой бесконечные циклы без выхода.
Просто то, что вы считаете конечными автоматами, на самом деле является комбинаторной логикой. А для этого нет каких-то там опупенных впечатлений.
Невнятные названия переменных.
хм. Ну тоже, общепринятые сокращения, самодокументируемый код, ну а в doxygen-описании фукнции все входные и выходные параметры объяснены.
led - номер светодиода
act - action, действие (вкл/выкл)
state, st - состояние
p - previous, предыдущее состояние
tr1, tr2, tr3 - триггеры, в данном случае означающие переключение на противоположное состояние
rd - read, прочитанные данные
mode - режим работы
swtimer - переменная структуры софтовых таймеров
cnt - счетчик
period - период
function - указатель на функцию
run - флаг работы
flag - флаг состояния
timer - номер таймера
port - имя порта ввода/вывода
pin - номер ножки
Вроде всё понятно. Остальные непонятности относятся сугубо к самому МК STM32F401.
Не то какой ты опупительный спец (не доказал)
Ну что поделать, ничего не поделаешь. :))) Пойду чай пить с горя. Беда то большая - какой-то хрен знает кто и из ниоткуда не впечатлился. Ну да, трагедия, трагедия. Даа.. Пхххахаха.
Тьфу, мля. Был бы кто-то там из великих, а то так, невесть кто невесть откеда, который учился по форумам у таких же как и он сам. Зато ЧСВ - охренеть какое. Вздумал тут всех научить "автоматному программированию", а сам то не отличает комбинаторной логики от автоматной, называет инкапсуляцией скидывание всех "лишних" дефайнов и макросов в заголовочный файл... Даааа, куда мы кОтимся...
Последний раз редактировалось MLX90640 Вс окт 09, 2022 19:02:00, всего редактировалось 1 раз.
Ответить

Вернуться в «AVR»