Ардуино прерывание: Аппаратные прерывания

arduino sleep

 

[adrotate banner =”7″]

 
В этом видео мы узнаем, как использовать прерывания с Arduino — продвинутой, но чрезвычайно полезной функцией Arduino.. Есть много чего, так что без дальнейших задержек. Давайте начнем, Привет, ребята, меня зовут Ник, и добро пожаловать на канал education8s.tv, посвященный проектам DIY-электроники с Arduino., Малина, Пи, ESP8266 и другие популярные доски. Подписаться на канал. Сейчас, если ты не, хочу пропустить любое будущее видео. в этом видео, мы собираемся узнать, как использовать прерывания в наших проектах, построив два простых проекта. Обязательно досмотрите до конца видео, потому что трюк, который мы используем во втором примере, очень полезен для наших будущих проектов., Но что такое прерывание? У большинства микропроцессоров есть прерывания. Прерывания. Позвольте вам реагировать на внешние события, одновременно занимаясь чем-то другим. Допустим, вы сидите дома и ждете новую плату ESP32.

. Вы заказали несколько дней назад, чтобы прибыть в ваш почтовый ящик.. Ты очень взволнован, поэтому вы проверяете свой почтовый ящик каждые десять минут, чтобы узнать, пришла ли доска.. Эта процедура называется опросом, и мы часто использовали эту технику в наших проектах.. Но что, если бы мы сказали почтальону позвонить в дверь по прибытии? Таким образом, мы можем делать все, что захотим, и когда доска прибывает в почтовый ящик, мы получаем уведомление, и мы можем использовать ее сразу.. Этот пример объясняет, как именно прерывание заставляет процессор действовать..

. Программа Arduino запущена и выполняет некоторую функцию.. тем не мение, когда происходит прерывание, основная программа перестает выполняться и вызывается другая функция. Когда эта функция завершится. Процессор снова возвращается к основной программе и возобновляет ее выполнение с точки. Это было остановлено. Функция, которую процессор выполняет при возникновении прерывания, — это ISR.. Процедура обслуживания прерывания.

Прерывания могут поступать из разных источников. в этом видео. Узнаем об аппаратных прерываниях, которые запускаются изменением состояния на одном из цифровых выводов.. Другими словами, прерывание может быть вызвано, когда цифровой вывод переходит с LOW на HIGH или с HIGH на LOW.. На большинстве плат Arduino вы можете использовать только определенные контакты., как прерывания. Прерывания обозначаются идентификационным номером, который соответствует определенному цифровому выводу.. Так прерывай 0 а Arduino Uno соответствует цифровому выводу 2., Arduino Uno, поддержка Arduino Nano и Arduino pro mini. Только два внешних прерывания на цифровых выводах, 2 и 3.. Arduino Mega поддерживает 6 внешние прерывания, тогда как чип ESP8266 может поддерживать 16. Внешние прерывания. Давайте теперь посмотрим, как использовать прерывание на цифровом выводе Arduino.. На примере.. Мы собираемся использовать Arduino Nano, который на самом деле является небольшой Arduino Uno.. Вы можете использовать Arduino Uno, если хотите, чтобы код и соединения были одинаковыми.
. В этом первом примере, мы собираемся построить простой проект, в котором каждый раз, когда мы нажимаем кнопку, будет запущено прерывание, и ISR изменит состояние светодиода.

. Я подключил светодиод к цифровому контакту 13 и кнопку на цифровой пин 2, который поддерживает аппаратные прерывания. Чтобы сделать цифровой вывод для прерывания основного скетча Arduino, мы используем функцию attachInterrupt.. Первый аргумент — это идентификатор прерывания., поэтому, если мы используем Arduino Uno, прерывание 0 соответствует цифровому выводу 2.. Следующий аргумент — это функция, которая будет выполняться при срабатывании прерывания.. Другими словами, это функция ISR.. В этом примере, мы называем ISR buttonPressed.. Последний аргумент сообщает Arduino, что вызывает прерывание.. RISING означает, что прерывание будет срабатывать, когда состояние цифрового вывода 2 переходит от НИЗКОГО к ВЫСОКОМУ.. Мы также можем использовать слово ПАДЕНИЕ, это означает, что прерывание будет запущено, когда состояние вывода изменится с HIGH на LOW.

