-
- Че, правда надо необычное? Вот выдрал, надеюсь, не убил идею и красоту Petrovich(3912 знак., 25.06.2018 15:47, )
- Спасибо всем, но красивого решения по опросу клавиатурной матрицы, я так и не увидел :( - Make_Pic(25.06.2018 05:35)
- В таймерном прерывании читаю состояние датчиков. Если три (тут зависит от частоты прерываний) раза подряд прочитано одно и то же состояние - считаю что дребезг завершился и прочитано актуальное состояние. Взвожу флаг, в основном цикле разбираю LightElf(45 знак., 25.06.2018 10:22)
- А в чём должна быть красота? blackprapor(695 знак., 25.06.2018 10:15)
- Советский писатель Ефремов утверждал, что красота - это
лезвие бритвывысшая целесообразность. - VLLV(27.06.2018 06:26)- почему-то в памяти "наивысшая степень целесообразности" Vit(563 знак., 27.06.2018 10:00)
- И вот что с ним стало. - blackprapor(27.06.2018 06:54)
- всё верно, у меня именно так всегда. - Лагунов(25.06.2018 10:40)
- Советский писатель Ефремов утверждал, что красота - это
- Тупая машина состояний в качестве конечного автомата с таймером на systick. Просто, минималистично, реализуется на любом языке, ничего не стоит по ресурсам. Позволяет легко расширять функционал для обработки сложных действий вроде двойных/тройных evgeniy1294(356 знак., 23.06.2018 12:34 - 12:44)
- Какие то странные пошли просьбы. Стареем :) Люблю минималистические решения. Чтобы не втыкать лишних резисторов, на мегах делаю так: Гудвин(319 знак., 23.06.2018 12:18)
- ага, стареем ;) Это все понятно, я больше про сборку кода нажатия из разных битов портов и отработку двух - четырех одновременно нажатий, чтобы компактнее и как ты выразился - "минималистические решения" - Make_Pic(23.06.2018 13:21)
- для опроса одновременных нажатий нескольких кнопок надо последовательно с каждой кнопкой включить диод, чтобы через контакты кнопок не замыкались между собой шины входов. - =L.A.=(23.06.2018 22:15, ссылка)
- Знамо дело, но я не про хард, я про код - Make_Pic(24.06.2018 09:31)
- Если одновременных нажатий не более двух, то или диоды, или open-drain линии использовать. Входам, кстати, физически ничего не грозит. А вот замыкая выходы, можно их и из строя вывести. - De_User(24.06.2018 00:20 - 00:53)
- для опроса одновременных нажатий нескольких кнопок надо последовательно с каждой кнопкой включить диод, чтобы через контакты кнопок не замыкались между собой шины входов. - =L.A.=(23.06.2018 22:15, ссылка)
- ага, стареем ;) Это все понятно, я больше про сборку кода нажатия из разных битов портов и отработку двух - четырех одновременно нажатий, чтобы компактнее и как ты выразился - "минималистические решения" - Make_Pic(23.06.2018 13:21)
- я вот так делаю, в прерываниях от SysTick (каждую 1 мс): Лагунов(986 знак., 23.06.2018 10:25 - 10:28)
- А что с защитой от одновременного нажатия нескольких кнопок? - VLLV(23.06.2018 22:09)
- можно и без диодов. Коммутатор 74НС4051 это обеспечивает - Лагунов(24.06.2018 12:06)
- ->> - =L.A.=(23.06.2018 22:16, ссылка)
- Это на чешском? - blackprapor(23.06.2018 11:13)
- По-олбански. Кстати, начинаю думать, что кубический куб, вероятно, не так уж плох. Всё познаётся в сравнении :-) - SciFi(23.06.2018 12:58)
- У всех так - сначала тянет блевать, потом втягиваешься, потом жить без этого не можешь. lloyd(78 знак., 23.06.2018 15:13)
- Куб производит двойственное впечатление. С одной стороны, много чего работает. Но уж если не заработало - разобраться трудно. Очень многословно, да и код типа if ( status == ERROR ) { status = ERROR; } меня как-то выводит из равновесия. - йцукен(23.06.2018 13:11)
- Да ты что!!! Опомнись!!! Пока не поздно. Пропадешь ведь ни за что :-) - il-2(23.06.2018 13:01)
- По-олбански. Кстати, начинаю думать, что кубический куб, вероятно, не так уж плох. Всё познаётся в сравнении :-) - SciFi(23.06.2018 12:58)
- ужасы нашего городка (с) )) - lexxx-lexxx(23.06.2018 10:41)
- там есть лишнее - контроль залипания кнопок. Но я и не претендовал никогда на программиста :-) - Лагунов(23.06.2018 11:07)
- ключи 4051 - тоже лишнее - =L.A.=(23.06.2018 11:25)
- двух ножек не хватило - Лагунов(23.06.2018 12:47)
- ключи 4051 - тоже лишнее - =L.A.=(23.06.2018 11:25)
- +1 ) - Make_Pic(23.06.2018 10:48)
- там есть лишнее - контроль залипания кнопок. Но я и не претендовал никогда на программиста :-) - Лагунов(23.06.2018 11:07)
- А что с защитой от одновременного нажатия нескольких кнопок? - VLLV(23.06.2018 22:09)
- гугль бесконечно добр - =L.A.=(23.06.2018 07:31, ссылка)
- pause(10) в прерывании таймера без разрешения вложенных прерываний... Скажите ну зачем я полез по ссылке? - Boвa(23.06.2018 09:55)
- а ты хотел найти там чемоданчик с деньгами? Функция pause(10) сделана на пустых циклах. Хотя, конечно, прерывание лучше выполнять без лишних задержек. - =L.A.=(23.06.2018 19:13 - 22:02)
- да код там не совсем прямой, но идеи можно взять. А так я до сих пор в поиске (изобретаю "велосипед"). - Make_Pic(23.06.2018 10:01)
- Лучше тогда так: В прерывании сканируем клавиатуру без delay! (можно в одном прерывании всю, но лучше построчно). Если хоть одна кнопка нажата выдаем код нажатой кнопки в буфер и не сканируем клавиатуру на время дребезга равного времени Boвa(100 знак., 23.06.2018 11:21 - 12:06)
- вроде как дурной тон в прерывание тащить опрос и тормозить постоянно проц. - Make_Pic(23.06.2018 11:43)
- 1 раз в 1 мсек потратить несколько мксек? - Лагунов(24.06.2018 18:43)
- Да ничего страшного, если в обработчике прерывания есть короткие задержки. Если время задержки сопоставимо с временем возврата и нового входа в прерывание, всё равно ничего не наэкономишь. Да часто и экономить нет смысла, всё равно процессор йцукен(37 знак., 24.06.2018 18:51)
- пока только Вова пугается поставить в прерывании пару десятков nop(); :) - =L.A.=(25.06.2018 16:06)
- у меня опрос клавиатуры в прерывании systick исключительно для простоты. Чтобы где-то лежал, гарантировано туда заходил строго ритмично. Осциллографом специально смотрел - сколько он там топчется. Всего ничего. В принципе я так делал даже с Лагунов(42 знак., 25.06.2018 09:54)
- вы видно не писали обработчики прерываний, что делают кучу математики на 100КГц. - lloyd(24.06.2018 19:42)
- Да ничего страшного, если в обработчике прерывания есть короткие задержки. Если время задержки сопоставимо с временем возврата и нового входа в прерывание, всё равно ничего не наэкономишь. Да часто и экономить нет смысла, всё равно процессор йцукен(37 знак., 24.06.2018 18:51)
- Не делать задержку, а обходить опрос клавиатуры на время дребезга. UPD А дабы не вставали волосы опрос клавы делать в прерывании по таймеру только один раз в 100 мс. - Boвa(23.06.2018 11:56 - 14:57)
- Если опрос требует минимум врмемени, а RTOS нет, почему бы и не затащить в прерывание? При опросе кнопок в прерывании более точно выдерживается период опроса, за счет этого нет пропусков в определении коротких нажатий и лучше работает антидребезг. - AlexG(23.06.2018 11:52)
- 1 раз в 1 мсек потратить несколько мксек? - Лагунов(24.06.2018 18:43)
- вроде как дурной тон в прерывание тащить опрос и тормозить постоянно проц. - Make_Pic(23.06.2018 11:43)
- Лучше тогда так: В прерывании сканируем клавиатуру без delay! (можно в одном прерывании всю, но лучше построчно). Если хоть одна кнопка нажата выдаем код нажатой кнопки в буфер и не сканируем клавиатуру на время дребезга равного времени Boвa(100 знак., 23.06.2018 11:21 - 12:06)
- Спасибо, в принципе годно. Мне выдавал гадости (гугля) - видимо зол на меня :) - Make_Pic(23.06.2018 07:43)
- pause(10) в прерывании таймера без разрешения вложенных прерываний... Скажите ну зачем я полез по ссылке? - Boвa(23.06.2018 09:55)