Что это avr: Всё о микроконтроллерах AVR

Содержание

Всё о микроконтроллерах AVR

Микроконтроллер — микросхема, предназначенная для управления электронными устройствами.

AVR – это название популярного семейства микроконтроллеров, которое выпускает компания Atmel. Кроме АВР под этим брендом выпускаются микроконтроллеры и других архитектур, например, ARM и i8051.

Какими бывают AVR микроконтроллеры?

Существует три вида микроконтроллеров:

  1. AVR 8-bit.
  2. AVR 32-bit.
  3. AVR xMega

Самым популярным уже более десятка лет является именно 8-битное семейство микроконтроллеров. Многие радиолюбители начинали изучать микроконтроллеры с него. Почти все они познавали мир программируемых контроллеров делая свои простые поделки, вроде светодиодных мигалок, термометров, часов, а также простой автоматики, типа управления освещением и нагревательными приборами.

Микроконтроллеры AVR 8-bit в свою очередь делятся на два популярных семейства:

  • Attiny – из названия видно, что младшее (tiny – юный, молодой, младший), в основном имеют от 8 пинов и более. Объём их памяти и функционал обычно скромнее, чем в следующем;
  • Atmega – более продвинутые микроконтроллеры, имеют большее количество памяти, выводов и различных функциональных узлов;

Самым мощным подсемейством микроконтроллеров является xMega – эти микроконтроллеры выпускаются в корпусах с огромным количеством пинов, от 44 до 100. Столько необходимо для проектов с большим количеством датчиков и исполнительных механизмов. Кроме того, увеличенный объем памяти и скорость работы позволяют получить высокое быстродействие.

Расшифровка: Пин (англ. pin – иголка, булавка) – это вывод микроконтроллера или как говорят в народе – ножка. Отсюда же слово «распиновка» — т.е. информация о назначении каждой из ножек.

Для чего нужны и на что способны микроконтроллеры?

Микроконтроллеры применяются почти везде! Практически каждое устройство в 21 веке работает на микроконтроллере: измерительные приборы, инструменты, бытовая техника, часы, игрушки, музыкальные шкатулки и открытки, а также многое другое; одно лишь перечисление займет несколько страниц текста.

Разработчик может использовать аналоговый сигнал подовая его на вход микроконтроллера и манипулировать с данными о его значении. Эту работу выполняет аналогово-цифровой преобразователь (АЦП). Данная функция позволяет общаться пользователю с микроконтроллером, а также воспринимать различные параметры окружающего мира с помощью датчиков.

В распространенных AVR-микроконтроллерах, например, Atmega328, который на 2017 году является сердцем многих плат Arduino, но о них позже. Используется 8 канальный АЦП, с разрядностью 10 бит. Это значит вы сможете считать значение с 8 аналоговых датчиков. А к цифровым выводам подключаются цифровые датчики, что может быть очевидным. Однако цифровой сигнал может являться только 1 (единицей) или 0 (нулем), в то время как аналоговый может принимать бесконечное множество значений.

Пояснение:

Разрядность – это величина, которая характеризует качество, точность и чувствительность аналогового входа. Звучит не совсем понятно. Немного практики: 10 битный АЦП, записать аналоговую информацию с порта в 10 битах памяти, иначе говоря плавно изменяющийся цифровой сигнал микроконтроллером распознается как числовое значение от 0 до 1024.

12 битный АЦП видит тот же сигнал, но с более высокой точностью – в виде от 0 до 4096, а это значит, что измеренные значения входного сигнала будут в 4 раза точнее. Чтобы понять откуда взялись 1024 и 4096, просто возведите 2 в степени равную разрядности АЦП (2 в степени 10, для 10 разрядного и т.д.)

Чтобы управлять мощностью нагрузки к вашему распоряжению есть ШИМ-каналы, их можно задействовать, например, для регулировки яркости, температуры, или оборотов двигателя. В том же 328 контроллере их 6.

В общем структура AVR микроконтроллера изображена на схеме:

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

  • АЛУ
     – арифметико-логическое устройство. Нужно для выполнения вычислении.
  • Регистры общего назначения (РОН) – регистры которые могут принимать данные и хранить их в то время пока микроконтроллер подключен к питанию, после перезагрузки стираются. Служат как временные ячейки для операций с данными.
  • Прерывания – что-то вроде события которое возникает по внутренним или внешним воздействиям на микроконтроллер – переполнение таймера, внешнее прерывание с пина МК и т.д.
  • JTAG – интерфейс для внутрисхемного программирования без снятия микроконтроллера с платы.
  • Flash, ОЗУ, EEPROM – виды памяти – программ, временных рабочих данных, долгосрочного хранения независимая от подачи питания к микроконтроллеру соответственно порядку в названиях.
  • Таймеры и счетчики – важнейшие узлы в микроконтроллере, в некоторых моделях их количество может быть до десятка. Нужны для того, чтобы отчитывать количество тактов, соответственно временные отрезки, а счетчики увеличивают свое значение по какому-либо из событий. Их работа и её режим зависят от программы, однако выполняются эти действия аппаратно, т.е. параллельно основному тексту программы, могут вызвать прерывание (по переполнению таймера, как вариант) на любом этапе выполнения кода, на любой его строке.
  • A/D (Analog/Digital) – АЦП, его назначение мы уже описали ранее.
  • WatchDogTime (Сторожевой таймер) – независимый от микроконтроллера и даже его тактового генератора RC-генератор, который отсчитывает определенный промежуток времени и формирует сигнал сброса МК, если тот работал, и пробуждения – если тот был в режиме сна (энергосбережния). Его работу можно запретить, установив бит WDTE в 0.

Выходы микроконтроллера довольно слабые, имеется в виду то, что ток через них обычно до 20-40 миллиампер, чего хватит для розжига светодиода и LED-индикаторов. Для более мощной нагрузки – необходимы усилители тока или напряжения, например, те же транзисторы.

Что нужно чтобы начать изучение микроконтроллеров? 

Для начала нужно приобрести сам микроконтроллер. В роли первого микроконтроллера может быть любой Attiny2313, Attiny85, Atmega328 и другие. Лучше выбирать ту модель, которая описана в уроках, по которым вы будете заниматься.

Следующее что Вам нужно – программатор. Он нужен для загрузки прошивки в память МК, самым дешевым и популярным считается 

USBASP.

Немногим дороже, но не менее распространенный программатор AVRISP MKII, который можно сделать своими руками – из обычной платы Arduino

Другой вариант – прошивать их через USB-UART переходник, который обычно делается на одном из преобразователей: FT232RL, Ch440, PL2303 и CP2102.

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

  • ATmega8U2;
  • ATmega16U2;
  • ATmega32U2.

Одно лишь «но» – в память микроконтроллера предварительно нужно загрузить UART бутлоадер.

Разумеется, для этого все равно нужен программатор для AVR-микроконтроллеров.

Интересно: Bootloader – это обычная программа для микроконтроллера, только с необычной задачей – после его запуска (подключения к питания) он ожидает какое-то время, что в него могут загрузить прошивку. Преимуществом такого метода – можно прошить любым USB-UART переходником, а они очень дешевы. Недостаток – долго загружается прошивка.

Для работы UART (RS-232) интерфейса в микроконтроллерах AVR выделен целый регистр UDR (UART data register). UCSRA (настройки битов приемопередатчика RX, TX), UCSRB и UCSRС – набор регистров отвечающие за настройки интерфейса в целом.

В чем можно писать программы?

Кроме программатора для написания и загрузки программы нужно IDE – среда для разработки. Можно конечно же писать код в блокноте, пропускать через компиляторы и т.д. Зачем это нужно, когда есть отличные готовые варианты. Пожалуй, один из наиболее сильных – это IAR, однако он платный.

Официальным IDE от Atmel является AVR Studio, которая на 6 версии была переименована в Atmel studio. Она поддерживает все микроконтроллеры AVR (8, 32, xMega), автоматически определяет команды и помогает ввести, подсвечивает правильный синтаксис и многое другое. С её же помощью можно прошивать МК.

Наиболее распространённым является — C AVR, поэтому найдите самоучитель по нему, есть масса русскоязычных вариантов, а один из них — Хартов В.Я. «Микроконтроллеры AVR. Практикум для начинающих».

Самый простой способ изучить AVR

Купите или сделайте своими руками плату Arduino. Проект ардуино разработан специально для учебных целей. Он насчитывает десятки плат различных формами и количеством контактов. Самое главное в ардуино – это то что вы покупаете не просто микроконтроллера, а полноценную отладочную плату, распаянную на качественной текстолитовой печатной плате, покрытой маской и смонтированными SMD компонентами.

Самые распространенные – это Arduino Nano и Arduino UNO, они по сути своей идентичны, разве что «Нано» меньше примерно в 3 раза чем «Уно».

Несколько фактов:

  • Ардуино может программироваться стандартным языком – «C AVR»;
  • своим собственным – wiring;
  • стандартная среда для разработки – Arduino IDE;
  • для соединения с компьютером достаточно лишь подключить USB шнур к гнезду micro-USB на плате ардуино нано, установить драйвера (скорее всего это произойдет автоматически, кроме случаев, когда преобразователь на Ch440, у меня на Win 8.1 драйвера не стали, пришлось скачивать, но это не заняло много времени.) после чего можно заливать ваши «скетчи»;
  • «Скетчи» – это название программ для ардуино.

Выводы

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

Ранее ЭлектроВести писали, что в аэропорту «Борисполь» запустили первое электрозарядное устройство на два паркоместа. Об этом сообщил на своей странице в Facebook заместитель гендиректора аэропорта Георгий Зубко.

По материалам: electrik.info.

AVR. Учебный курс. Устройство и работа портов ввода-вывода

С внешним миром микроконтроллер общается через порты ввода вывода. Схема порта ввода вывода указана в даташите:

Но новичку там разобраться довольно сложно. Поэтому я ее несколько упростил:

Итак, что же представляет собой один вывод микроконтроллера. Вначале на входе стоит небольшая защита из диодов, она призвана защитить ввод микроконтроллера от превышения напряжения. Если напряжение будет выше питания, то верхний диод откроется и это напряжение будет стравлено на шину питания, где с ним будет уже бороться источник питания и его фильтры. Если на ввод попадет отрицательное (ниже нулевого уровня) напряжение, то оно будет нейтрализовано через нижний диод и погасится на землю. Впрочем, диоды там хилые и защита эта помогает только от микроскопических импульсов от помех. Если же ты по ошибке вкачаешь в ножку микроконтроллера вольт 6-7 при 5 вольтах питания, то никакой диод его не спасет.

