Прерывание Ардуино УНО по состоянию пинов
- Войдите на сайт для отправки комментариев
Ср, 09/09/2015 - 21:34
Вообщем есть Ардуино УНО задействовал я два прерывания по 2 и 3 пину( основные стандартные прерывания для УНО) через регистры EICRA EIMSK.EICRA, по другому как здесь пишут http://arduino.ru/Reference/AttachInterrupt
через переменную volatile, и команду |
attachInterrupt |
не работало . Ну это всё не важно, важно то что мне нужно третье прерывание использовать, для этого хочу использовать 10 пин, вычитал я что есть прерывание по состоянию пинов, для этого как я понял нужно инициализировать #define PCINT10_vect, и всё и оно будет работать по изменению состояния на 10 пине? А как тогда сделать так что бы при изменении состояния на 10 пине только с 0 в 1 срабатывало прерывание?
Roman2344, если вы про PCINT прерывания, то они не умеют райзинг. Но прерывание компаратора может, я про него не так давно писал.
Спасибо.
Я так понял мне нужно так прописать для 10пина, мне нужно что бы при переходе с 0 в 1 и припереходе с 1 в 0 у меня при одно переходе работал один цикл подпрограммы, а при переходе 1 в 0, другой цикл что бы работал:
Вот мне нужно выполнять постоянный цикл подпрограммы после того как произошло прерывание по 10 пину:
именно этот цикл:
После того как произойдёт прерывание при переходе с 1 в 0 по 10 пину, должен выполняться другой цикл. Вот пишут же что нельзя в прерываниях задержки, а мне без них никак, второе, я не понял регистры ACSR ACD ACBG ACIE ACIS1 ACIS0, это регистры аналогового компаратора? Тогда если мне кроме 10 ноги нужно ещё к примеру 11 нога эти же регистры использовать? Регистры ACIS1 ACIS0 – это регистры для настройки на срабатывание на 1 или 0?
Roman2344, советую почитать даташит. Все прерывания сидят на конкретных ногах, никаких "хочу на 10й ноге" тут быть не может. Компаратор - на 7 ноге. Задержки в прерываниях не используются в принципе. С задержками и прочими долгопроцессами велкам в loop()
То есть для УНО тогда получается 3 прерывания и всё, как я понял прерывание по компаратору, не делает общий сброс как обычные прерывания по 2 и 3 пинам? Просто по 2 и 3 пинам прерывания чем хороши, что у меня в Сетапе прописаны условия и циклы, и когда по 2 или 3 ноге прерывание оно делает общий сброс, проверяет условие и в цикле остаётся пока условие не изменится, вот я так понял по прерыванию компаратора так не возможно?
Почему тогда в статьяъ пишут про:
PCINT
Что на этих ногах можно прерывание по состоянию данных пинов делать, чуть ли не всех? Это наверное только для Ардуино на Атмеге 2560 или как там тот контроллер не помню уж.
Roman2344, если даташит пугает, то посмотрите сюда прерывания PCINT висят почти на каждом пине, и группируются по 8 штук на один вектор. Программно можно сделать на PCINT и райзинг и фаллинг, и вообще многое чего. Всё зависит от конкретной задачи и опыта программиста.
Судя по примерам, события там происходят достаточно медленно. Зачем тогда прерывания использовать? Просто в цикле опрашиваются входные пины (много раз в секунду) и, в зависимости от сигналов на них, предпринмаются нужные действия.
Если же очень хочеться использовать прерывания, то внутри подпрограммы обработки прерывания выставляется флаг типа flag1=true, который и обрабатывается в основном цикле и потом сбрасываеьтся (flag1=false).
Всем привет! А как подключить сразу два прирывания вот так все работае
А вот так не хочет в чем проблема ?
в чем выражаеца "не работает"?
Не реагирует на прирывание. Переключаю провод с одного пина на второц и не работает.
Меняю на 1 и не работает.
По ходу вход 3 не рабочий. На нем обычный шим тоже не работает .