Разрешение и запрет прерывание

Тема в разделе "Микроконтроллеры AVR", создана пользователем Yerabdi, 23 сен 2017.

  1. Yerabdi

    Yerabdi Нерд

    Всем доброе утро , нужно ли запрещать и разрешать прерывание в теле функции.
    Если у меня все переменные обьявлены как volatile
     
  2. rkit

    rkit Гуру

    Прерывания нужно запрещать тогда. когда они вам не нужны. К переменным это отношения не имеет. Объявлять все переменные как volatile не следует.
     
  3. ostrov

    ostrov Гуру

  4. DetSimen

    DetSimen Гик

    нах.., нет, зачем? запрещая прерывания в каждой функции, ты обрекаешь себя на то, что millis(), а тем более delay() всеми любимый будут работать неправильно. Как и вывод в сериал, и многое другое.
    Прерывания надо запрещать, когда функция выполняет критические расчеты в реальном времени. Почему-то мне кажеца, это не твой случай.
     
  5. Airbus

    Airbus Оракул

    Можно так глобально а можно и конкретное прерывание забанить локально.Только это не для Ардуино.
     
  6. Yerabdi

    Yerabdi Нерд

    я использую ардуино нано, программу пишу на атмел студио.По внешнему прерыванию приходит импульс на ножку PD2, затем ставлю высокое положение на выходе PD6 на 4,5 миллисекунд. Зависимости от значение аналогового входа добавляю время от 1- 5 миллисекунд высокому состоянию PD6 . Вроде все нормально работает, когда идет расчет добавки времени у меня может произойти внешнее прерывание и он должен поставит выход открытым
     
  7. Igor68

    Igor68 Гуру

    Простите! Это у вас не ЧИМ случайно?
     
  8. Yerabdi

    Yerabdi Нерд

    да ШИМ МОДУЛЯЦИЯ
     
  9. Igor68

    Igor68 Гуру

    Простите, но для ШИМ наверное удобнее использовать аппаратный ШИМ. А если я Вас правильно понял Вам надо одинаковую длительность импульса, но с разным интервалом... то есть ЧИМ.
    Спасибо.
     
  10. Igor68

    Igor68 Гуру

    Прошу прощения! Я не подумав сказал про PWM... как говориться я "зажрался" на ARMах:
    вот для AT91SAM7S64/128/256(Armel)
    snapshot45.png
    для ADuC7024(Analog Devices):
    snapshot44.png

    Вот и подумал, что аппаратный и для ATmega... а тут всё "косвенно"... хотя может мне и не попалась функциональная схема в DATASHEET.
    Ещё раз простите!
     
    Последнее редактирование: 24 сен 2017
  11. Onkel

    Onkel Гуру

    функции обработки прерывания должны работать по принципу "ударил -убежал". Выставить какой-нибудь флаг - и обратно в main , уже в режиме обычной работы этот флаг отрабатывать. И время в мс нужно поручить таймеру отсчитывать.