Конденсатор, нарисованный пунктиром, это паразитная емкость вывода. Хоть она и крошечная, но присутствует. Обычно ее не учитывают, но она есть. Не забивай голову, просто знай это, как нибудь я тебе даже покажу как её можно применить 😉

Дальше идут ключи управления. Это я их нарисовал рубильниками, на самом деле там стоят полевые транзисторы, но особой сути это не меняет. А рубильники наглядней.
Каждый рубильник подчинен логическому условию которое я подписал на рисунке. Когда условие выполняется — ключ замыкается. PIN, PORT, DDR это регистры конфигурации порта.

Есть в каждом контроллере AVRPIC есть тоже подобные регистры, только звать их по другому).

Например, смотри в даташите на цоколевку микросхемы:

Видишь у каждой почти ножки есть обозначение Pxx. Например, PB4 где буква «B» означает имя порта, а цифра — номер бита в порту. За порт «B» отвечают три восьмиразрядных регистра PORTB, PINB, DDRB, а каждый бит в этом регистре отвечает за соответствующую ножку порта. За порт «А» таким же образом отвечают PORTA, DDRA, PINA.

PINх
Это регистр чтения. Из него можно только читать. В регистре PINx содержится информация о реальном текущем логическом уровне на выводах порта. Вне зависимости от настроек порта. Так что если хотим узнать что у нас на входе — читаем соответствующий бит регистра PINx Причем существует две границы: граница гарантированного нуля и граница гарантированной единицы — пороги за которыми мы можем однозначно четко определить текущий логический уровень. Для пятивольтового питания это 1.4 и 1.8 вольт соответственно. То есть при снижении напряжения от максимума до минимума бит в регистре PIN переключится с 1 на 0 только при снижении напруги ниже 1.4 вольт, а вот когда напруга нарастает от минимума до максимума переключение бита с 0 на 1 будет только по достижении напряжения в 1. 8 вольта. То есть возникает гистерезис переключения с 0 на 1, что исключает хаотичные переключения под действием помех и наводок, а также исключает ошибочное считывание логического уровня между порогами переключения.

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

DDRx
Это регистр направления порта. Порт в конкретный момент времени может быть либо входом либо выходом (но для состояния битов PIN это значения не имеет. Читать из PIN реальное значение можно всегда).

  • DDRxy=0 — вывод работает как ВХОД.
  • DDRxy=1 вывод работает на ВЫХОД.

PORTx
Режим управления состоянием вывода. Когда мы настраиваем вывод на вход, то от PORT зависит тип входа (Hi-Z или PullUp, об этом чуть ниже).
Когда ножка настроена на выход, то значение соответствующего бита в регистре PORTx определяет состояние вывода. Если PORTxy=1 то на выводе лог1, если PORTxy=0 то на выводе лог0.
Когда ножка настроена на вход, то если PORTxy=0, то вывод в режиме Hi-Z. Если PORTxy=1 то вывод в режиме PullUp с подтяжкой резистором в 100к до питания.

Есть еще бит PUD (PullUp Disable) в регистре SFIOR он запрещает включение подтяжки сразу для всех портов. По дефолту он равен 0. Честно говоря, я даже не знаю нафиг он нужен — ни разу не доводилось его применять и даже не представляю себе ситуацию когда бы мне надо было запретить использование подтяжки сразу для всех портов. Ну да ладно, инженерам Atmel видней, просто знай что такой бит есть. Мало ли, вдруг будешь чужую прошивку ковырять и увидишь что у тебя подтяжка не работает, а вроде как должна. Тогда слазаешь и проверишь этот бит, вдруг автор прошивки заранее где то его сбросил.

Общая картина работы порта показана на рисунке:

Теперь кратко о режимах:

  • Режим выхода
    Ну тут, думаю, все понятно — если нам надо выдать в порт 1 мы включаем порт на выход (DDRxy=1) и записываем в PORTxy единицу — при этом замыкается верхний ключ и на выводе появляется напряжение близкое к питанию. А если надо ноль, то в PORTxy записываем 0 и открывается уже нижний вентиль, что дает на выводе около нуля вольт.
  • Вход Hi-Z — режим высокоимпендансного входа.
    Этот режим включен по умолчанию. Все вентили разомкнуты, а сопротивление порта очень велико. В принципе, по сравнению с другими режимами, можно его считать бесконечностью. То есть электрически вывод как бы вообще никуда не подключен и ни на что не влияет. Но! При этом он постоянно считывает свое состояние в регистр PIN и мы всегда можем узнать что у нас на входе — единица или ноль. Этот режим хорош для прослушивания какой либо шины данных, т.к. он не оказывает на шину никакого влияния. А что будет если вход висит в воздухе? А в этом случае напряжение будет на нем скакать в зависимости от внешних наводок, электромагнитных помех и вообще от фазы луны и погоды на Марсе (идеальный способ нарубить случайных чисел!). Очень часто на порту в этом случае нестабильный синус 50Гц — наводка от сети 220В, а в регистре PIN будет меняться 0 и 1 с частотой около 50Гц
  • Вход PullUp — вход с подтяжкой.
    При DDRxy=0 и PORTxy=1 замыкается ключ подтяжки и к линии подключается резистор в 100кОм, что моментально приводит неподключенную никуда линию в состояние лог1. Цель подтяжки очевидна — недопустить хаотичного изменения состояния на входе под действием наводок. Но если на входе появится логический ноль (замыкание линии на землю кнопкой или другим микроконтроллером/микросхемой), то слабый 100кОмный резистор не сможет удерживать напряжение на линии на уровне лог1 и на входе будет нуль.

Также почти каждая ножка имеет дополнительные функции. На распиновке они подписаны в скобках. Это могут быть выводы приемопередатчиков, разные последовательные интерфейсы, аналоговые входы, выходы ШИМ генераторов. Да чего там только нет. По умолчанию все эти функции отключены, а вывод управляется исключительно парой DDR и PORT, но если включить какую-либо дополнительную функцию, то тут уже управление может полностью или частично перейти под контроль периферийного устройства и тогда хоть запишись в DDR/PORT — ничего не изменится. До тех пор пока не выключишь периферию занимающую эти выводы.
Например, приемник USART. Стоит только выставить бит разрешения приема RXEN как вывод RxD, как бы он ни был настроен до этого, переходит в режим входа.

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

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

Итак:

  • Самый безопасный для МК и схемы, ни на что не влияющий режим это Hi-Z.
  • Очевидно что этот режим и должен быть по дефолту.
  • Значения большинства портов I/O при включении питания/сбросе = 0х00, PORT и DDR не исключение.
  • Соответственно когда DDR=0 и PORT=0 это High-Z — самый безопасный режим, оптимальный при старте.
  • Hi-Z это вход, значит при DDR=0 нога настроена на вход. Запомнили.
  • Однако, если DDR=0 — вход, то что будет если PORT переключить в 1?
  • Очевидно, что будет другой режим входа. Какой? Pullup, другого не дано! Логично? Логично. Запомнили.
  • Раз дефолтный режим был входом и одновременно в регистрах нуль, то для того, чтобы настроить вывод на выход надо в DDR записать 1.
  • Ну, а состояние выхода уже соответствует регистру PORT — высокий это 1, низкий это 0.
  • Читаем же из регистра PIN.

Есть еще один способ, мнемонический:
1 похожа на стрелку. Стрелка выходящая из МК — выход. Значит DDR=1 это выход! 0 похож на гнездо, дырку — вход! Резистор подтяжки дает в висящем порту единичку, значит PORT в режиме Pullup должен быть в единичке!

Все просто! 🙂

Для детей в картинках и комиксах 🙂
Для большей ясности с режимами приведу образный пример:

Уровень напряжения на выводе словно планка, которая может двигаться вертикально вверх или вниз. В режиме Hi-Z мы можем на эту планку только смотреть, а двигать или как то на нее воздействовать мы не можем. Поэтому любая помеха может ее дрыгать как угодно, но зато если мы ее куда прицепим, то ее уровень будет зависеть только от другой цепи и ей мы не помешаем.

В режиме PullUp эту планку мы пружиной подтянули кверху. Слабые помехи не смогут больше ее дрыгать как угодно. С другой стороны шине она может помешать, но не факт что заблокирует ее работу. От шины зависит и ее силы. А еще мы можем отслеживать тупую внешнюю силу, вроде кнопки, которая может взять и придавить ее к земле. Тогда мы узнаем что кнопка нажата.

В режиме OUT у нас планка прибита гвоздями к земле или прижата домкратом к питанию. Внешняя сила может ее пересилить только сломав домкрат или сломается сама. Тупая внешняя сила просто разрушает наш домкрат или вырывает гвозди из пола с мясом. В любом случае — девайс в помойку.

Что такое АВР и для чего он нужен?

Для бесперебойного бытового и промышленного электроснабжения требуется автоматический ввод резерва.

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

Если напряжение в центральной линии пропадает, питание автоматически подключается к дополнительному вводу. Тем самым предотвращается ущерб, возмещение которого стоило бы намного дороже самого АВР. Простои производственного оборудования, отсутствие отопления, замерзание теплоносителя в системе отопления, повреждение труб — далеко не полный список негативных последствий. Во избежание всего этого и нужна защитная автоматика.

Принцип действия и алгоритм срабатывания

За автоматический запуск генератора отвечает щит АВР. Как только напряжение в центральной сети исчезает, за доли секунды активируется резервный источник питания. Благодаря этому на объекте всегда есть свет и тепло.

Однако АВР срабатывает не только при отсутствии напряжении. Для этого необходимо выполнение некоторых других условий:

  • отсутствие на защищаемом участке неустраненного короткого замыкания. Если это не так, то привлечение резервных источников питания представляет серьезную опасность;
  • включенный вводный выключатель;
  • наличие напряжения на соседнем участке, от которого будет поступать питание после срабатывания АВР. Если напряжения нет на обеих питающих линиях, то переключаться нецелесообразно.

Для проверки всех этих условий в устройствах предусмотрена логическая часть. Если все перечисленные требования соблюдены, то вводный выключатель обесточенной части электросети отключается. Лишь после этого запускается секционный выключатель, и на объект поступает электропитание от резервного источника.

Функциональные требования к АВР

  • Мгновенное срабатывание — в течение 0,3-0,8 с.
  • Постоянный контроль напряжения в сети.
  • Автоматическое переключение на резервный ввод, без вмешательства персонала.
  • Возврат к основному источнику питания после восстановления на нем напряжения. Работа генератора приостанавливается по истечении некоторого времени.
  • Срабатывание, независимо от причины перебоев с центральным питанием.
  • Игнорирование просадки напряжения в сети.
  • Однократное срабатывание. Многократное включение недопустимо.