. Другой вариант — использовать слово ИЗМЕНИТЬ, который будет запускать прерывание всякий раз, когда происходит изменение состояния вывода.. Теперь, когда мы включили прерывание, нам нужно создать ISR., Мы можем назвать кнопку ISR нажатой.. Функция. Проверка включает или выключает светодиод в зависимости от его состояния.. Чтобы запомнить состояние светодиода, он использует логическую глобальную переменную., Каждая переменная, которую использует функция ISR, должна быть объявлена ​​как изменчивая.. При написании процедуры обслуживания прерывания следует помнить о некоторых вещах.. Держать его коротким. Это очень важно.

Не используйте задержку. Не делайте серийных распечаток, Сделать переменные, используемые совместно с основным кодом, изменчивыми, Итак, мы создали очень короткую функцию. Мы не используем никаких задержек или последовательной печати, и мы объявили переменную как изменчивую.. Мы готовы протестировать код.. Как вы видете, код проекта работает как положено.. Когда я нажимаю кнопку, срабатывает прерывание, и светодиод горит или гаснет. . Наш первый скетч, использующий прерывания, готов. Если мы еще раз проверим код, мы видим, что функция цикла пуста. У нас есть рабочий проект без кода в функции цикла.. Если бы мы хотели построить один и тот же проект без перерывов, мы бы проверяли состояние кнопки много раз в секунду, для обнаружения любого изменения его состояния и включения или выключения светодиода.. Вот как мы поступали так. Далеко. Теперь перейдем ко второму проекту.. В этом проекте. Я использую датчик PIR, чтобы вызвать прерывание.. Датчик PIR работает так.. Он имеет только три контакта Vcc GND и контакт выхода сигнала.. Когда датчик обнаруживает движение. Сигнальный контакт переходит с НИЗКОГО на ВЫСОКИЙ и остается включенным в течение 10 секунд. Если он не обнаруживает движения в течение 10 секунд. Он возвращается к НИЗКОМУ.. В этом примере, мы хотим использовать, прерывает включение светодиода при обнаружении движения и выключение его снова.

Когда сигнал датчика становится НИЗКИМ., Мы собираемся использовать два прерывания. . Мы собираемся прервать один раз, когда состояние сигнала от датчика изменится с НИЗКОГО на ВЫСОКИЙ, чтобы включить светодиод, и мы собираемся использовать другое прерывание, чтобы выключить светодиод, когда сигнал от датчика переходит с ВЫСОКОГО на ВЫСОКИЙ. НИЗКИЙ. Подключаем Vcc датчика к 5V GND к GND, и сигнальный контакт к цифровому контакту 2 и цифровой контакт 3.. Оба этих вывода используют аппаратные прерывания.. Теперь в коде, первое прерывание сработает, когда сигнал перейдет с НИЗКОГО на ВЫСОКИЙ. Итак, мы используем слово Восход.. Когда это произойдет, будет вызвана функция ISR turnLEDOn.. Второе прерывание имеет идентификатор 1, что соответствует цифровому контакту 3.. Мы будем использовать слово ПАДЕНИЕ в качестве триггера, и оно будет вызывать функцию turnLEDOff при срабатывании триггера.. ISRoutines очень простые и короткие.. Мы просто включаем или выключаем светодиод. Это оно.. Проект готов., Мы добавляем команду к функции цикла, чтобы перевести Arduino в спящий режим для экономии энергии.

, Для этого мы используем библиотеку LowPower.. Эта команда навсегда усыпит Arduino.. Прерывания могут разбудить Arduino, выполнить функцию ISR и сразу вернуться в режим сна.. Итак, в этом примере, Arduino все время спит, когда он обнаруживает движение, запускается прерывание, поэтому Arduino просыпается и выполняет функцию turnLEDOn.

