Несколько кнопок на одно внешнее прерывание посредством логики.
- Войдите на сайт для отправки комментариев
Чт, 23/04/2020 - 13:06
Так и не хватило мозгов, как увеличить количество пинов внешнего прерывания, хотя учитался. Видимо, не дано вникнуть. Пришло в голову вот такое:
Скажем, 4 кнопки, подтянутые к лог. 1, подключаем к элементу 4И-НЕ. Выход элемента - на пин прерывания. Входы элемента - на другие пины (без прерывания). По прерыванию определяем, на каком пине появился лог. 0. И тем самым определяем, какая кнопка нажата. Обычно аналоговые входы используются редко, вот их и пустить на определение кнопки. На Меге их 16 штук. Две микросхемы К155ЛА1 решают вопрос с 16 кнопками на одном прерывании.
Понимаю, что это выход "с позором". Но, вроде, должно получиться. Или развенчайте.
купи за 15р PCF8574 и не парь никому мосх
http://we.easyelectronics.ru/part/i2c-rasshiritel-portov-pcf8574.html
у ей прерывание есть по изменению уровня на 8 ногах
Увеличить количество пинов внешнего прерывания можно купив контроллер с большим количеством пинов внешнего прерывания.
А если нужно просто прерывание по пину, то оно есть на всех пинах в AVR, и называется PCINT, и подробно разжевано в даташите.
Все пины с прерыванием. Не на все пины можно реагировать средствами ардуины. Вывод простой, если работаете только ардуиной, то метод собирания на один int вполне. А если уже до регистров доросли, то можно и без логики на ноги навешать и поднять прерывание PCINT.
Друзья, вот как раз для понимания PCINT и регистров у меня мозгов просто не хватает. Не вижу процесса. Стоит задача использовать количество прерываний больше, чем таких пинов в "стандарте". Но так и не могу в это въехать. Понятно, что есть метод - попросить кого-то за деньги написать кусок скетча с этой целью. Но это для меня будет "черным ящиком". А я привык понимать, что делаю. На более глубокое изучение информатики просто нет времени, увы. Вот и изощряюсь.
А сколько кнопок надо? И как загружен основной луп программы? Есть ли смысл делать именно через прерывание?
Изощряться со схемой есть время, прочитать даташит - нет. Ок. Зачем создана тема? Поделиться с миром этой информацией?
А сколько кнопок надо? И как загружен основной луп программы? Есть ли смысл делать именно через прерывание?
Кнопок надо именно 4. На меге (6 прерываний). Смысл использования прерываний - сажать на них 4 энкодера. Остаются 2 пина. Один пойдет на зерокросс, другой хочу использовать для кнопок "придуманным" способом. Иначе просто в лупе придется постоянно отслеживать и анализировать состояние 12 пинов. Как показала моя практика (понятно, ущербная), в этой ситуации энкодеры работают плохо и нечетко. Не сомневаюсь, что где-то я что-то делаю не очень правильно, потому и пришел к использованию прерываний. И скетч короче и удобнее.
Изощряться со схемой есть время, прочитать даташит - нет. Ок. Зачем создана тема? Поделиться с миром этой информацией?
Даташит надо не просто прочитать (с аглицким проблем нет). Надо еще суть понять. А вот на это уже моих способностей не хватает. То есть, надо садиться, и штудировать основы, начиная с "подошвы". Это уже время, и не малое.
Скажем, 4 кнопки, подтянутые к лог. 1, подключаем к элементу 4И-НЕ. Выход элемента - на пин прерывания. Входы элемента - на другие пины (без прерывания). По прерыванию определяем, на каком пине появился лог. 0. И тем самым определяем, какая кнопка нажата.
Sonologist - вы удивитесь, но ИМЕННО ТАК PCINT И РАБОТАЕТ в атмеге :) Несклолько ног замкнуты на одно прерывание, при замыкании любой ноги по прерыванию проверяете все пины и видите, на каком сработало. Все просто.
Понятно, что есть метод - попросить кого-то за деньги написать кусок скетча с этой целью.
Есть и другой - скачать готовую библиотеку PCINT коих 100500 и разобраться.
ИМЕННО ТАК PCINT И РАБОТАЕТ в атмеге :)
Удивился :). Не скажу, что вопрос прояснился окончательно, но уже теплее.
Есть и другой - скачать готовую библиотеку PCINT коих 100500 и разобраться.
Спасибо, поищу.
Неплохая (как всегда у этого автора) статья про енто дело - https://gammon.com.au/interrupts
Каквсихда вопросы от ентого ТС задаются через опу и звучат как дичь...
Опиши задачу, сколько кнопок надо и каких. Какие условия опроса, например, по одной кнопке или отслеживать две или несколько нажатых кнопок одновременно........
Да, теперь интимное - а прерывания то тут зачем? Приоткрой занавес тайны.
Неплохая (как всегда у этого автора) статья про енто дело - https://gammon.com.au/interrupts
Взглянул. Пока краем глаза, но уже видно, что много почерпну. Вечером ознакомлюсь. Спасибо.
Каквсихда вопросы от ентого ТС задаются через опу и звучат как дичь...
Опиши задачу, сколько кнопок надо и каких. Какие условия опроса, например, по одной кнопке или отслеживать две или несколько нажатых кнопок одновременно........
Да, теперь интимное - а прерывания то тут зачем? Приоткрой занавес тайны.
Ну еще бы не дичь, с моей-то квалификацией! :)
Не совсем понятно, чем поможет углубление в задачу? Вопрос же я задал совершенно конкреный: проканает или нет. Что касается детализации. Мега2560. 4 энкодера с кнопками, каждый настраивает свою группу параметров. Кнопки энкодеров - перемещение по параметрам внутри группы типа меню. Несколько кнопок нажиматься одновремернно не будут (достаточно разнесены, да и нет нужды), отслеживается нажатие одной из них.
Интимная завеса тайны: когда я делал предыдущую версию устройства, то все энкодеры и кнопки сначала отслеживал в лупе. Постоянное считывание состояния 12 контактов в моем случае привело к некорректной и неустойчивой работе энкодеров. Часть из них перевел на прерывания - все заработало четко и без сбоев. Скетч укоротился, стал более читаемым (мне это важно). Хочу перевести на прерывания все контакты. От того и задумался как.
Вот смотри: для того чтобы решить задачу, задачу нужно поставить. А чтобы задача была понятнее - её нужно как можно полнее и конкретнее описать. Эл. схема для задачи и желаемая логика работы обязательны!!! Ну и плюсом будут всякие хотелки типа прерываний и тд...
Ты-ж в PR гамить могёшь, ну дык наваяй схему-та, там ведь фича клёвая есть - симуляцция.
Давай, кароче, ваяй свои энкодеры в PR , будем разбирацца, чо-да-как.
Не совсем понятно, чем поможет углубление в задачу?
Это Вы напрасно. Почему все, кто не знает как решить задачу считают, что они знают что для решения нужно, а что - нет?
Вот прямо сразу и "например",
Мега2560
Опаньки! Где ж Вы раньше были? У неё-то PCINT ДАЛЕКО не на всех пинах, как Вам тут опрометчиво подсказывали. Так что, смотрите там, чтобы не тратить время на попытки получить "молоко от козла"
ТС, вся суть прерываний на PCINT заключается в том, что , если в прерываний INT0/INT1, ты настраиваемо (CHANGE,FALLING,RISING)следишь за состоянием каждого из этих пинов отдельно, то PCINT, следишь за всеми портами регистра разом, и если меняется состояние(только CHANGE) любого из указанных пинов, то тогда вызывается обработчик прерывания.
Т.е. Нужно просто включить прерывание, указать пины и написать обработчик (вызываемую функцию внутри которой, будет происходить вычисление того, какой пин вызвал прерывание и что с этим делать).
Инфы о том как настроить PCINT в интернете куча
Блин, на 2560 можно "чорталысого" наваять запросто. Там ресурсов завались просто. Мой "самоплясник" сделан на 328 и ито пины вроде не все используются, вроде. А уж на 2560 я просто незнаю, чо можно навертеть... минизавод со скадой и визуализацией всего техпроцесса + вебморду + управление с тилипона +...+...
Я понял свои ошибки в смысле задавания вопросов. Давайте так: по ходу буду задавать их, как возникнут. Иначе пипец, запутаюсь. Всем спасибо за ссылки и рекомендации. Приступаю к ваянию. Держитесь, друзья, будет вам нескучно. :)
Ты-ж в PR гамить могёшь, ну дык наваяй схему-та, там ведь фича клёвая есть - симуляцция.
Могю. Правда, пользуюсь варезом. Отсюда, как я понимаю и проблемы. Примитивный усилитель еще протеус тянет, а чуть посложнее - куку. Там есть приколы, чтоб оживить (снизить таймрейт и т.д.), но чаще не помогает. Симуляция Ардуины там - вааще полный.... Жуткий тормоз, подвис, вылет... Причем, у меня комп вполне пристойный, во всяком случае, проекты Sonar и Cubase (с гигабайтными VST) тащит в реале как нечего делать.
Отсюда, как я понимаю и проблемы.
Нет дядЪко, проблемы нашего народа одни и те-же на протяжении столетий - дураки и дороги.
Перенося в парадигму PR проблема не меняет окраски - дурак и недостаточное количество знаний.
PS - в PR всё прекрасно симулируется. Даже STM32 ща туда добавили, изучаю патихоньку!
Нет дядЪко, проблемы нашего народа одни и те-же на протяжении столетий - дураки и дороги.
Перенося в парадигму PR проблема не меняет окраски - дурак и недостаточное количество знаний.
PS - в PR всё прекрасно симулируется. Даже STM32 ща туда добавили, изучаю патихоньку!
:) Надо будет добавить в мой ник слово "Дурак".
Тем не менее, добил, таки... Добрые люди подсказали еще, как написать красиво. Получилось, вот что, работает:
Спасибо всем за подсказки и науку!
Спасибо всем за подсказки и науку!
За время нескольких digitalRead() состояние входов может измениться....
Чо я просил? Схему. Где она?
и.и.и. я-б читал в обработчике весь порт сразу ауш патом...
Чо я просил? Схему. Где она?
и.и.и. я-б читал в обработчике весь порт сразу ауш патом...
Схема только вечером: на работе хренов Линукс не позволяет вставлять картинки. По поводу чтения порта - правильно ли я понял, что то, что в лупе перенести в функцию прерывания?
Неправильно. Читать весь порт, потом кромсать:
на работе хренов Линукс не позволяет вставлять картинки.
Рука-лицо. Абзац. Пипец!
Линукс - это лучшее, что изобрёл человек для интернета.
Неправильно. Читать весь порт, потом кромсать:
Ага, усёк. Спасибо большое!
Линукс - это лучшее, что изобрёл человек для интернета.
Я в курсе. Только на работе он обрезан по самое не могу. Доступ к настройкам заблокирован. Скачивание файлов заблокировано. Картинку вставить нельзя: при попытке найти нужный файл "Коммондиалог" отсутствует. Единственная возможность - положить картинку (только с флэшки!) куда-то на файлообменник и написть путь к ней. Графичских редакторов нет. Так что.....
Кстати, я не очень понял какую схему-то представить? Обвес энкодера и его кнопки? Или на какие пины какие ноги энкодеров-кнопок заведены?
Да! И ещё вопрос: "Нормальный" INT реагирует на RISING, FALLING и CHANGE. Инициированный PCINT - только на CHANGE. А ченджей при нажатии и отпускании кнопки, естественно, два. Как бы поизящнее игнорировать отпускание кнопки (второй CHANGE)? Заранее спасибо!
Какой_ты_нафик_танкист... ичо, сломать не могёшь??? ))))))))))))
Какой_ты_нафик_танкист... ичо, сломать не могёшь??? ))))))))))))
То, что один человек сделал, второй завсегда сломать может. :) ЕМИАС - система глюкавая как не знаю что, но айтишники исправлять баги не хотят. Зато за доступом следят пристально - каждый день чек системы (не дай Бог кто-то что-то установил или изменил).
Кстати, я не очень понял какую схему-то представить?
Да! И ещё вопрос: "Нормальный" INT реагирует на RISING, FALLING и CHANGE. Инициированный PCINT - только на CHANGE. А ченджей при нажатии и отпускании кнопки, естественно, два. Как бы поизящнее игнорировать отпускание кнопки (второй CHANGE)? Заранее спасибо!
Вот сколько раз я тебе говорил, что дом строят с фундамента а устройство со схемы. Но видать недошло.
На "нормальных" интах ещё Zero есть, но это пока мимо кассы. А "поизящнее" уже будет у тебя в коде обработчика. Тебе нужно будет создать несколько счётчиков состояний кнопок в обработчике и анализировать их состояние. Желательно оформить всё это дело в "конечный автомат". Вот здесь-то и проявляется искусство программиста и его талантливость. Посмотрим как у тебя с "этим" :))
Вот сколько раз я тебе говорил, что дом строят с фундамента а устройство со схемы. Но видать недошло.
На "нормальных" интах ещё Zero есть, но это пока мимо кассы. А "поизящнее" уже будет у тебя в коде обработчика. Тебе нужно будет создать несколько счётчиков состояний кнопок в обработчике и анализировать их состояние. Желательно оформить всё это дело в "конечный автомат". Вот здесь-то и проявляется искусство программиста и его талантливость. Посмотрим как у тебя с "этим" :))
Да есть схемы-то. Надо - вечером скину. Но они примитивные, на дискутируемый вопрос никак не влияют.
Идею про счетчик понял, спасибо. Надо завести булеву переменную в значении "ложь". В прерывании, если она "ложь" - выполнять код, затем перевести ее в "истину". Если она "истина" (следующее событие) - ничего не делать, просто перевести ее в "ложь". Вижу так. Нет?
Послушай, иногда и "местами" я не могу тебя понять... Именно ТЫ просишь помощи от сообщества и именно ТЕБЕ именно помощь-то и нужна. НО ты упрямо САМ СЕБЕ вставляешь палки в колёса "глупыми" ответами типа ладно, завтра и спасибо. Ведь под лежачего Деда коньяк не течёт... секи фишку, пока я добрый.
секи фишку, пока я добрый.
Всё, больше так не буду.
У тебя есть моя почта. Давай так:
Я тебе всё про прерывания, что тебе интересно. И про то, как твои энкодеры лучше подключить, а ты мне про УЗИ, и про то, стоит ли ветеринарный наладонник за 40 тыр купить (их полный ебей), или на нем вообще ничего не видно будет?
О! влад, привет! Щас в почту полезу.
На самом деле прерывания по пинтам проверять можно просто и быстро(особенно если схему изначально под это проектировать) , но это объяснять очень долго.
Начни со сложно и долго. Примерно как сейчас.
Читай всё значения, и сравнивай их с теми, что были в предыдущем прерывании. Соответственно текущие нужно сохранять , что бы они потом стали предыдущими.
Читай всё значения, и сравнивай их с теми, что были в предыдущем прерывании. Соответственно текущие нужно сохранять , что бы они потом стали предыдущими.
Нафик ему чойто пейсать-сахранять? Напейши иму гатовый скречч и вазьми с ниго срецтва, типа бартер. фсё.
В качестве примера нам дай для посмотреть, может мы что-то для себя подчеркнём.
Нафик ему чойто пейсать-сахранять? Напейши иму гатовый скречч и вазьми с ниго срецтва, типа бартер. фсё.
Хорошая идея :) Если будет рабочий пример с подробными комментариями (важное условие для моего понимания), будет и бартер :)
Отлично. Выставь цену строки в миллилитрах, например 1 строка = 10 мл. 10 строк = 100гр. 100 строк = литр. Деду должно панравицца.
Отлично. Выставь цену строки в миллилитрах, например 1 строка = 10 мл. 10 строк = 100гр. 100 строк = литр. Деду должно панравицца.
Прайз нармальный :)
Исторический анекдот: Дюма за вторую и третью часть "мушкетеров" получал от издателя построчно. И оба романа (20- и 30 лет спустя) переполнил многочисленными длиннющими диалогами, но каждая фраза из 3-4 слов. :)
PS: Ничего личного, просто тут же вспомнилось.
Дык можешь "регулировать" крепостью срецтва.
Дык можешь "регулировать" крепостью срецтва.
Ха! Тоже идея хорошая: чем больше "воды" в коде, тем больше ее в срецтве :)
Получится хорошо прокомментированное срецтво? Так что ли?
Нет, за комменты да ещё с подробностями это уже бонусы. Ну типа натурпрадукт, бурбончик или недовискарь + настоен на дубовых чипсах месяца три минимум.
Вааще нуно делать дополнительную ветку типа = меняю сало (рыбу, масо.....) на скетч. Чо, так антикризисно, и налогом не облагаеццо :)))