Подробнее о том, как устроен автоматический ввод резерва, Вы можете прочитать на сайте либо узнать у инженеров нашего завода!

 

Вернуться в раздел

avr-libc: : Interrupts

Примечание: Это описание прерываний взято из документа Рича Несуолда. См. Благодарности.

В различных компиляторах обработка прерываний реализована по-разному, так как язык C старается оставаться подальше от машинно-зависимых подробностей. В среде WinAVR используется предустановленная таблица векторов прерываний, содержащая адреса соответствующих подпрограмм обслуживания с заранее определенными именами. Для каждой такой подпрограммы в этом библиотечном файле определен макрос: ISR(). Этот макрос регистрирует и помечает некоторую функцию как обработчик прерывания. Например, так выглядит определение обработчика для прерывания от АЦП.

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

Аппаратные средства AVR сбрасывают флаг глобального разрешения прерываний в регистре SREG перед вводом вектора прерывания. Таким образом, дальнейшие прерывания запрещаются до выхода из обработчика обслуживаемого прерывания (до команды RETI, которая генерируется компилятором в конце обработки прерывания). По этой причине, программы обработки прерывания обычно не вкладывают друг в друга. Для большинства программ обработки прерывания, это - желательное поведение, для некоторых это даже требуется, чтобы предотвратить бесконечные рекурсивные прерывания (подобные UART).

Однако в редких случаях необходимо как можно раньше установить флаг глобального разрешения прерываний. Это можно сделать, используя sei () в начале программы обработки прерывания, но и в этом случае все еще остаются несколько команд в сгенерированной компилятором вводной части, с запрещёнными вложенными прерываниями. Компилятор можно проинструктировать, чтобы вставить право команды SEI в начале программы обработки прерывания, используя следующий путь:

где XXX_vect допустимое имя вектора прерывания для рассматриваемого типа MCU (рассмотрено ниже).

Прерывание выбрано, если снабжено одним из имён нижеприведённой таблицы.

В последних версиях WinAVR допустимы две формы имён векторов. Одна форма использует имена, типа SIG_XXX — это была единственная доступная форма в avr-libc до версии 1.2.x. Начиная с avr-libc версии 1.4.0, добавилась вторая форма имен вектора прерывания, XXX_vect. Где XXX соответствует векторному имени, как описано в datasheet-e соответствующего устройства (и в файлах Atmel) с пробелами, замененными символом подчеркивания, и исключены другие не алфавитно-цифровые символы. Использование суффикса _vect применено, для того чтобы улучшить совместимость с другими компиляторами C, доступным для AVR. Форма SIG_XXX в будущем может стать осуждаемой, так что использовать её в новых проектах не рекомендуется.

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

- запрещает прерывания, сбрасывая флаг глобального разрешения прерываний.

- разрешает прерывания, устанавливая флаг глобального разрешения прерываний.

- обработка прерывания, выполняется с первоначально заблокированными глобальными прерываниями.

vector — должен быть одним из имён вектора прерывания, которые допустимы для применяемого MCU.

- устаревший вариант, аналог - макрокоманды ISR. Не используйте SIGNAL() в новых программах. Вместо этого используйте ISR().

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

Определяет vector указывающий на тот же самый вектор прерывания что и target_vector. Тем самым может использоваться единственное выполнение вектора прерывания, чтобы обслужить несколько источников прерывания. Не определяйте тело функции, поскольку функция сделает это за Вас.

Этот марос поддержан только в последних версиях AVR-GCC, (GCC 4.2 или исправленной GCC 4.1.x).

Векторное имя

Старое векторное имя

Описание

Применим для устройства

ADC_vect

SIG_ADC

аналого-цифровое преобразование завершено

AT90S2333, AT90S4433, AT90S4434, AT90S8535, AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega163, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny13, ATtiny15, ATtiny26, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85, ATtiny261, ATtiny461, ATtiny861, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

ANALOG_COMP_0_vect

SIG_COMPARATOR0

Аналоговый компаратор 0

AT90PWM3, AT90PWM2, AT90PWM1

ANALOG_COMP_1_vect

SIG_COMPARATOR1

Аналоговый компаратор 1

AT90PWM3, AT90PWM2, AT90PWM1

ANALOG_COMP_2_vect

SIG_COMPARATOR2

Аналоговый компаратор 2

AT90PWM3, AT90PWM2, AT90PWM1

ANALOG_COMP_vect

SIG_COMPARATOR

Аналоговый компаратор

AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

ANA_COMP_vect

SIG_COMPARATOR

Аналоговый компаратор

AT90S1200, AT90S2313, AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, ATmega16, ATmega161, ATmega162, ATmega163, ATmega32, ATmega323, ATmega8, ATmega8515, ATmega8535, ATtiny11, ATtiny12, ATtiny13, ATtiny15, ATtiny2313, ATtiny26, ATtiny28, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85, ATtiny261, ATtiny461, ATtiny861

CANIT_vect

SIG_CAN_INTERRUPT1

CAN Передача завершена или ошибка

AT90CAN128, AT90CAN32, AT90CAN64

EEPROM_READY_vect

SIG_EEPROM_READY, SIG_EE_READY

 

ATtiny2313

EE_RDY_vect

SIG_EEPROM_READY

EEPROM Готовый

AT90S2333, AT90S4433, AT90S4434, AT90S8535, ATmega16, ATmega161, ATmega162, ATmega163, ATmega32, ATmega323, ATmega8, ATmega8515, ATmega8535, ATtiny12, ATtiny13, ATtiny15, ATtiny26, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85, ATtiny261, ATtiny461, ATtiny861

EE_READY_vect

SIG_EEPROM_READY

EEPROM Готовый

AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega406, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

EXT_INT0_vect

SIG_INTERRUPT0

Внешний Запрос на прерывание 0

ATtiny24, ATtiny44, ATtiny84

INT0_vect

SIG_INTERRUPT0

Внешнее Прерывание 0

AT90S1200, AT90S2313, AT90S2323, AT90S2333, AT90S2343, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega406, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny11, ATtiny12, ATtiny13, ATtiny15, ATtiny22, ATtiny2313, ATtiny26, ATtiny28, ATtiny45, ATtiny25, ATtiny85, ATtiny261, ATtiny461, ATtiny861, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

INT1_vect

SIG_INTERRUPT1

Внешний Запрос на прерывание 1

AT90S2313, AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega32, ATmega323, ATmega406, ATmega64, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny2313, ATtiny28, ATtiny261, ATtiny461, ATtiny861, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

INT2_vect

SIG_INTERRUPT2

Внешний Запрос на прерывание 2

AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega32, ATmega323, ATmega406, ATmega64, ATmega8515, ATmega8535, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

INT3_vect

SIG_INTERRUPT3

Внешний Запрос на прерывание 3

AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega406, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

INT4_vect

SIG_INTERRUPT4

Внешний Запрос на прерывание 4

AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

INT5_vect

SIG_INTERRUPT5

Внешний Запрос на прерывание 5

AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

INT6_vect

SIG_INTERRUPT6

Внешний Запрос на прерывание 6

AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

INT7_vect

SIG_INTERRUPT7

Внешний Запрос на прерывание 7

AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

IO_PINS_vect

SIG_PIN, SIG_PIN_CHANGE

Внешний Запрос на прерывание 0

ATtiny11, ATtiny12, ATtiny15, ATtiny26

LCD_vect

SIG_LCD

LCD Начало Фрейма

ATmega169, ATmega169P, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega649, ATmega6490

LOWLEVEL_IO_PINS_vect

SIG_PIN

Ввод низкого уровня на Порту B

ATtiny28

OVRIT_vect

SIG_CAN_OVERFLOW1

CAN Переполненный Таймер

AT90CAN128, AT90CAN32, AT90CAN64

PCINT0_vect

SIG_PIN_CHANGE0

прерывание по изменению уровня на выводе параллельного порта 0

ATmega162, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega406, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny13, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

PCINT1_vect

SIG_PIN_CHANGE1

прерывание по изменению уровня на выводе параллельного порта 1

ATmega162, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega406, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny24, ATtiny44, ATtiny84, AT90USB162, AT90USB82

PCINT2_vect

SIG_PIN_CHANGE2

прерывание по изменению уровня на выводе параллельного порта 2

ATmega3250, ATmega3290, ATmega3290P, ATmega6450, ATmega6490, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644

PCINT3_vect

SIG_PIN_CHANGE3

прерывание по изменению уровня на выводе параллельного порта 3

ATmega3250, ATmega3290, ATmega3290P, ATmega6450, ATmega6490, ATmega324P, ATmega164P, ATmega644P, ATmega644

PCINT_vect

SIG_PIN_CHANGE, SIG_PCINT

 

ATtiny2313, ATtiny261, ATtiny461, ATtiny861

PSC0_CAPT_vect

SIG_PSC0_CAPTURE

PSC0 Случай захвата

AT90PWM3, AT90PWM2, AT90PWM1

PSC0_EC_vect

SIG_PSC0_END_CYCLE

PSC0 Конечный Цикл

AT90PWM3, AT90PWM2, AT90PWM1

PSC1_CAPT_vect

SIG_PSC1_CAPTURE

PSC1 Случай захвата

AT90PWM3, AT90PWM2, AT90PWM1

PSC1_EC_vect

SIG_PSC1_END_CYCLE

PSC1 Конечный Цикл

AT90PWM3, AT90PWM2, AT90PWM1

PSC2_CAPT_vect

SIG_PSC2_CAPTURE

PSC2 Случай захвата

AT90PWM3, AT90PWM2, AT90PWM1

PSC2_EC_vect

SIG_PSC2_END_CYCLE

PSC2 Конечный Цикл

AT90PWM3, AT90PWM2, AT90PWM1

SPI_STC_vect

SIG_SPI

прерывание от SPI

AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

SPM_RDY_vect

SIG_SPM_READY

память программ готова

ATmega16, ATmega162, ATmega32, ATmega323, ATmega8, ATmega8515, ATmega8535

SPM_READY_vect

SIG_SPM_READY

память программ готова

AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega406, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

TIM0_COMPA_vect

SIG_OUTPUT_COMPARE0A

Таймер/Счетчик Совпадение A

ATtiny13, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85

TIM0_COMPB_vect

SIG_OUTPUT_COMPARE0B

Таймер/Счетчик Совпадение B

ATtiny13, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85

TIM0_OVF_vect

SIG_OVERFLOW0

Таймер/Счетчик 0 Переполнение

ATtiny13, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85

TIM1_CAPT_vect

SIG_INPUT_CAPTURE1

Таймер/Счетчик 1 Захват

ATtiny24, ATtiny44, ATtiny84

TIM1_COMPA_vect

SIG_OUTPUT_COMPARE1A

Таймер/Счетчик 1 Совпадение A

ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85

TIM1_COMPB_vect

SIG_OUTPUT_COMPARE1B

Таймер/Счетчик 1 Совпадение B

ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85

TIM1_OVF_vect

SIG_OVERFLOW1

Таймер/Счетчик 1 Переполнение

ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85

TIMER0_CAPT_vect

SIG_INPUT_CAPTURE0

прерывание по захвату на входе

ATtiny261, ATtiny461, ATtiny861

TIMER0_COMPA_vect

SIG_OUTPUT_COMPARE0A

Таймер/Счетчик 0 Совпадение A

ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny2313, ATtiny261, ATtiny461, ATtiny861, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

TIMER0_COMPB_vect

SIG_OUTPUT_COMPARE0B, SIG_OUTPUT_COMPARE0_B

Таймер/Счетчик 0 Совпадение B

AT90PWM3, AT90PWM2, AT90PWM1, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny2313, ATtiny261, ATtiny461, ATtiny861, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

TIMER0_COMP_A_vect

SIG_OUTPUT_COMPARE0A, SIG_OUTPUT_COMPARE0_A

Таймер/Счетчик 0 Совпадение A

AT90PWM3, AT90PWM2, AT90PWM1

TIMER0_COMP_vect

SIG_OUTPUT_COMPARE0

Таймер/Счетчик 0 Совпадение

AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8515, ATmega8535

TIMER0_OVF0_vect

SIG_OVERFLOW0

Таймер/Счетчик 0 Переполнение

AT90S2313, AT90S2323, AT90S2343, ATtiny22, ATtiny26

TIMER0_OVF_vect

SIG_OVERFLOW0

Таймер/Счетчик 0 Переполнение

AT90S1200, AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny11, ATtiny12, ATtiny15, ATtiny2313, ATtiny28, ATtiny261, ATtiny461, ATtiny861, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

TIMER1_CAPT1_vect

SIG_INPUT_CAPTURE1

Таймер/Счетчик 1 Захват

AT90S2313

TIMER1_CAPT_vect

SIG_INPUT_CAPTURE1

Таймер/Счетчик 1 Захват

AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny2313, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

TIMER1_CMPA_vect

SIG_OUTPUT_COMPARE1A

Таймер/Счетчик 1 совпадение A

ATtiny26

TIMER1_CMPB_vect

SIG_OUTPUT_COMPARE1B

Таймер/Счетчик 1 совпадение B

ATtiny26

TIMER1_COMP1_vect

SIG_OUTPUT_COMPARE1A

Таймер/Счетчик 1 совпадение A

AT90S2313

TIMER1_COMPA_vect

SIG_OUTPUT_COMPARE1A

Таймер/Счетчик1 Совпадение A

AT90S4414, AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny2313, ATtiny261, ATtiny461, ATtiny861, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

TIMER1_COMPB_vect

SIG_OUTPUT_COMPARE1B

Таймер/Счетчик1 Совпадение B

AT90S4414, AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny2313, ATtiny261, ATtiny461, ATtiny861, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

TIMER1_COMPC_vect

SIG_OUTPUT_COMPARE1C

Таймер/Счетчик 1 Совпадение C

AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

TIMER1_COMPD_vect

SIG_OUTPUT_COMPARE0D

Таймер/Счетчик 1 Совпадение D

ATtiny261, ATtiny461, ATtiny861

TIMER1_COMP_vect

SIG_OUTPUT_COMPARE1A

Таймер/Счетчик 1 Совпадение A

AT90S2333, AT90S4433, ATtiny15

TIMER1_OVF1_vect

SIG_OVERFLOW1

Таймер/Счетчик 1 Переполнение

AT90S2313, ATtiny26

TIMER1_OVF_vect

SIG_OVERFLOW1

Таймер/Счетчик 1 Переполнение

AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny15, ATtiny2313, ATtiny261, ATtiny461, ATtiny861, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

TIMER2_COMPA_vect

SIG_OUTPUT_COMPARE2A

Таймер/Счетчик 2 Совпадение A

ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

TIMER2_COMPB_vect

SIG_OUTPUT_COMPARE2B

Таймер/Счетчик 2 Совпадение A

ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

TIMER2_COMP_vect

SIG_OUTPUT_COMPARE2

Таймер/Счетчик 2 Совпадение

AT90S4434, AT90S8535, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8535

TIMER2_OVF_vect

SIG_OVERFLOW2

Таймер/Счетчик 2 Переполнение

AT90S4434, AT90S8535, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

TIMER3_CAPT_vect

SIG_INPUT_CAPTURE3

Таймер/Счетчик 3

Захват

AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega162, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

TIMER3_COMPA_vect

SIG_OUTPUT_COMPARE3A

Таймер/Счетчик 3 Совпадение A

AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega162, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

TIMER3_COMPB_vect

SIG_OUTPUT_COMPARE3B

Таймер/Счетчик 3 Совпадение B

AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega162, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

TIMER3_COMPC_vect

SIG_OUTPUT_COMPARE3C

Таймер/Счетчик 3 Совпадение C

AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

TIMER3_OVF_vect

SIG_OVERFLOW3

Таймер/Счетчик 3 Переполнение

AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega162, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

TIMER4_CAPT_vect

SIG_INPUT_CAPTURE4

Таймер/Счетчик 4 Захват

ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561

TIMER4_COMPA_vect

SIG_OUTPUT_COMPARE4A

Таймер/Счетчик 4 Совпадение A

ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561

TIMER4_COMPB_vect

SIG_OUTPUT_COMPARE4B

Таймер/Счетчик 4 Совпадение B

ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561

TIMER4_COMPC_vect

SIG_OUTPUT_COMPARE4C

Таймер/Счетчик 4 Совпадение C

ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561

TIMER4_OVF_vect

SIG_OVERFLOW4

Таймер/Счетчик 4 Переполнение

ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561

TIMER5_CAPT_vect

SIG_INPUT_CAPTURE5

Таймер/Счетчик 5 Совпадение

ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561

TIMER5_COMPA_vect

SIG_OUTPUT_COMPARE5A

Таймер/Счетчик 5 Совпадение A

ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561

TIMER5_COMPB_vect

SIG_OUTPUT_COMPARE5B

Таймер/Счетчик 5 Совпадение B

ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561

TIMER5_COMPC_vect

SIG_OUTPUT_COMPARE5C

Таймер/Счетчик 5 Совпадение C

ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561

TIMER5_OVF_vect

SIG_OVERFLOW5

Таймер/Счетчик 5 Переполнение

ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561

TWI_vect

SIG_2WIRE_SERIAL

2-проводный последовательный интерфейс (I2C)

AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega16, ATmega163, ATmega32, ATmega323, ATmega406, ATmega64, ATmega8, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

TXDONE_vect

SIG_TXDONE

Transmission Done, Bit Timer Flag 2 Interrupt

AT86RF401

TXEMPTY_vect

SIG_TXBE

Transmit Buffer Empty, Bit Itmer Flag 0 Interrupt

AT86RF401

UART0_RX_vect

SIG_UART0_RECV

UART0, Приём закончен

ATmega161

UART0_TX_vect

SIG_UART0_TRANS

UART0, Передача закончена

ATmega161

UART0_UDRE_vect

SIG_UART0_DATA

UART0 опустошение регистра данных

ATmega161

UART1_RX_vect

SIG_UART1_RECV

UART1, Приём закончен

ATmega161

UART1_TX_vect

SIG_UART1_TRANS

UART1, Передача закончена

ATmega161

UART1_UDRE_vect

SIG_UART1_DATA

UART1 опустошение регистра данных

ATmega161

UART_RX_vect

SIG_UART_RECV

UART, Приём закончен

AT90S2313, AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, ATmega103, ATmega163, ATmega8515

UART_TX_vect

SIG_UART_TRANS

UART, Передача закончена

AT90S2313, AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, ATmega103, ATmega163, ATmega8515

UART_UDRE_vect

SIG_UART_DATA

UART опустошение регистра данных

AT90S2313, AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, ATmega103, ATmega163, ATmega8515

USART0_RXC_vect

SIG_USART0_RECV

USART0, Приём закончен

ATmega162

USART0_RX_vect

SIG_UART0_RECV

USART0, Приём закончен

AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega325, ATmega329, ATmega329P, ATmega64, ATmega645, ATmega649, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644

USART0_TXC_vect

SIG_USART0_TRANS

USART0, Передача закончена

ATmega162

USART0_TX_vect

SIG_UART0_TRANS

USART0, Передача закончена

AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644

USART0_UDRE_vect

SIG_UART0_DATA

USART0 опустошение регистра данных

AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega162, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega325, ATmega329, ATmega329P, ATmega64, ATmega645, ATmega649, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644

USART1_RXC_vect

SIG_USART1_RECV

USART1, Приём завершен

ATmega162

USART1_RX_vect

SIG_UART1_RECV

USART1, Приём завершен

AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

USART1_TXC_vect

SIG_USART1_TRANS

USART1, Передача закончена

ATmega162

USART1_TX_vect

SIG_UART1_TRANS

USART1, Передача закончена

AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

USART1_UDRE_vect

SIG_UART1_DATA

USART1, опустошение регистра данных

AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega162, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

USART2_RX_vect

SIG_USART2_RECV

USART2, Приём завершен

ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561

USART2_TX_vect

SIG_USART2_TRANS

USART2, Передача закончена

ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561

USART2_UDRE_vect

SIG_USART2_DATA

USART2 опустошение регистра данных

ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561

USART3_RX_vect

SIG_USART3_RECV

USART3, Приём завершен

ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561

USART3_TX_vect

SIG_USART3_TRANS

USART3, Передача закончена

ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561

USART3_UDRE_vect

SIG_USART3_DATA

USART3 опустошение регистра данных

ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561

USART_RXC_vect

SIG_USART_RECV, SIG_UART_RECV

USART, Приём завершен

ATmega16, ATmega32, ATmega323, ATmega8

USART_RX_vect

SIG_USART_RECV, SIG_UART_RECV

USART, Приём завершен

AT90PWM3, AT90PWM2, AT90PWM1, ATmega3250, ATmega3290, ATmega3290P, ATmega6450, ATmega6490, ATmega8535, ATmega168, ATmega48, ATmega88, ATtiny2313

USART_TXC_vect

SIG_US

 

 

 

Управление флагом глобального разрешения прерываний

 

Флаг глобального разрешения прерываний расположен в регистре состояния (SREG).

 

#define 

sei()

 

#define 

cli()

 

 