Когда эта функция завершит свое выполнение. Arduino сразу же снова переходит в спящий режим, когда сигнал от датчика переходит с ВЫСОКОГО на НИЗКИЙ.. Сработало прерывание. Функция ISR этого прерывания выключает светодиод, и Arduino возвращается в спящий режим.. Это здорово. Мы не теряем времени зря. Давайте протестируем проект, чтобы убедиться, что все работает должным образом.. Теперь Arduino спит, и датчик PIR не обнаружил никакого движения.. Если я поднесу руку к датчику, датчик вызовет прерывание, и программа обслуживания прерывания, при первом прерывании загорится светодиод, и Arduino вернется в спящий режим.. Если мы подождем 10 секунд, не двигаясь перед датчиком, выходной сигнал датчика станет НИЗКИМ.

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

. Это позволит нам строить более сложные проекты, потребляющие меньше энергии.. Это видео было быстрой демонстрацией того, как использовать аппаратные прерывания с Arduino.. Есть еще много вещей, которые можно обсудить по поводу прерываний, но то, что мы узнали сегодня, мы собираемся использовать больше всего.. Я хотел бы услышать ваши мысли о прерываниях.

. Собираетесь ли вы использовать прерывания в каком-либо из ваших проектов теперь, когда знаете, как они работают?? пожалуйста, оставьте свои комментарии ниже и не забудьте лайкнуть видео. Если сочтете полезным., Кроме того, рассмотреть подписавшись на канал и сделать кнопку, что колокол или YouTube может не показать вам обновления, по мере выхода новых видео. Если вы собираетесь делать покупки для частей проверить партнерскую ссылку из описания видео. Это на сегодня.

 
 

[adrotate banner =”1″]

[mam_video id = QtyOiTw0oQc]

 

 

[adrotate banner =”2″]

 

[mam_tag id = 5902]

 

 

[adrotate banner =”3″]

 

 

 

  • Приложения Интернета вещей и искусственный интеллект на пограничном уровне – Eetasia.com

    Опубликовано во вторник, декабрь 24, 2019

    Приложения Интернета вещей и искусственный интеллект на пограничном уровне Eetasia. com … Продолжить чтение »

  • Ваш домашний помощник знает, когда вы спите? – hackaday

    Отправлено в среду, сентябрь 11, 2019

    Ваш домашний помощник знает, когда вы спите?  hackaday … Продолжить чтение »

  • Arduino: иди спать крошечный ATtiny – Электроника Еженедельно

    Опубликовано в понедельник, август 14, 2017

    Arduino: спать крошечный ATtiny Electronics Weekly … Продолжить чтение »

 

 

 

[adrotate banner =”4″]

 

 

 

 

[adrotate banner =”5″]

 

 

ТомиславНиколов
Пн окт 28 15:11:42 +0000 2019

Прошлой ночью я плохо спал, поэтому, пока я крутился в постели, полусон, полусон, я думал про себя: “Мне нужно спать, но как я могу, когда моторы работают от моего ноутбука, а не от аккумулятора. ” Подходит для того, чтобы зря потратить отпуск на работу над проектом #Arduino

AllArduino
Вс июн 15 16:42:59 +0000 2014

#arduino https://t.co/W28OjuTp7M Сохранение данных во время глубокого сна без использования EEPROM

HTTPS://t.co/W28OjuTp7M



 

[adrotate banner =”6″]

 

Ардуино — Прерывания. Прерывание — это сигнал, который сообщает… | Адити Шах | Vicara Hardware University

Прерывание — это сигнал, сообщающий процессору о немедленной остановке текущей задачи и выполнении другой высокоприоритетной обработки. Эта высокоприоритетная обработка называется обработчиком прерывания/программой обслуживания прерывания. Почти каждое электронное устройство сталкивается со сценарием, когда прерывание необходимо «прервать» обычный процесс и выполнить важную задачу. Таким образом, технически прерывания — это механизм, с помощью которого ввод-вывод или инструкция могут приостановить нормальное выполнение процессора и получить обслуживание, поскольку оно имеет высокий приоритет. Как только эта задача завершена, она возвращается к выполнению первоначальной задачи.

Как работают прерывания?

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

ISR имеет следующий синтаксис в Arduino: attachInterrupt(digitalPinToInterrupt(pin), ISR, mode)