Макроопределения для написания функций обработки прерываний

 

 

 

#define 

ISR(vector)

 

#define 

SIGNAL(vector)

 

#define 

EMPTY_INTERRUPT(vector)

 

#define 

ISR_ALIAS(vector, target_vector)

 

РадиоКот :: Настройка портов ввода-вывода

РадиоКот >Обучалка >Микроконтроллеры и ПЛИС >Микроконтроллеры AVR — пишем, компилируем, прошиваем… >

Настройка портов ввода-вывода

У нас уже есть папка tutorial c файлом code.asm и двумя настроенными батниками. Можете писать прямо в этот файл, а можете скопировать папочку tutorial под другим именем. Нопример, у меня папка с этим проектом называется runfire (типа, бегущий огонек :)).

Структура новой папки должна остаться такой же, как у tutorial.
Открываем code.asm (правой кнопкой по файлу -> Правка). Стираем все кроме самой первой строки, в которой написано .include тра-ля-ля…

Я помнится уже где-то говорил, что любая программа начинается с настройки портов. Я от своих слов не отказываюсь. Кстати говоря, кроме этого, в начале программы обычно прописывается указатель СТЕКа. Но мы еще не знаем, что такое стек, и он нам сегодня не понадобится — так шо, иди он лесом.

Но самым первым делом, мы должны объявить о начале текста программы и назначить адрес ПЗУ для первой команды. Поэтому мы пишем:

.include «d:avravrasmappnotes2313def.inc»

.cseg
.org 0

CSEG — обозначает начало программного сегмента
ORG — задает начальный адрес. В данном случае он = 0.

Кроме программного сегмента, бывает сегмент данных — DSEG.
В нем инициализируется оперативная память. Но об этом мы будем говорить в дальнейшем.

Итак, как вы помните, в нашем контроллере 16 РОН (регистров общего назначения): R16…R31. С любым из них мы можем сделать все что угодно. Просто полная анархия! Однако, я бы не рекомендовал злоупотреблять количеством используемых регистров. Это очень усложняет процесс написания программы. Я обычно использую 4 или 5 регистров - только самое необходимое в данный момент. Остальное — в оперативке (ОЗУ).

Чтобы не запутаться, я по-своему обзываю эти регистры: Temp, Temp1, …, Temp4. И вам того же желаю. Делается это так: до начала программного сегмента необходимо прописать примерно следующее:

.def     Temp=R16
.def     Temp1=R17
и т.д.

Напишем:

.include «d:avravrasmappnotes2313def.inc»

.def     Temp=R16
.def     Temp1=R17
.def     Temp2=R18
.def     Temp3=R19
.def     Temp4=R20

.cseg
.org 0

Все, теперь нам станет проще…

Ах да! Мы ж настраиваем порты… 🙂 Ну ладно — настраиваем!

Я уже говорил, что каждый порт ввода-вывода (ПВВ) состоит из скольки-то каналов.
Каждый канал может быть настроен на вход или на выход.
В нашем контроллере два порта:

PortB — 8 каналов (к нему подключены светодиоды)
PortD — 7 каналов (к нему пока ничего не подключено)

Порты устроены очень хитроумно. Для работы с любым портом используется три регистра:

PortX
PinX
DDRX
(где X — буква порта, например PortB, PinD и т.д.)

PortX содержит информацию, предназначенную для вывода.
PinX содержит вводимую информацию
DDRX содержит информацию о том, какой канал настроен на ввод, какой — на вывод.

То есть, DDRX определяет, грубо говоря, какая ножка микросхемы будет подключена к PinX, какая — к PortX:

0 — ввод
1 — вывод

Соответственно, если, скажем, PX3 настроен на ввод, то бесполезно писать что-либо в 3-й бит PortX, поскольку оно не будет выведено.
И наоборот, если например, PX5 настроен на вывод, то прочитав 5-й бит PinD, мы всегда обнаружим 0.
Порты — дело тонкое…

По умолчанию, все каналы порта настроены на ввод.

Нам же надо, чтобы порт B был целиком настроен на вывод. Значит, все биты DDRB должны равняться 1. То есть, в DDRB надо записать «11111111».

Мы не можем напрямую записать константу в регистр, не являющийся РОН. Но мы можем вывести значение из РОНа в этот регистр.

Знакомимся с первыми операторами:

out — оператор вывода данных из РОН в другие регистры

Пример:
out DDRB,Temp1

ldi — оператор присвоения константы РОН

Примеры:
ldi Temp1,14 — присвоение десятеричной константы (14)
ldi Temp1,0x0E — присвоение шестнадцатеричной константы (0E)
ldi Temp1,0b00001110 — присвоение двоичной константы (00001110)

Итак, операция настройки портов происходит в два шага:
1.Присваиваем РОН константу
2.Выводим данные из РОН в DDRx

.include «d:avravrasmappnotes2313def.inc»

.def     Temp=R16
.def     Temp1=R17
.def     Temp2=R18
.def     Temp3=R19
.def     Temp4=R20

.cseg
.org 0

ldi Temp, 0b11111111  ;присвоение константы
out DDRB,Temp         ;вывод

Все! Порты настроены, я вас поздравляю.
А шуму то было! :)

Теперь можно вывести какое-нибудь число и проверить как работает наша схема.
Выведем двоичное число 11010010

.cseg
.org 0

ldi Temp, 0b11111111  ;присвоение константы
out DDRB,Temp         ;вывод

;выводим число 11010010 на светодиоды

ldi Temp,0b11010010  ;присвоение константы
out PortB,Temp         ;вывод на индикацию

Компилируем. Шьем. Смотрим. Должны загореться соответствующие светодиоды.
Загорелись?
Кричим УРА, идем дальше… 🙂

<<—Вспомним пройденное—-Поехали дальше—>>


Как вам эта статья?

Заработало ли это устройство у вас?

Прерывания микроконтроллеров семейства AVR | AVR Lab устройства на микроконтроллерах AVR

Меня самого мучал вопрос что ж это такое, искал информацию, но из-за того, что в русскоязычном интернете нету ни одного толкового сайта наполненного информацией, структурированного и ухоженного, кроме конечно easyelectronics.ru пришлось потратить довольно много времени на освоение данного вопроса.

Еще одна сложность изучения прерываний в том, что наилучший показатель по освоению материала достигается примерами рабочего кода программы. Такие хоть и есть, НО!!! Из-за того, что многие в основном ленивые проггеры начинают работу с компилятором CV-AVR, в котором хоть и есть предварительный редактор кода с помощью которого перед написанием программы можно предварительно сконфигурировать те же таймеры, модули USART, TWI, но все же крайне не удобный интерфейс, с моей точки зрения и вообще CV-AVR мне крайне не симпатичен. Другое дело AVR Studio в связке с WinAVR 🙂
Так очень распространены примеры программ на ассемблере, у него куча преимуществ но один значительный недостаток, при изучении с нуля необходимо присутствие специалиста. Так же в интернете есть еще куча различных вариантов для написания управляющей программы микроконтроллера такие как: Basic, Flow Code и тд. тп. Но как-то так сложилось, как в своё время с операционной системой Windows, она не самая лучшая но никому нет до этого дела. Кстати о Windows советую посмотреть фильм «Пираты силиконовой долины».

И так, прерывание — это событие, после которого выполняется подпрограмма (обработчик прерываний).
Пример:
Основная программа — бегущий огонек из 8-ми светодиодов, выполняется при включении питания микроконтроллера.
К микроконтроллеру подключена кнопка к ножке int0 (смотри datasheet на конкретный микроконтроллер).
При нажатии на кнопку программа бегущего огонька останавливается и восемь светодиодов начинают мигать — это и есть программа обработки прерывания. Светодиоды мигают столько, сколько задано в подпрограмме, после окончания выполнения подпрограммы обработки прерывания микроконтроллер возвращается к выполнению основной программы — бегущего огонька, при том с места, на котором он ранее остановился.

Подпрограмму обработки прерываний желательно делать как можно короче, то есть не делать ей по времени выполнения особо длинной, не пихать в частности паузы в 1секунду и более.

Для того чтобы микроконтроллер учитывал(выполнял) прерывания в программе необходимо их включить, то есть инициализировать обработку прерываний. Для языка C выглядит следующим образом:

  1. SIGNAL (SIG_INTERRUPT1)//программа-обработчик прерываний

  2. {

  3. ...

  4. }

  5.  

  6. int main (void)//основная программа

  7. {

  8. sei(); //Разрешаем глобально прерывания

  9. ...

  10. }

Так же предусмотрен вариант, когда необходимо на время запретить выполнение прерываний, для это используют следующую запись в языке C:

  1. {

  2. cli(); //запрещаем выполнение прерываний

  3. ...

  4. }

Вызвать прерывание можно несколькими способами, верней даже это не способы а причины появления прерывания. В datasheet имеется таблица прерывания микроконтроллера, и в ней можно посмотреть все источники этих самых прерываний.
Таблица прерываний микроконтроллера ATtiny2313:

Номер вектораАдрес подпрограммыИсточник прерыванияОписание прерывания
10x0000RESETВнешний сброс, сброс при включении питания, сброс по срабатыванию охранного таймера
20x0001INT0Внешний запрос на прерывание по входу INT0
30x0002INT1Внешний запрос на прерывание по входу INT1
40x0003TIMER1 САРТПрерывание по захвату таймера/счетчика 1
50x0004TIMER1 COMPAПрерывание по совпадению таймера/счетчика 1. Канал А
60x0005T1MER1 OVFПрерывание по переполнению таймера/счетчика 1
70x0006TIMER0 OVFПрерывание по переполнению таймера/счетчика 0
80x0007USART0, RXUSART0, прием завершен
90x0008USART0, UDREUSART0 буфер данных пуст
100x0009USART0, TXUSART0, передача завершена
110x000AANALOG COMPПрерывание от аналогового компаратора
120x000BPCINTПрерывание по изменению на любом из выводов
130x000CTIMER1 COMPBПрерывание по совпадению таймера/счетчика 1. Канал В
140x000DTIMER0 COMPAПрерывание по совпадению таймера/счетчика 0. Канал В
150x000ETIMER0 COMPBПрерывание по совпадению таймера/счетчика 0. Канал А
160x000FUSI STARTПрерывание по USI. Готовность к старту
170x0010USI OVERFLOWПрерывание по USI, Переполнение
180x0011ЕЕ READYГотовность EEPROM
190x0012WDT OVERFLOWПереполнение охранного таймера

Пример синтаксиса объявления подпрограммы-обработчика прерываний:
Обработка прерываний INT1

  1. SIGNAL (SIG_INTERRUPT1)

  2. {

  3. ...

  4. }

Обработка прерываний по переполнению таймера 0

  1. ISR (TIMER0_OVF_vect)

  2. {

  3. ...

  4. }

Обработка прерывания по приходу байта на модуль USART

  1. ISR(USART_RXC_vect)

  2. {

  3. ...

  4. }

  1. SIGNAL (SIG_OVERFLOW0)

  2. {

  3. ...

  4. }

Синтаксис для компилятора WinAVR в CV-AVR немножко по другому будет выглядеть, обратите внимание.

Прерывания очень полезны если программа довольно большая и имеет разветвленную структуру, прерывания могут облегчить её написание уменьшить размер.

Прерывания имеют свой приоритет, так если например в программе используется несколько прерываний и так получилось что в один и тот же момент времени случаются два прерывания, то в первую очередь будет выполнено прерывание с приоритетом выше. Приоритет прерываний указан в таблице прерываний, чем меньше адрес подпрограммы прерывания, тем выше приоритет.
Наглядный пример работы с прерываниями int0 и int1 с исходным кодом и комментариями.

AVR. Внешние прерывания. Подключение энкодера

Внешние прерывания очень — очень мощный инструмент. Контроллер способен при правильной настройке реагировать на внешнее событие. При этом останавливается выполнение основной программы и выполняется обработчик прерывания.

Подготовка к работе

На нашей плате TutorShield установлены две кнопки, которые подключены к цифровым выводам PD2 и PD3. Подробно подключение кнопок описано в предыдущей статье цикла. Помимо них, для дальнейших экспериментов подключим трехцветный светодиод к выводам PB1, PB2, PB3. Установите перемычки так, как показано на рисунке:

Установка перемычек

Первый пример

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

#include <avr/io.h>
#define F_CPU 16000000UL //16MHz
#include <util/delay.h>

#define LED_BLUE_PB 3
#define LED_ORANGE_PB 2
#define LED_GREEN_PB 1

int main(void) {
    //output configuration
    DDRB  |= (1<<LED_BLUE_PB)|(1<<LED_ORANGE_PB)|(1<<LED_GREEN_PB);
    PORTB &= ~((1<<LED_BLUE_PB)|(1<<LED_ORANGE_PB)|(1<<LED_GREEN_PB));
    //interrupt setup
    GICR |= (1<<INT0)|(1<<INT1);
    MCUCR |= (1<<ISC00)|(1<<ISC01)|(1<<ISC10)|(1<<ISC11);
    //global interrupt enable
    sei();
    while(1) {
        //do nothing
    }
}

ISR(INT0_vect) {
    PORTB |= 1<<LED_BLUE_PB;
}

ISR(INT1_vect) {
    PORTB &= ~(1<<LED_BLUE_PB);
}

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

  1. GICR — основной контролирующий регистр модуля прерываний. В необходимо выставить два бита — INT0 и INT1. Они разрешают жти прерывания. То есть, если на выводах контроллера PD2 и PD3 соответственно будет меняться напряжение — прерывания будут обрабатываться (смотри Pin Configurations на стр. 2 даташита).
  2. MCUCR отвечает за режим вызова прерываний. Прерывания может быть вызвано при возрастании напряжения на выводе, при уменьшении, при изменении и тогда, когда на выводе логический ноль. Например для прерывания INT1 режим задается битами ISC11 и ISC10. Мы выставили эти биты в единицу. Мы предлагаем вам самостоятельно выяснить при каком условии будет вызвано прерывание (стр. 66 даташита)

Затем необходимо глобально разрешить контроллеру обрабатывать прерывания вообще. Это делается вызовом функции sei(). Возможность глобального разрешения и запрета прерываний позволяет вам во время выполнения важных задач отключать вызов обработчиков прерываний. В нашем проекте такого не понадобится, поэтому мы просто раз и навсегда разрешили контроллеру выполнять прерывания.
Далее по коду запускается бесконечный цикл в котором ничего не выполняется.
Для работы остается только описать контроллеру, что делать при наступлении прерывания. Причем, если прерывание вызвано, а обработчика для него нет — контроллер повиснет.
Итак, всего в микроконтроллере Atmega8 девятнадцать векторов прерываний. Все они описаны на странице 46 даташита. Нас интересуют прерывания INT0 и INT1. Функция объявляется следующим образом: ISR(INT0_vect). Далее описывается какое-то действие. В нашем случае при срабатывании прерывания INT0 голубой светодиод включается, а в обработчике прерывания INT1 — выключается.
Вот как это выглядит:

Как вы уже выяснили, прерывание срабатывает, когда кнопка отпускается, то фронту импульса на выводе. Попробуйте настроить прерывание так, чтобы состояние светодиода изменялось в момент нажатия на кнопку.

Второй пример

Скорее всего на практике вы не заметите разницу и светодиод у вас будет включаться при нажатии на кнопку. Это связано с тем, что при нажатии появляется, так называемый, дребезг контактов. То есть контакты перед тем как полностью замкнуться или разомкнуться успевают несколько раз перейти из одного состояния в другое. Проверить эту особенность можно если добавить в программу вывод в COM-порт некоторых значений.
Заведем переменную и каждый раз в прерывании будем отправлять ее компьютеру:

#include <avr/io.h>
#define F_CPU 16000000UL //16MHz
#include <util/delay.h>

#define LED_BLUE_PB 3
#define LED_ORANGE_PB 2
#define LED_GREEN_PB 1

uint8_t i = 0;

void UARTSend(uint8_t data) {
    while(!(UCSRA & (1<<UDRE)));
    UDR = data;
}

int main(void) {
    //output configuration
    DDRB  |= (1<<LED_BLUE_PB)|(1<<LED_ORANGE_PB)|(1<<LED_GREEN_PB);
    PORTB &= ~((1<<LED_BLUE_PB)|(1<<LED_ORANGE_PB)|(1<<LED_GREEN_PB));
    //interrupt setup
    GICR |= (1<<INT0)|(1<<INT1);
    MCUCR |= (1<<ISC00)|(1<<ISC01)|(1<<ISC10)|(1<<ISC11);
    //UART setup
    UBRRH = 0;
    UBRRL = 103; //baud rate 9600
    UCSRB = (1<<RXEN)|(1<<TXEN);
    UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8 bit, 1 stop bit
    //global interrupt enable
    sei();
    while(1) {
        //do nothing
    }
}

ISR(INT0_vect) {
    PORTB |= 1<<LED_BLUE_PB;
    UARTSend(i);
    i++;
}

ISR(INT1_vect) {
    PORTB &= ~(1<<LED_BLUE_PB);
    UARTSend(i);
    i--;
}

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

Обработка энкодера

Энкодер подключен к тем же выводам и при вращении генерирует последовательности импульсов на своих выводах при вращении вала. На практике самый простой способ обработки энкодера это настройка одного из выводов на прерывание и при его срабатывании проверять состояние другого вывода. При вращении вала энкодера мы будем менять яркость свечения светодиода, так что придется вспомнить статью про ШИМ.

#include <avr/io.h>
#define F_CPU 16000000UL //16MHz
#include <util/delay.h>

#define LED_BLUE_PB 3
#define LED_ORANGE_PB 2
#define LED_GREEN_PB 1

uint8_t i = 0;

void UARTSend(uint8_t data) {
    while(!(UCSRA & (1<<UDRE)));
    UDR = data;
}

int main(void) {
    //output configuration
    DDRB  |= (1<<LED_BLUE_PB)|(1<<LED_ORANGE_PB)|(1<<LED_GREEN_PB);
    PORTB &= ~((1<<LED_BLUE_PB)|(1<<LED_ORANGE_PB)|(1<<LED_GREEN_PB));
    //interrupt setup
    GICR |= (1<<INT0)|(1<<INT1);
    MCUCR |= (1<<ISC00)|(1<<ISC01)|(1<<ISC10)|(1<<ISC11);
    //UART setup
    UBRRH = 0;
    UBRRL = 103; //baud rate 9600
    UCSRB = (1<<RXEN)|(1<<TXEN);
    UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8 bit, 1 stop bit
    //global interrupt enable
    sei();
    while(1) {
        //do nothing
    }
}

ISR(INT0_vect) {
    PORTB |= 1<<LED_BLUE_PB;
    UARTSend(i);
    i++;
}

ISR(INT1_vect) {
    PORTB &= ~(1<<LED_BLUE_PB);
    UARTSend(i);
    i--;
}

Обратите внимание на изменения в коде.

  1. Добавлена настройка вывода PD3 на вход
  2. Инициализируется только прерывание INT0
  3. Добавлена настройка таймера
  4. В обработчике прерывания мы проверяем состояние вывода PD3 и в зависимости от него увеличиваем или уменьшаем с контролем переполнения переменную pwm, а затем меняем яркость светодиода

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

Скорее всего вы заметите, что у энкодера дребезг контактов еще больше.

Индивидуальные задания

  1. Измените код первого примера так, чтобы при нажатии на кнопку светодиод менял свое состояние. То есть при каждом последующем нажатии он должен включаться или выключаться.
  2. Используя знания о работе с сегментным индикатором подключите его и выведите на дисплей значение переменной, изменяемой энкодером

Остальные статьи цикла можно найти здесь.

Мы будем очень рады, если вы поддержите наш ресурс и посетите магазин наших товаров shop.customelectronics.ru.

Как AVR работает в генераторах

MTS Power Products — поставщик высококачественных генераторных установок, автоматических регуляторов напряжения (АРН), автоматических переключателей и многих других продуктов. Если вам интересно, как AVR работает в генераторах, мы здесь, чтобы заверить вас, что это нормально. Большинство владельцев генераторных установок, которые не прошли обучение в технических специалистах, не понимают точных механизмов или функций различных компонентов системы генератора, в том числе АРН. Мы предлагаем одни из лучших автоматических регуляторов напряжения, базовые переключатели резерва, автоматические переключатели резерва и средства управления двигателем на рынке через нашу производственную марку McPherson Controls.Наша команда в MTS Power Products усердно работает над улучшением наших энергетических продуктов, производимых на заказ. В этой статье мы разберем основы того, как AVR работает в генераторах.

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

Мы находимся в Майами, штат Флорида, и за три десятилетия нашего обслуживания электроэнергетической отрасли мы стали одним из основных поставщиков в Южной Флориде генераторных установок премиум-класса и различных других деталей генераторных систем.Помимо наших высококачественных автоматических регуляторов напряжения, MTS Power Products также может предоставить вам различные другие продукты McPherson Controls и системы генераторов от лучших мировых производителей. Некоторые из продуктов включают:

  • ATS22A — Многофункциональный программируемый логический контроллер автоматического резерва
  • ATS3PC0125 — Контроллер автоматического включения резерва ATS модульного типа ПК
  • MTS75J3E — 4,5-литровый дизельный двигатель-генератор John Deere, работающий при 1800 об / мин.
  • MTS11M1E — Мощный двигатель-генератор Mitsubishi, работающий на 1800 об / мин
  • EG-3000 — Универсальный генераторный электронный регулятор управления
  • Ch5624 — Цифровое зарядное устройство McPherson Controls
  • ИВТ-2460 — Усилитель дополнительного возбуждения генератора
  • Базовые жгуты безобрывного переключателя BTS

MTS Power Products стала в Майами, Флориде и прилегающих районах, прямым источником генераторов и различных энергетических продуктов для генераторных установок.Мы надеемся, что теперь вы лучше понимаете, как работает ATR в генераторах. Свяжитесь с нами в компании RPM Power products, чтобы получить разъяснения по поводу того, как AVR работает в генераторах, или что-либо еще о продукции, которую мы продаем.

Что такое активный стабилизатор напряжения

Что это?

Активный регулятор напряжения поддерживает уровни напряжения в допустимых пределах.

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

Когда требуется стабильное и надежное напряжение, предпочтительным устройством является регулятор напряжения.

Он генерирует фиксированное выходное напряжение, которое остается постоянным при любых изменениях входного напряжения или условий нагрузки. Он действует как буфер для защиты компонентов от повреждений.

Размер и выбор технологии для конкретного варианта заказчика будет зависеть от диапазона напряжения, который они пытаются скорректировать.Во многих случаях регулятор напряжения встроен в трансформатор для изоляции входящих аномалий. В небольших приложениях система на основе феррорезонансного трансформатора может обеспечивать регулирование напряжения с резервным аккумулятором, как и система ИБП Ferrups от Eaton.

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

Опция активной стабилизации напряжения

является наиболее недорогой для корректировки простого линейного напряжения.

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

Обычная мощность электросети может варьироваться, в некоторых случаях достаточно резко, чтобы вызвать повреждение или снизить производительность ваших устройств. Целью АРН является исключительно поддержание постоянно приемлемых уровней напряжения для пользы и здоровья вашего электрического оборудования.Из-за их способности надежно стабилизировать напряжение, AVR часто является предпочтительным устройством для этого конкретного приложения.

Проведите обследование участка ICP, чтобы обследовать ваше предприятие и установить прибор для измерения мощности.

Когда вы устанавливаете оборудование, которое будет корректировать питание и удерживать напряжение на вашем предприятии, вы обеспечите его защиту от всех внешних влияний мощности. Целью является предотвращение износа другого оборудования на предприятии за счет стабильного напряжения и коэффициента мощности.Долгосрочными преимуществами являются снижение затрат на эксплуатацию и техническое обслуживание за счет ограничения аномалий напряжения и силы тока внутри объекта. Обычно эти проблемы решают путем установки устройства мониторинга на служебном входе в систему электроснабжения объекта. Это недорогой метод, позволяющий по-настоящему разобраться в этих проблемах и поставить правильный диагноз.

Мы доступны для просмотра однопроводных электрических цепей, отчетов о мощности, потребления энергии и любых других данных о мощности вашего объекта.

Позвоните своему техническому представителю ICP сегодня, чтобы обсудить варианты повышения эффективности на вашем предприятии и исправить проблемы с питанием на нашем предприятии!

Автоматическое регулирование напряжения

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

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

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

Технология AVR обеспечивает оптимальное входное напряжение в широком диапазоне неблагоприятных условий линии

Технология автоматического регулирования напряжения Torus в серии AVR ELITE обеспечивает стабильное напряжение для поддержания работы оборудования в оптимальном диапазоне от 116 до 124 В переменного тока (Северная Америка), а также +/- 8 В для международных напряжений (220, 230 и 240 В).Torus Power AVR ELITE запрограммирован на отключение питания вашего оборудования в случае неисправности высокого или низкого напряжения. Когда входное напряжение восстанавливается до надлежащего диапазона, AVR ELITE автоматически перезапускает нормальную работу
, чтобы восстановить питание подключенного оборудования.

Torus Power AVR ELITE оснащен привлекательным ЖК-дисплеем на передней панели, на котором отображается информация о входном и выходном напряжениях, выходном токе, потребляемой мощности, общем гармоническом искажении, времени и дате, а также отображается состояние неисправности.

Ниже приведен диапазон условий рабочего входного напряжения, установленных для продуктов Torus для поддержания оптимального входного напряжения для вашего оборудования.

  • Модели для Северной Америки: (15 А, 20 А): Torus AVR ELITE будет поддерживать постоянный выходной сигнал в диапазоне от 116 до 124 В при входном напряжении от 90 до 130 В. В диапазоне от 85 до 90 В и от 130 до 135 В регулирование будет снижено.

  • Североамериканские модели BAL: Torus AVR ELITE будет поддерживать постоянную выходную мощность в диапазоне от 116 до 124 В при входном напряжении от 180 до 260 В.В диапазоне от 170 до 180 В и от 260 до 270 В регулирование будет снижено.

  • Международные модели: Torus AVR ELITE будет поддерживать постоянное выходное напряжение в диапазоне 240 ± 8 В, при входном напряжении от 170 до 180 В, от 170 до 180 В и от 260 до 270 В регулирование будет быть уменьшенным.

Почему вашей системе может потребоваться автоматическое регулирование напряжения

Torus Power AVR ELITE запрограммирован на отключение питания вашего оборудования в случае отказа высокого или низкого напряжения.Когда входное напряжение восстанавливается до надлежащего диапазона, AVR ELITE автоматически перезапускает нормальную работу, чтобы восстановить питание подключенного оборудования.

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

Технология Torus Power AVR использует микропроцессор для контроля и управления напряжением, плавно переключая многотводный тороидальный трансформатор, чтобы гарантировать, что напряжение, питающее подключенное оборудование, остается в оптимальном диапазоне. В случае сбоя при высоком или низком входном сетевом напряжении устройство автоматически отключает питание подключенного оборудования, добавляя еще один уровень защиты.

Torus Power AVR ELITE оснащен привлекательным ЖК-дисплеем на передней панели, на котором отображается информация о входном и выходном напряжениях, выходном токе, потребляемой мощности, общем гармоническом искажении, времени и дате, а также отображается состояние неисправности.

Эти провалы, провалы и скачки напряжения могут вызвать нагрузку на компоненты и сократить срок службы оборудования. В худшем случае катастрофические события могут уничтожить ценное оборудование. В таких реальных условиях Torus Power AVR может защитить ваше оборудование и улучшить качество звука и видео.

Отведение aVR: 12-е отведение, о котором забываютВ частности, отведение aVR получает информацию из правой верхней части сердца. Он также дает обратную информацию о левой боковой стороне сердца, которая уже покрыта отведениями aVL, I, II, V5 и V6. Это основная причина, по которой отведение aVR было забыто.

Какова чувствительность и специфичность aVR отведения для окклюзии левой коронарной артерии (LMCA)?

12 90632 90V125 90632 90V125 (> 0,05 мВ) 3
Определение AVR Чувствительность Специфичность
Элевация ST AVR (> 0.05 мВ) выше
V1 Элевация ST 1
81% 80%
aVR Элевация ST (> 0,05 мВ) 2 68,2% 73,3% 91% 79%
Подъем AVR ST (> 0,1 мВ) 3 80% 93%
Подъем AVR STmV (> 0,1 мВ) ) 3 27% 98%

Заключение: Элевация ST> 0.05 мВ в aVR имеет ЧУВСТВИТЕЛЬНОСТЬ 68-91% и СПЕЦИФИЧНОСТЬ 73-80% .

Предсказывает ли подъем ST в отведении aVR клинический исход?

  • Повышение ST aVR (0,15 мВ) предсказывает смерть с чувствительностью 75% и специфичностью 75% 1
  • Повышение ST aVR (0,05 — 0,1 мВ) связано со смертью 8,6%
  • Повышение ST aVR (> 0,1 мВ), ассоциированного со смертью 19,4% (1,3% без элевации ST aVR) 4
  • СМЕРТНОСТЬ при элевации ST aVR (0.05 мВ) 30,2% против отсутствия элевации ST в aVR 12,2% 5

Заключение: Элевация ST в отведении aVR имеет ПОВЫШЕННУЮ СМЕРТНОСТЬ по сравнению с отсутствием элевации ST в отведении aVR.

Как лучше всего лечить элевацию ST в отведении aVR?

  • В нескольких исследованиях указывается, что трехлетний уровень смертности составляет 50% при медикаментозном лечении и 36% при ЧКВ, утверждая, что хирургическое вмешательство (АКШ) является методом выбора.
  • В настоящее время существует несколько новых исследований, посвященных изучению стентов, ускользающих от лекарственного средства (DES) в качестве опции:

  • В настоящее время проводится исследование EXCEL (оценка эффективности реваскуляризации главного левого ствола Xience Prime по сравнению с операцией на коронарное шунтирование) и набор пациентов и, надеюсь, даст нам более четкий ответ.

Заключение: До сих пор не ясно, кого лучше лечить с помощью ЧКВ или АКШ при окклюзии LMCA.

Последние мысли

Отведение aVR — это забытое, но ценное отведение, которое позволяет прогнозировать окклюзию LMCA и дает прогностическую информацию. Лучшее лечение окклюзии LMCA все еще неясно (ЧКВ или АКШ).

Дополнительная литература

  1. Chieffo A et al. 5-летние результаты после чрескожного коронарного вмешательства с имплантацией стента с лекарственным покрытием по сравнению с шунтированием коронарной артерии при незащищенных поражениях левой главной коронарной артерии: опыт Милана.JACC Cardiovas Interv 2010 июнь; 3 (6): 595-601. PMID: 20630452
  2. Nakamura K et al. Значение подъема сегмента ST в отведении aVR. Arch Intern Med 2012 март; 172 (5): 389. PMID: 22412103
  3. PV-карта на 5 вещей, которые следует учитывать при ненормальном отведении AVR

Изображения 1, 3

1.

Ямаджи Х., Ивасаки К., Кусачи С. и др. Прогнозирование острой обструкции левой коронарной артерии с помощью электрокардиографии в 12 отведениях. Подъем сегмента ST в отведении aVR с меньшим подъемом сегмента ST в отведении V (1). Джам Колл Кардиол . 2001; 38 (5): 1348-1354. [PubMed]

2.

Rostoff P, Piwowarska W. Подъем сегмента ST в отведении aVR и поражения коронарных артерий у пациентов с острым коронарным синдромом. Кардиол Пол . 2006; 64 (1): 8-14; обсуждение 15. [PubMed]

3.

Kosuge M, Ebina T, Hibi K, et al. Ранний и простой предиктор тяжелого поражения главного левого и / или трех сосудов у пациентов с острым коронарным синдромом без подъема сегмента ST. Ам Дж. Кардиол . 2011; 107 (4): 495-500.[PubMed]

4.

Barrabés J, Figueras J, Moure C, Cortadellas J, Soler-Soler J. Прогностическая ценность отведения aVR у пациентов с первым острым инфарктом миокарда без подъема сегмента ST. Тираж . 2003; 108 (7): 814-819. [PubMed]

5.

Abbase AH, ALjubawii AA. Значение подъема сегмента ST в отведении aVR при остром переднем инфаркте миокарда. Медицинский журнал Вавилона . 2011; 8 (4): 490-496. http://www.iasj.net/iasj?func=fulltext&aId=32167.[Источник]

Блок автоматического регулятора напряжения АРН 79632107 — Generator Guru

Пожалуйста, обратите внимание при покупке запасного генератора AVR:

  • Если у вас есть только 2 провода, идущие к этой части, у вас фактически установлен конденсатор. Нажмите здесь, чтобы купить нужный продукт. (Они выглядят одинаково, но очень разные части!)
  • Не все АРН одинаковы (хотя многие из них похожи друг на друга). Вы должны сопоставить правильный АРН со своим генератором, иначе вы можете повредить генератор.(Если вы попали прямо на эту страницу, мы настоятельно рекомендуем вам убедиться, что это правильный АРН. Начните поиск здесь.)
  • Покупайте АРН только у специалиста по генераторам. Большинство АРН, продаваемых специалистами, не являющимися специалистами по генераторам, продаются дешево, поскольку они являются избыточной частью производственного цикла для генератора переменного тока неизвестной конструкции или не прошли контроль качества. Они могут быть невысокого качества и, скорее всего, не предназначены для вашего конкретного генератора переменного тока. Если они неисправны или не предназначены для вашего генератора, это может вызвать перегрев и, возможно, пожар.Поскольку этот огонь исходит из генератора переменного тока, который расположен под топливным баком, это может привести к катастрофе и вызвать взрыв.

Мы гарантируем высочайшее качество продаваемых нами АРН.

Сменный автоматический регулятор напряжения

Класс

: уровень обслуживания «A» — изготовлен в соответствии с высочайшими стандартами, с медной втулкой, которая обеспечивает долгий срок службы и снижает износ, возникающий при повседневной эксплуатации вашего генератора.

Гуру генераторов говорит:

АРН необходим для выработки электроэнергии вашим генератором.Требуется возбуждать обмотки генератора и уменьшать скачки напряжения. АРН должен работать не менее 5000 часов, но может сгореть, если произойдет одно из следующих событий:

  • Пользователь генератора попытался потребить больше энергии, чем генератор может произвести. (т.е. оборудование подключено при запуске генератора / включении выключателя или слишком много подключенных элементов.)
  • Произошел скачок напряжения на оборудовании, на котором работал генератор. (Неисправное оборудование подключено к генератору. Замените АРН и проверьте, подключив другое оборудование.Если выйдет из строя только при подключении определенного элемента, мы настоятельно рекомендуем проверить его у квалифицированного электрика.)
  • Произошел скачок напряжения в генераторе переменного тока. (инородный предмет попал в генератор переменного тока, перекрывая провода, или установлен неправильный АРН.)
  • Генератор намок / сырость, и на обмотках произошел скачок напряжения.

Иногда, когда AVR перегорел, это может быть связано с неисправностью генератора. Снимите АРН и проверьте, нет ли запаха гари, исходящего от генератора.Если вы чувствуете запах гари, посмотрите наше видео ниже, чтобы узнать о процедурах тестирования, прежде чем покупать новый AVR.

Нужна помощь? Не можете найти его для своей модели генератора? Связаться с нами. Мы можем помочь!

* Совместимая часть

Что такое АРН в генераторе? Простое объяснение — домашний аккумулятор

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

Один из компонентов, который вы увидите, когда снимете крышку генератора переменного тока, — это АРН, или для краткости автоматический регулятор напряжения. В своем исследовании я видел, как его заменить, как «осветить поле» и как его найти, но я не мог найти легкого для понимания объяснения того, что это такое и как именно работает.

Это то, что я надеюсь передать вам сегодня, так что если вам интересно, что такое АРН вашего генератора, вы находитесь в нужном месте.

Что это за АРН генератора?

АРН в генераторе отвечает за определение электрического выхода ускорителя генератора на выходы, которые вы собираетесь подключить, и сравнивает этот электрический выход с предопределенным стандартом (120 В или 240 В) и регулирует выходную мощность ускорителя, чтобы оставаться на этом уровне. стандарт.

AVR в форме полумесяца на моем генераторе Honda.

Другими словами, AVR в генераторе гарантирует, что когда вы подключаете что-либо к розетке 120 В на панели генератора, он действительно будет обеспечивать вас напряжением 120 В, а не 60 или 200 В.

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

Далее я дам простое для понимания объяснение того, как это работает, без сложных «электрических разговоров».

Как работает AVR на генераторе?

Я знаю, что электрик наверняка разорвет меня терминологией, но вот как работает АРН на генераторе, чтобы новичок мог понять.

Электричество вырабатывается генератором вашего генератора. Генератор состоит из двух основных компонентов: неподвижного статора, который вращается вокруг вращающегося ротора.Вместе ротор и статор создают электромагнит. Электричество вырабатывается, когда ротор вращается внутри статора со скоростью 3600 об / мин.

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

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

Тем не менее, AVR замечает небольшое количество электричества в точках розеток, к которым вы должны были подключить свои устройства. Эта сумма вызывает включение АРН. AVR запрограммирован на поддержание вашего напряжения на определенном уровне (например, 120 В или 220 В) и определяет, что ваша сумма низка.

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

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

Вот грубый набросок, но он дает модель потока, чтобы вы могли визуально видеть шаги.

1.) Генератор (ротор и статор) вырабатывает электричество, 2.) АРН активируется и измеряет выходной сигнал и сравнивает его с заранее определенным стандартом, 3.) АРН отклоняет часть электроэнергии, 4.) АРН питает возбудитель. Катушки на статоре для увеличения магнитного поля и, следовательно, электрической мощности (или уменьшения, ограничивая величину).

Где находится АРН генератора?

АРН генератора обычно находится под крышкой генератора, но бывает разных форм и размеров.Некоторые из них представляют собой прямоугольные кубы, а некоторые имеют форму полумесяца. Обычно они удерживаются на месте парой винтов и имеют быстроразъемное соединение, а также соединительные провода с лопатками.

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

Что делать, если АРН моего генератора не работает (мигает поле)

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

Как правило, если вы используете мультиметр, вы увидите, что на самом деле у вас будет несколько выходных вольт, но это может быть, например, 6 вольт вместо 120 вольт, необходимых вашему устройству для работы. Многие АРН до последних 6 лет требовали для активации минимального напряжения 7 вольт. Поскольку остаточный магнетизм был слишком низким и мог производить только 6 вольт, АРН никогда не срабатывает и подает электричество обратно на статор, чтобы увеличить магнитное поле и электрическую мощность.

Чтобы активировать АРН, мы можем подать небольшое количество электроэнергии обратно в выходы генератора, чтобы разбудить АРН. Делаем это сетевой дрелью.

  • Включите генератор и включите питание переменного тока
  • Подключите сетевую дрель к одной из розеток на 120 В
  • Удалите что-либо из сверлильного патрона, чтобы он был пустым
  • Установите сверло в положение переднего сверления (чтобы патрон вращался по часовой стрелке, если бы вы что-то сверлили)
  • Нажмите и удерживайте спусковой крючок одной рукой
  • Другой рукой быстро возьмитесь за патрон и поверните его назад против часовой стрелки так, чтобы ваша рука была свободна и не касалась патрона сверла в конце процесса
  • После 1–3 оборота назад дрель должна начать работать в вашей руке, так как АРН включается и восстанавливаются нормальные уровни напряжения

Если вы решили надеть перчатку для защиты руки, просто помните об опасности попадания перчаток в электроинструмент, особенно если у вас мощная дрель с сетевым шнуром.

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

Как сохранить остаточный магнетизм на достаточно высоком уровне, чтобы активировать АРН?

  • Постарайтесь, чтобы генератор не разбивался при хранении. Это сотрясение может нарушить магнетизм.
  • Не допускайте, чтобы в вашем генераторе закончилось топливо под нагрузкой.
  • Не выключайте пусковой выключатель двигателя под нагрузкой.
  • Наконец, чрезмерное время хранения постепенно снижает ваш остаточный магнетизм. Обязательно запускайте генератор на 10 минут каждые месяц или два.

Где в генераторе находится АРН? — Mvorganizing.org

Где в генераторе находится АРН?

Где в генераторе находится АРН? Обычно АРН генератора располагается в одном из трех мест. Он может быть в главном блоке управления генератора, он может быть в клеммной коробке генератора и может (обычно только на очень маленьких переносных устройствах) находиться под задней крышкой генератора.

Сколько стоит AVR?

Вопросы и ответы по АРН

Фаза Мин. Цена Макс.цена
Однофазный Rs 2000 / Штука Rs 14000 / Штука
Трехфазный Rs 3000 / Штука Rs 956000 / Штука

Что такое полная форма AVR?

AVR полной формы | Что такое автоматический регулятор напряжения (АРН)

Что делает AVR?

Автоматический регулятор напряжения (АРН) — это электронное устройство, которое поддерживает постоянный уровень напряжения на электрическом оборудовании при той же нагрузке.АРН регулирует колебания напряжения для обеспечения постоянного и надежного электропитания.

Какие бывают типы АРН?

Обычно существует два типа автоматического регулятора напряжения. Один тип реле, а другой тип серводвигателя. В АРН релейного типа для регулирования напряжения используются электронные схемы, такие как реле и полупроводники.

Как генераторы регулируют напряжение?

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

Что такое режим спада?

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

Зачем нужен дроп?

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

Что такое режим коэффициента мощности в АРН?

Сообщается и известно, что машины электростанций в режиме управления VAr / PF вызвали / способствовали падению напряжения в системе.Назначение АРН — поддерживать системное напряжение. Если вы находитесь в режиме управления VAR / PF, вы ничего не сделаете, чтобы предотвратить падение напряжения.

Как отрегулировать коэффициент мощности генератора?

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

Как коэффициент мощности влияет на регулирование напряжения?

Регулировка напряжения трансформатора — это процентное изменение выходного напряжения от холостого хода до полной нагрузки.

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

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