digitalPinToInterrupt(pin ): В Arduino Uno для прерывания используются контакты 2 и 3. Вам нужно указать здесь находится входной контакт, который используется для внешнего прерывания.

ISR : Это функция, которая вызывается при выполнении внешнего прерывания.

Режим : Тип перехода для срабатывания прерывания, например, падение, рост и т. д.

  • Рост — для запуска прерывания, когда контакт переходит из LOW в HIGH.
  • Падение — Для запуска прерывания, когда контакт переходит из ВЫСОКОГО в НИЗКИЙ.
  • Change — Для запуска прерывания, когда контакт переходит из LOW в HIGH или HIGH в LOW.
  • НИЗКИЙ — для запуска прерывания, когда на выводе НИЗКИЙ уровень.

Типы прерываний

Существует два типа прерываний:

  • Аппаратные прерывания — они возникают в ответ на внешнее событие, такое как переход внешнего прерывания в высокий или низкий уровень.
  • Программные прерывания — они происходят в ответ на команду, отправленную программным обеспечением. Прерывания по таймеру — это программные прерывания.

Теперь давайте посмотрим, как использовать прерывания Arduino, используя функции, доступные в Arduino IDE. Мы будем использовать функцию прерывания присоединения, чтобы инициализировать прерывание и указать вывод Arudino, который будет использоваться для этого. Функция принимает два аргумента в качестве входных данных: один — это контакт, который используется для запуска внешнего прерывания, а второй аргумент — это имя функции, которую вы хотите вызывать при каждом прерывании. Последний аргумент относится к режиму прерывания, который вы используете.

Мы будем использовать пример мигания светодиода, чтобы понять, как работает функция прерывания. Сделайте подключения в соответствии со следующей диаграммой:

Требуется компоненты:

  1. Arduino Uno
  2. Глепота
  3. проволоки джемпер
  4. 2 светодиоды
  5. Punch
  6. 1KESTOR
  7. 9007

    927 Оказаться с помощью DeNnections Denections Once Once Whet с Densections Once When Office Use What Office Underse Unnion Whit Open с Densections Once Whe Office Underse Unnion Whit Open с Densections Once Once On The Connectiones. вы можете использовать следующий скетч и загрузить его на Arduino.

    Светодиод подключен к контакту 13, а кнопка прикреплена к контакту прерывания 2. Таким образом, когда кнопка нажата, срабатывает прерывание и происходит изменение состояния. Но если его не подтолкнуть вверх, изменений не будет, и цикл продолжится. Функция ISR называется «мигание», а режим установлен на «изменение», так что всякий раз, когда происходит рост или падение, срабатывает прерывание. ISR используется для изменения состояния светодиода, поэтому всякий раз, когда нажимается кнопка или вызывается прерывание, светодиод светится.

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

    Прерывание AVR и внешнее прерывание : Arduino / ATmega328p

    Примечание

    Эта статья является частью Руководства по программированию микропрограммы Arduino / ATmega328p Embedded C . Подумайте о том, чтобы изучить домашнюю страницу курса и найти статьи на похожие темы.

    Учебное пособие по Arduino Мастер-класс Arduino на уровне встроенного регистра C

    Также посетите страницу выпуска .

    Введение

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

    Чему вы научитесь

    • Как работают прерывания в Arduino?
    • Как работают прерывания ЦП чипа AVR ATmega328p?
    • Какие существуют источники прерываний в ATmega328p?
    • В чем разница между внутренними и внешними прерываниями в ATmega328p?
    • Как прерывания включаются или отключаются в Arduino/ATmega328p?

    Векторы прерываний ATmega328P

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

    Каждый вектор прерывания занимает два командных слова в ATmega328/328P. Этот список определяет уровни приоритета различных прерываний. Чем ниже адрес, тем выше уровень приоритета. Наименьшие адреса в памяти программ по умолчанию определены как векторы сброса и прерывания.

    0x0138
    № вектора Программа
    Адрес
    Источник Определение прерывания
    1 0x0000 RESET External Pin, Power-on,
    Brown-out, Watchdog System Reset
    2 0x0002 INT0 External Interrupt Request 0
    3 0x0004 Int1 Запрос на нарушение прерыва
    5 0x0008 PCINT1 Pin Change Interrupt Request 1
    6 0x000A PCINT2 Pin Change Interrupt Request 2
    7 0x000C WDT Watchdog Time -out Interrupt
    8 0x000E TIMER2 COMPA Timer/Counter2 Compare Match A
    9 TIMER2 COMPB Timer/Counter2 Compare Match B
    10 0x0012 TIMER2 OVF Timer/Counter2 Overflow
    11 0x0014 TIMER1 CAPT Timer/Counter1 Capture Event
    12 0x0016 Timer1 Compa Таймер/Сравнение 1 Сравнение A
    13 0x0018 13 0x0018 13 0x0018 8 0x0018 0139
    14 0x001A TIMER1 OVF Timer/Counter1 Overflow
    15 0x001C TIMER0 COMPA Timer/Counter0 Compare Match A
    16 0x001E TIMER0 COMPB Timer/Counter0 Compare Match B
    17 0x0020 TIMER0 OVF Timer/Counter0 Overflow
    18 0x0022 SPI, STC SPI Serial Transfer Complete
    19 0x0024 USART, RX USART Rx Complete
    20 0x0026 USART, UDRE USART, Data Register Empty
    21 0x0028 USART, TX USART, Tx Complete
    22 0x002A ADC ADC Conversion Complete
    23 0x002C EE READY EEPROM Ready
    24 0x002E ANALOG COMP Analog Comparator
    25 0x0030 TWI 2-wire Serial Interface
    26 0x0032 SPM ГОТОВ Сохранить готовность памяти программ

    При возникновении прерывания I-бит глобального разрешения прерывания очищается и все прерывания запрещаются. Программное обеспечение пользователя может записать логическую единицу в I-бит, чтобы разрешить вложенные прерывания. Все разрешенные прерывания могут прервать текущую процедуру прерывания. I-бит автоматически устанавливается, когда выполняется команда возврата из прерывания — RETI. Когда AVR выходит из прерывания, он всегда возвращается к основной программе и выполняет еще одну команду, прежде чем будет обслужено любое ожидающее прерывание.

    Реакция на выполнение прерывания для всех разрешенных прерываний AVR составляет минимум четыре такта. После четырех тактов выполняется адрес вектора программы для фактической процедуры обработки прерывания. В течение этих четырех тактов счетчик команд помещается в стек. Вектор обычно представляет собой переход к процедуре прерывания, и этот переход занимает три такта. Если во время выполнения многоцикловой инструкции возникает прерывание, эта инструкция завершается до того, как прерывание будет обслужено. Если прерывание происходит, когда MCU находится в спящем режиме, время отклика на выполнение прерывания увеличивается на четыре такта. Это увеличение происходит в дополнение к времени запуска из выбранного спящего режима.

    Возврат из процедуры обработки прерывания занимает четыре такта. В течение этих четырех тактов программный счетчик (два байта) извлекается из стека, указатель стека увеличивается на два, а бит I в SREG устанавливается.

    Если программа никогда не активирует источник прерывания, векторы прерывания не используются, и в эти места могут быть помещены обычные программные коды. Это также имеет место, если вектор сброса находится в разделе приложения, а векторы прерывания — в разделе загрузки или наоборот.

    38 0
    BOOTRST IVSEL Reset Address Interrupt Vectors Start Address
    1 0 0x000 0x002
    1 1 0x000 Адрес сброса загрузки + 0x0002
    0 0 Адрес сброса загрузки 0x002 1 Адрес сброса загрузки Адрес сброса загрузки + 0x0002
    MCUCR – регистр управления MCU

    Регистр управления MCU управляет размещением таблицы векторов прерываний.

    9039
      669 9009 9009. SEL 9009.SEL 9009.SEL 9009.SEL 9009.SEL. Векторы прерывания помещаются в начало флэш-памяти. Когда этот бит установлен (один), векторы прерывания перемещаются в начало раздела загрузчика флэш-памяти.
    • Бит 0 — IVCE: Разрешить изменение прерывания вектора
      Бит IVCE должен быть записан в логическую единицу, чтобы разрешить изменение бита IVSEL. IVCE очищается аппаратно через четыре цикла после записи или при записи IVSEL.

    Внешние прерывания ATmega328P

    Atmega328p DIP Dual Inline Package Pin Out

    Внешние прерывания запускаются контактами INT0 и INT1 или любым из контактов PCINT23…0. Прерывания будут срабатывать, даже если выводы INT0 и INT1 или PCINT23…0 сконфигурированы как выходы. Эта функция позволяет генерировать программное прерывание. Прерывание смены контакта PCI2 сработает, если какой-либо включенный контакт PCINT[23:16] переключится. Прерывание смены контакта PCI1 сработает, если какой-либо включенный контакт PCINT[14:8] переключится. Прерывание смены контакта PCI0 сработает, если какой-либо включенный контакт PCINT[7:0] переключится. Регистры PCMSK2, PCMSK1 и PCMSK0 контролируют, какие контакты вносят вклад в прерывания смены контактов. Прерывания смены контакта на PCINT23…0 обнаруживаются асинхронно. Это означает, что эти прерывания можно использовать для пробуждения части также из режимов сна, отличных от режима ожидания.

    Прерывания INT0 и INT1 могут быть вызваны падающим или нарастающим фронтом или низким уровнем. Это настроено, как указано в спецификации для внешнего регистра управления прерываниями A – EICRA. Когда прерывания INT0 или INT1 разрешены и настроены на запуск по уровню, прерывания будут срабатывать до тех пор, пока на выводе удерживается низкий уровень. Обратите внимание, что распознавание прерываний по заднему или переднему фронту на INT0 или INT1 требует наличия тактового генератора ввода-вывода.

    Синхронизация прерываний смены контакта в AVR
    EICRA — Регистр управления внешними прерываниями A

    Регистр A внешнего управления прерываниями содержит биты управления для управления обнаружением прерываний.

    Bit  7 6 5 4 3 2 1 0
    Read/Write
    Initial Value 
    R
    R/W
    R/W
    R/W
    R
    R
    R/W
    R/W
    0
    0x35 (0x55) BODS BODSE PUD IVSEL IVCE
    Bit  7 6 5 4 3 2 1 0
    Read/Write
    Initial Value 
    R
    R
    0
    Ч
    0
    Ч
    0
    Ч/З
    0
    R/W
    R/W
    R/W
    0
    0x35 (0x55) ISC11 ISC10 ISC01 ISC00
    • Бит 7: 4 — Зарезервированный
      Неиспользуемый и всегда будет чтение как ноль
    • бит 3, 2 — ISC11, ISC10: Interrupt Sense Control 1 и Bit 0 11
      333333333330 901
      3333330 901
      333330
      330
      330
      330
      30
      30
      30
      . 1 активируется внешним выводом INT1, если установлены I-флаг SREG и соответствующая маска прерывания. Значение на выводе INT1 замеряется перед обнаружением фронтов. Если выбрано прерывание по фронту или переключению, импульсы длительностью более одного тактового периода будут генерировать прерывание. Не гарантируется, что более короткие импульсы вызовут прерывание. Если выбрано прерывание низкого уровня, низкий уровень должен поддерживаться до завершения текущей выполняемой команды, чтобы сгенерировать прерывание.
    • Бит 1, 0 – ISC01, ISC00: управление прерыванием 0, бит 1 и бит 0
      Внешнее прерывание 0 активируется внешним выводом INT0, если установлены I-флаг SREG и соответствующая маска прерывания. Значение на выводе INT0 замеряется перед обнаружением фронтов. Если выбрано прерывание по фронту или переключению, импульсы длительностью более одного тактового периода будут генерировать прерывание. Не гарантируется, что более короткие импульсы вызовут прерывание. Если выбрано прерывание низкого уровня, низкий уровень должен поддерживаться до завершения текущей выполняемой команды, чтобы сгенерировать прерывание.
    9
    ISC11 ISC10 Описание
    0
    0 1 Любое логическое изменение в INT1 генерирует запрос на прерывание.
    1 0 Задний фронт INT1 генерирует запрос на прерывание.
    1 1 Нарастающий фронт INT1 генерирует запрос на прерывание
    ISC01 ISC00 Описание
    0 0
    0 0
    0 0
    0 0
    0 0
    .
    0 1 Любое логическое изменение в INT0 генерирует запрос на прерывание.
    1 0 Задний фронт INT0 генерирует запрос на прерывание.
    1 1 Нарастающий фронт INT0 генерирует запрос на прерывание
    EIMSK — регистр маски внешнего прерывания

    Регистр маски внешнего прерывания содержит разрешение или запрет прерываний INT1 и INT0.

    Bit  7 6 5 4 3 2 1 0
    Read/Write
    Initial Value 
    R
    R
    R
    R
    R
    R
    R/W
    R/W
    0
    0x1D (0x3D) INT1 INT0
          • .
          • Бит 1 — INT1: Запрос внешнего прерывания 1 Разрешить
            Когда бит INT1 установлен (единица) и бит I в регистре состояния (SREG) установлен (единица), прерывание внешнего вывода разрешено.
          • Бит 0 — INT0: Запрос внешнего прерывания 0 Разрешить
            Когда бит INT0 установлен (один) и I-бит в регистре состояния (SREG) установлен (один), прерывание внешнего вывода разрешено.
          EIFR – Регистр флагов внешних прерываний

          Регистр флагов внешних прерываний содержит флаги INTF1 и INTF0.

          Bit  7 6 5 4 3 2 1 0
          Read/Write
          Initial Value 
          R
          R
          R
          R
          R
          R
          R/W
          R/W
          0
          0x1C (0x3C) INTF1 INTF0
          • Бит 7:2 – Зарезервировано
            Эти биты всегда читаются как нули и всегда будут считываться как нули.
          • Бит 1 — INTF1: внешний флаг прерывания 1
            Когда фронт или логическое изменение на выводе INT1 запускает запрос прерывания, INTF1 устанавливается (единица). Если бит I в SREG и бит INT1 в EIMSK установлены (единица), MCU перейдет к соответствующему вектору прерывания. Флаг сбрасывается при выполнении процедуры обработки прерывания. В качестве альтернативы флаг можно очистить, записав в него логическую единицу. Этот флаг всегда сбрасывается, когда INT1 настроен как прерывание по уровню.
          • Бит 0 — INTF0: Флаг внешнего прерывания 0
            Когда фронт или логическое изменение на выводе INT0 запускает запрос на прерывание, INTF0 устанавливается (единица). Если бит I в SREG и бит INT0 в EIMSK установлены (единица), MCU перейдет к соответствующему вектору прерывания. Флаг сбрасывается при выполнении процедуры обработки прерывания. В качестве альтернативы флаг можно очистить, записав в него логическую единицу. Этот флаг всегда сбрасывается, когда INT0 настроен как прерывание по уровню.
          PCICR — регистр управления прерыванием смены контакта

          Регистр управления прерыванием смены контакта содержит включение или отключение PCI1, PCI2, PCI3.

          Bit  7 6 5 4 3 2 1 0
          Read/Write
          Initial Value 
          R
          R
          0
          Р
          Р
          Р
          R/W
          R/W
          R/W
          0
          (0x68) PCIE2 PCIE1 PCIE0
          • Бит 7:3 — зарезервировано
            Эти биты не используются и всегда будут считываться как нулевые.
          • Бит 2 — PCIE2: Разрешение прерывания по смене контакта 2
            Когда бит PCIE2 установлен (один) и бит I в регистре состояния (SREG) установлен (один), прерывание 2 по смене контакта разрешено. Любое изменение на любом включенном выводе PCINT[23:16] вызовет прерывание. Соответствующее прерывание запроса прерывания смены контакта выполняется из вектора прерывания PCI2. Выводы PCINT[23:16] активируются индивидуально регистром PCMSK2.
          • Бит 1 — PCIE1: Разрешение прерывания смены контакта 1
            Когда бит PCIE0 установлен (один) и I-бит в регистре состояния (SREG) установлен (один), прерывание смены контакта 0 разрешено. Любое изменение на любом включенном выводе PCINT[7:0] вызовет прерывание. Соответствующее прерывание запроса прерывания смены контакта выполняется из вектора прерывания PCI0. Выводы PCINT[7:0] активируются индивидуально регистром PCMSK0.
          PCIFR — Регистр прерывания смены контакта

          Регистр флагов прерывания смены контакта содержит флаги PCIF1, PCIF2, PCIF3.

          3 2/W R0139
          Bit  7 6 5 4 3 2 1 0
          Read/Write
          Initial Value 
          R
          R
          0
          R
          0
          R
          0
          R
          0
          R/W
          0
          R/W
          0
          0x1B (0x3B) PCIE2 PCIE1 PCIE0
          • Bit 7:3 – Reserved
            These bits are неиспользуемые биты и всегда будут читаться как ноль.
          • Бит 2 — PCIF2: Флаг прерывания смены контакта 2
            Когда логическое изменение на любом выводе PCINT[23:16] вызывает запрос на прерывание, PCIF2 устанавливается (единица). Если бит I в SREG и бит PCIE2 в PCICR установлены (единица), MCU перейдет к соответствующему вектору прерывания. Флаг сбрасывается при выполнении процедуры обработки прерывания. В качестве альтернативы флаг можно очистить, записав в него логическую единицу.
          • Бит 1 — PCIF1: флаг прерывания смены контакта 1
            Когда логическое изменение на любом выводе PCINT[14:8] вызывает запрос на прерывание, PCIF1 устанавливается (единица). Если бит I в SREG и бит PCIE1 в PCICR установлены (единица), MCU перейдет к соответствующему вектору прерывания. Флаг сбрасывается при выполнении процедуры обработки прерывания. В качестве альтернативы флаг можно очистить, записав в него логическую единицу.
          PCMSK2 – Регистр маски смены контакта 2
          Bit  7 6 5 4 3 2 1 0
          Read/Write
          Initial Value 
          R/W
          R/W
          R/W
          R/W
          R/W
          R/W
          R/W
          R/W
          0
          (0x6D) PCINT23 PCINT22 PCINT21 PCINT20 PCINT19 PCINT18 PCINT17 PCINT16
          • BIT 7: 0–
            • BIT 7: 0–
              • . -бит определяет, разрешено ли прерывание смены контакта на соответствующем выводе ввода-вывода. Если установлено значение PCINT[23:16] и установлен бит PCIE2 в PCICR, прерывание смены контакта разрешено на соответствующем контакте ввода/вывода. Если PCINT[23:16] сброшен, прерывание смены контакта на соответствующем выводе ввода-вывода отключено.
              PCMSK1 – Pin Change Mask Register 1
              Bit  7 6 5 4 3 2 1 0
              Read/Write
              Initial Value
              R/W
              R/W
              R/W
              R/W
              R/W
              R/W
              R/W
              Ч/З
              0
              (0x6C) PCINT14 PCINT13 PCINT12 PCINT11 PCINT10 PCINT9 PCINT8
              • Bit 6:0 – PCINT[14:8]: Pin Change Enable Маска 14…8
                Каждый бит PCINT[14:8] определяет, разрешено ли прерывание смены контакта на соответствующем выводе ввода-вывода. Если установлено значение PCINT[14:8] и установлен бит PCIE1 в PCICR, прерывание смены контакта разрешено на соответствующем контакте ввода/вывода. Если PCINT[14:8] сброшен, прерывание смены контакта на соответствующем выводе ввода-вывода отключено.
              PCMSK0 – Pin Change Mask Register 0
              Bit  7 6 5 4 3 2 1 0
              Read/Write
              Initial Value
              R/W
              R/W
              R/W
              R/W
              R/W
              R/W
              R/W
              Ч/З
              0
              (0x6B) PCINT7 PCINT6 PCINT5 PCINT4 PCINT3 PCINT2 PCINT1 PCINT0
              • Bit 6:0 – PCINT[7:0]: Pin Change Enable Маска 7…0
                Каждый бит PCINT[7:0] определяет, разрешено ли прерывание смены контакта на соответствующем выводе ввода/вывода.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *