Программирование микроконтроллеров. Полный курс для начинающих: diodov.net/programmirovanie-mikrokontrollerov-avr/ Электроника для начинающих. Мощный курс. diodov.net/elektronika-dlya-nachinayushhih/
Боже мой, как же круто слушать и видеть Ваши уроки. Как бальзам на душу)) Ну а кроме лирики, спасибо большое за то, что Вы делаете. За доступность материалов и за все детальные разъяснения. Даже будучи веб-разработчиком мне сложно переключится на МК, так как есть моменты, которые сложны для понимания, но с Вашим трудом оно как раз и приходит. В целом ещё только на этом уроке, однако хотелось бы чтобы в будущем Вы затронули тему приема и передачи по usart и spi.
только не оставляй avr, я смотрю здесь зрителей мало, но со временем может лучше станет. другие каналы смотрю, ну это пипец (мудня) какая-то. с нетерпением жду следующих уроков!!
Да нет, narod stream не фуфло, просто для более подготовленных. Там же автор сам пишет, подразумевается, что учащийся уже прошел курс C и некоторые вещи он не раскрывает . Хотя сам уровень материала более расширенный и сложный. Здесь конечно автор расжевывает все до мелочей, только проглотить.
Привет. Я редко оставляю комменты в сетях, но ради этого контента стоило залогиниться. Спасибо большое тебе, мужик, твои объяснения реально помогают понять что и как работает. Фактически благодаря тебе я начинаю разбираться в микроконтроллерах и сдаю лабы в универе! Ты крут. Успехов тебе во всех твоих начинаниях! С П А С И Б О !!!
спасибо за данный комментарий, полчаса не мог разобраться что сделал не так, потому что после прерывания, нижний светодиод загорался, но потом цикл на мигалке начинался сначала, после того как убрал этот бит все заработало нормально)
всем, у кого после прерывания программа начинается сначала - подумайте, почему на 21:48, при старте программы, столбик светодиодов зажигается не сразу, а после того, как квадратик на ножке PD0 помигает 5 раз. и что бывает, когда прерывание включено, а обработчик не написан :)
добрый человек, а какие нужно сделать ещё надстройки для того, чтобы не было при запуске это херни на ножке PD0?) просто как в протеусе так и в железе начальный запуск сопровождается этой паузой на ножке PD0, пока не разобрался как убрать это
@@finskiymaster Уже разобрался, Денис, спасибо) Надо было просто инициализацию портов в главной функции поставить перед инициализацией внешнего прерывания
спасибо вам за подсказку!!!Весь день убил на все это. Пишу курсовой проект на ATmega162, используя все 3 пина внешних прерываний. Логика программы была в том что в зависимости от определеного прерываний, по юарту отправлять ат-команды на GSM-модуль с сообщением о разных событиях проблема была там где не ждал, оказывается во время иницилизации настроек юарта, я активировал биты прерываний для отправки и принятия.Но так как они мне не нужны, то каждый раз при отправки данных по юарту, программа начинала сначала. Если кому нужно, проблема в том, что аппаратно, если вы активируете какое то прерывание, но не пропишете обработчик его, ваш микроконтроллер будет ребутится, вся программа начинает сначала, как и было в данном видео, инициализировано было INT0 и INT1, но использовался 1 пин прерываний, а обработчик прерываний для другого не был прописан
Сделайте эту программу на реальном контроллере. Т.к. из видео на канале и у меня на компьютере видно, что после прерывания программа начинает работать сначала, а не продолжает как вы говорите с места когда поступила команда прерывания. Вы все видео делаете на реальном контроллере, а почему это не показали?
В этом примере смысл в том, что когда нажимаешь обычную кнопку светодиод начинает моргать тогда,когда до него дойдет алгоритм по коду сверху вниз при условии что будет нажата кнопка.А при нажатии на кнопку прерывания чтения кода прерывается и сразу переходит на алгоритм мигания одного светодиода,после его выполнения начинается чтение кода заново то есть сверху вниз.Что бы работало так как автор показывал в начале нужно код мигания одного светодиода поместить в функцию и нажатием кнопки прерывания вызывать эту функцию ,тогда после отрабатывания функции код продолжит работу до конца.
пришлось купить ATmega8, уж больно все понятно объясняете. по ИБП я так понял небольшое отступление про фазу, кондер и катушку в цепи переменки. изучаю пока что МК. спасибо за ваш труд.
Спасибо огромнейшее за Ваш полезный труд. У меня вопрос: когда настраиваете регистр SREG почему он не определяется автоматически в меню подсказок (выделяется красной волн.линией)?
Вы говорите что после прерывания программа продолжает свою работу с места где прервалась, но она не продолжает, а сбрасывает состояния порта С и начинается сначала, это хорошо видно по миганию светодиодов. Подскажите, почему так и можно ли это изменить? Спасибо
На самом деле прерывание вклинивается в процесс, просто симулятор может некорректно отображать, и глазам своим верить нельзя. Для этого используют осциллограф или логический анализатор.
В этом примере смысл в том, что когда нажимаешь обычную кнопку светодиод начинает моргать тогда,когда до него дойдет алгоритм по коду сверху вниз при условии что будет нажата кнопка.А при нажатии на кнопку прерывания чтения кода прерывается и сразу переходит на алгоритм мигания одного светодиода,после его выполнения начинается чтение кода заново то есть сверху вниз.Что бы работало так как автор показывал в начале нужно код мигания одного светодиода поместить в функцию и нажатием кнопки прерывания вызывать эту функцию ,тогда после отрабатывания функции код продолжит работу до конца.
А теперь вопрос, прерывание даёт краткий выход из последовательного алгоритма программы для выполнения неких действий после которых программа продолжает работу с точки остановки. Сам вопрос в том, почему прога выполняется не с места остановки а заново?
Мне тоже это показалось странным. Когда происходит прерывание, основная программа не просто останавливается, а после завершения программы прерывания, она начинает работать сначала. Как будто нажали RESET и перегрузили МК. Хотя автор говорит, что после прерывания, основная программа возвращается в место останова и продолжает с этого места выполнять прогу дальше.
В этом примере смысл в том, что когда нажимаешь обычную кнопку светодиод начинает моргать тогда,когда до него дойдет алгоритм по коду сверху вниз при условии что будет нажата кнопка.А при нажатии на кнопку прерывания чтения кода прерывается и сразу переходит на алгоритм мигания одного светодиода,после его выполнения начинается чтение кода заново то есть сверху вниз.Что бы работало так как автор показывал в начале нужно код мигания одного светодиода поместить в функцию и нажатием кнопки прерывания вызывать эту функцию ,тогда после отрабатывания функции код продолжит работу до конца.
Это глюк протеуса, в железе все работает как надо. Из-за дребезга контакта прерывание может попасть в отложенные (может внутри обработчика еще раз выставить бит INT0 в регистре GIFR) и сработать 2 раза. Чтобы этого избежать, при выходе из обработчика этот бит лучше сбросить
@@splinterkab9007 там ошибка в коде. В GICR открыты 2 ноги для прерывания, а в ддрД и портД 1 на прерывание, одна на кнопку. Надо либо там убрать лишнюю,либо тут добавить. Весь день мучился, вообще на железе не работало, а в протеусе так же, начинался цикл сначала.
@@BitlllJooS я на си давно уже не пишу. Мне для мк сейчас проще flowcode использовать. Накидал блоками в визуальной среде. Добавил нужные компоненты и готова прошивка для мк. Если тебе для изучения си. Я уже забыл что там к чему. Если просто для себя сделать что-то рабочее. Flowcode изучить не долго. Там и эмулятор встроенный есть.
@@BitlllJooS проще. Советую попробовать и разобраться. Особенно если лень вникать в си. Программ для визуального программирования есть несколько. Мне больше зашла flowcode. Они хотя и требуют элементарных понятий. Но это проще чем учить си с ноля. В ютуб есть человек который по этой программе отлично поясняет. Не буду ссылку на канал кидать. Где программу скачать, как установить и как настроить тоже писать не буду. Надеюсь в гугл не забанили. Через данную программу может немного увеличится размер после компиляции по сравнению с тем же на си. Хотя смотря как на си написать.
Доброе время суток, у меня вопрос - когда нажимаешь на кнопку прерывания скажем на 3 светодиоде то после возобновления цикла данного прерывания начинается с начала а не продолжает цикл дальше... или я не правильно, что то понял ? С Уважением Дмитрий! / Stepanov Dmitriy!
@@Программированиемикроконтролле так в видео отлично видно, что процесс начинается щаново, а не с точки прерывания. Это глюк симмулятора (протеуса) или на реальном МК будет то же?
@@Жэк это небольшой косяк в коде)) надо лишнюю ногу для прерывания отключить и будет работать как надо. А так у меня МК зависал, хотя в протеусе все норм показывало
Подскажите пожалуйста, может кто это читает и без кода сможет натолкнуть на мысль как поправить. Такое дело, МК атмега328, по INT0_vect ставлю флаг, потом в лупе проверяю этот флаг и считываю данные из ADC. Все ок. Но если добавить еще одно прерывание INT1_vect, то все будет работать, до того пока не дать сработать этому новому прерыванию, после него данные из ADC будут получаться не верные, кракозябры пойдут в лог. В чем может быть дело?
А почему вы оговорите что после прерывания выполняется дальше программа где прервалась, а на самом деле видно что алгоритм программы просто начинается сначала. Или это тоже настраивается?
При запуске МК сразу выполняется программа прерывания и только потом программа основного цикла..Как заставить МК выполнять сразу программу основного цикла?
как активировать внешние прерывания определенным количеством (3-5 ) импульсов на входе или нажатиями на кнопку. Меня интересует именно прошивка в atmel studio.
В этом примере смысл в том, что когда нажимаешь обычную кнопку светодиод начинает моргать тогда,когда до него дойдет алгоритм по коду сверху вниз при условии что будет нажата кнопка.А при нажатии на кнопку прерывания чтения кода прерывается и сразу переходит на алгоритм мигания одного светодиода,после его выполнения начинается чтение кода заново то есть сверху вниз.Что бы работало так как автор показывал в начале нужно код мигания одного светодиода поместить в функцию и нажатием кнопки прерывания вызывать эту функцию ,тогда после отрабатывания функции код продолжит работу до конца.
Ролики очень крутые, но у меня вопрос - после выхода из прерывания, код для диодов начал выполняться заново, а не с того момента, с которого мы упали в прерывание. Получается, выходя из прерывания, МК будет выполнять первую команду из главной части программы?
Добрый день. Получили ли Вы ответ на ваш вопрос. Меня это тоже интересут: почему не так как , как автор сначало в теории обьяснял. Я стараюсь изучать у разных проводящих занатия. Могу вам рекомендовать еще одного. Сначало я думал, что какой-то баран обьясняет. Но просмотрев и прослушав несколько его занатий заинересовался и потом даже больше получил инфо. Даю на его занятия ссылку: th-cam.com/play/PL-bJ-cyZJjjDetZrdA7uiYrVvdJSIBZVR.html "andrey frolov" на youtube
@@kumelektronik340 я весь день мучился. Нашел несостыковку GICR и ддрД и портД. В GICR 2 ноги под прерывание выбрано, а в ддр и порт одна для прерывания и одна для кнопки. В итоге вообще на железе не работало, зависало. Сейчас без Sri() работает как положено))
Я столкнулся с такой проблемой, что Atmel Studio не распознает команду конфигурации регистра статуса и фраза SREG подчеркивается красной волнистой линией. Если не конфигурировать этот регистр, то прерывание в программе не выполняется. Как решить данную проблему?
После окончания функции прерывания программа начинается с начала, а не продолжается. Видно, что диоды не продолжают зажигаться, а зажигаются с первого.
Всё нормально в протеусе эмулирует. Вот рабочий пример. Светодиоды на порт C и D7. Кнопки на B2, D2 к земле. D3 к плюсу питания. Частота 8MHz.Может чего не так но работает. #include #define F_CPU 8000000UL //8MHz #include #include ////////////////////////////////////////////////////////////////////////// void _port(void) { DDRC |= 0b1111111;//порт С на выход DDRD |=(1
В среде Arduino применяется обработка данных по прерыванию ? Например, когда для выбранной платы есть аппаратная поддержка какого-то протокола (SPI, UART, Ethernet и т. д.), используется режим ожидания приёма (Salve) и приходит пакет, можно ли вызвать программное прерывание и читать приёмный буфер только тогда, когда в нём что-то есть ?
а как настроить прерывание через INT1? ISR(INT1_vect) написал код для прерывания, в тоже настроил ISC11 и ISC10 на MCUCR= 0b00001000, установил в регистре D PD3 на вход и поставил подтягивающий резистор DDRD &= ~(1
Я малость написал по своему но у меня оно работает так что при прерывании основная программа выполняется с начала а при нажатии обычной кнопки он помиает и продолжает с последнего места основную программу. Всего то написал массивом какой зажигать диод и условие с накоплением переменной.
В atmega328 не могу заставить работать по восходящему фронту. Может есть какие-то нюансы? Или это просто косяк протеуса? Настраиваются прерывания немного по-другому(благодаря вам хоть понял, как можно извлечь полезные сведения из даташита) EIMSK|=(1
На этом и предыдущем видео вот прям заметно,что на последней трети повествования у автора просто терпения не хватает . Начинается ускорение , доводящая до бешенства дрочка зумом (особенно бесит в протеусе ,т.к.буквально рвет схему на лоскуты) . Зачем увеличивать шрифт программы тоже не понятно ( нет возможности охватить взглядом и тоже приходится судорожно вспоминать где что) .В результате под конец получается слайд-шоу . Автор , у вас же отлично получается планировать рассказ для понимания .Всё очень доходчиво . Да, контент для очень начинающих )) ,но это ж не значит ,что нужен размер букв как в букваре) .Вы же делали картинку в картинке с реальным МК .Ну вот и сделали бы по пол-экрана программу и схему ,чтоб сразу увязки было видно. А вообще более внятных пояснений еще не попадалось . Ваш цикл вот прям очень нравится . На критику прошу не обижаться (кто-то же должен , а то возгордитесь)))
@@valovik если делать на обычных пинах то вроде никакие помехи не ловятся ,у меня тоже такая проблема наверно придется делать инвертер сигналов ,мне надо высокие сигналы с порта передать на мк уже в низким сигналом
Все сделал по уроку, в протеусе все работает, а на реальном МК работает только кнопка которая подключена к внешнему прерыватель. Удаляю строку которая отвечает за регистр SREG начинает работать часть кода, что в блоке main и перестает работать внешнее прерывание, соответственно. Кто знает в чем дело?
Спасибо за ваши уроки. Очень помогают. И, может кто подскажет, какими регистрами правильно настроить внешнее прерывание на Attiny44 GIMSK = 0b01000000; //Включаем внешнее прерывание MCUCR = 0b00000010; //Сработка по спаду импульса sei (); // Global interrupt enable; Так не срабатывает.
Программирование микроконтроллеров. Полный курс для начинающих: diodov.net/programmirovanie-mikrokontrollerov-avr/
Электроника для начинающих. Мощный курс. diodov.net/elektronika-dlya-nachinayushhih/
Боже мой, как же круто слушать и видеть Ваши уроки. Как бальзам на душу)) Ну а кроме лирики, спасибо большое за то, что Вы делаете. За доступность материалов и за все детальные разъяснения. Даже будучи веб-разработчиком мне сложно переключится на МК, так как есть моменты, которые сложны для понимания, но с Вашим трудом оно как раз и приходит.
В целом ещё только на этом уроке, однако хотелось бы чтобы в будущем Вы затронули тему приема и передачи по usart и spi.
только не оставляй avr, я смотрю здесь зрителей мало, но со временем может лучше станет. другие каналы смотрю, ну это пипец (мудня) какая-то. с нетерпением жду следующих уроков!!
Narod stream фуфло
Да нет, narod stream не фуфло, просто для более подготовленных. Там же автор сам пишет, подразумевается, что учащийся уже прошел курс C и некоторые вещи он не раскрывает . Хотя сам уровень материала более расширенный и сложный. Здесь конечно автор расжевывает все до мелочей, только проглотить.
Всё!!!!Разобрался...Главное коменты до этого читал и не понял сразу о чем речь))
Привет. Я редко оставляю комменты в сетях, но ради этого контента стоило залогиниться. Спасибо большое тебе, мужик, твои объяснения реально помогают понять что и как работает. Фактически благодаря тебе я начинаю разбираться в микроконтроллерах и сдаю лабы в универе! Ты крут. Успехов тебе во всех твоих начинаниях!
С П А С И Б О !!!
Хорошие уроки. Если кто-то будет делать схему на макетке, лучше отключить внешние прерывания на INT1. Вот так GICR = 0b01000000. Иначе МК зависает.
спасибо за данный комментарий, полчаса не мог разобраться что сделал не так, потому что после прерывания, нижний светодиод загорался, но потом цикл на мигалке начинался сначала, после того как убрал этот бит все заработало нормально)
Спасибо! Очень наглядно и последовательно)))
Спасибо за Ваши лекции! Очень доходчиво.
Очень ценный урок, однозначно палец вверх, как минимум))🎉
Большое тебе спасибо, Добрый человек!
Спасибо Вам огромное за Ваши уроки
странно,но мне кажется,такое обьяснение и диванный программист поймет.Спасибо автору, содержательно.
Спасибо! Очень подробно и содержательно.
всем, у кого после прерывания программа начинается сначала - подумайте, почему на 21:48, при старте программы, столбик светодиодов зажигается не сразу, а после того, как квадратик на ножке PD0 помигает 5 раз. и что бывает, когда прерывание включено, а обработчик не написан :)
добрый человек, а какие нужно сделать ещё надстройки для того, чтобы не было при запуске это херни на ножке PD0?) просто как в протеусе так и в железе начальный запуск сопровождается этой паузой на ножке PD0, пока не разобрался как убрать это
@@jimmyeatmeshuggah9472 пишите мне на почту, контакты у меня на канале в описании к видео
@@finskiymaster Уже разобрался, Денис, спасибо) Надо было просто инициализацию портов в главной функции поставить перед инициализацией внешнего прерывания
спасибо вам за подсказку!!!Весь день убил на все это. Пишу курсовой проект на ATmega162, используя все 3 пина внешних прерываний. Логика программы была в том что в зависимости от определеного прерываний, по юарту отправлять ат-команды на GSM-модуль с сообщением о разных событиях
проблема была там где не ждал, оказывается во время иницилизации настроек юарта, я активировал биты прерываний для отправки и принятия.Но так как они мне не нужны, то каждый раз при отправки данных по юарту, программа начинала сначала.
Если кому нужно, проблема в том, что аппаратно, если вы активируете какое то прерывание, но не пропишете обработчик его, ваш микроконтроллер будет ребутится, вся программа начинает сначала, как и было в данном видео, инициализировано было INT0 и INT1, но использовался 1 пин прерываний, а обработчик прерываний для другого не был прописан
Сделайте эту программу на реальном контроллере. Т.к. из видео на канале и у меня на компьютере видно, что после прерывания программа начинает работать сначала, а не продолжает как вы говорите с места когда поступила команда прерывания. Вы все видео делаете на реальном контроллере, а почему это не показали?
В этом примере смысл в том, что когда нажимаешь обычную кнопку светодиод начинает моргать тогда,когда до него дойдет алгоритм по коду сверху вниз при условии что будет нажата кнопка.А при нажатии на кнопку прерывания чтения кода прерывается и сразу переходит на алгоритм мигания одного светодиода,после его выполнения начинается чтение кода заново то есть сверху вниз.Что бы работало так как автор показывал в начале нужно код мигания одного светодиода поместить в функцию и нажатием кнопки прерывания вызывать эту функцию ,тогда после отрабатывания функции код продолжит работу до конца.
@@Dima-vl7dm Спасибо. Попробую.
Тут ошибка в коде. У меня вообще сначала работать не хотел на железе. Потом исправил, заработало как надо, продолжая с момента прерывания.
пришлось купить ATmega8, уж больно все понятно объясняете. по ИБП я так понял небольшое отступление про фазу, кондер и катушку в цепи переменки. изучаю пока что МК. спасибо за ваш труд.
Спасибо, добрый человек! Здоровья вам!
Спасибо огромнейшее за Ваш полезный труд. У меня вопрос: когда настраиваете регистр SREG почему он не определяется автоматически в меню подсказок (выделяется красной волн.линией)?
Вы говорите что после прерывания программа продолжает свою работу с места где прервалась, но она не продолжает, а сбрасывает состояния порта С и начинается сначала, это хорошо видно по миганию светодиодов. Подскажите, почему так и можно ли это изменить? Спасибо
На самом деле прерывание вклинивается в процесс, просто симулятор может некорректно отображать, и глазам своим верить нельзя. Для этого используют осциллограф или логический анализатор.
Your right! How to correct this? Diode.net gave no word of this.
В этом примере смысл в том, что когда нажимаешь обычную кнопку светодиод начинает моргать тогда,когда до него дойдет алгоритм по коду сверху вниз при условии что будет нажата кнопка.А при нажатии на кнопку прерывания чтения кода прерывается и сразу переходит на алгоритм мигания одного светодиода,после его выполнения начинается чтение кода заново то есть сверху вниз.Что бы работало так как автор показывал в начале нужно код мигания одного светодиода поместить в функцию и нажатием кнопки прерывания вызывать эту функцию ,тогда после отрабатывания функции код продолжит работу до конца.
Спасибо Вам за уроки!
Хорошие били уроки жаль закончились как всегда , 25 - 30 уроков для затравки и конце по английски
А теперь вопрос, прерывание даёт краткий выход из последовательного алгоритма программы для выполнения неких действий после которых программа продолжает работу с точки остановки. Сам вопрос в том, почему прога выполняется не с места остановки а заново?
Мне тоже это показалось странным. Когда происходит прерывание, основная программа не просто останавливается, а после завершения программы прерывания, она начинает работать сначала. Как будто нажали RESET и перегрузили МК. Хотя автор говорит, что после прерывания, основная программа возвращается в место останова и продолжает с этого места выполнять прогу дальше.
Разобрался!!! Сначала инициализацию портов в главной функции поставил перед инициализацией внешнего прерывания, потом вместо команды SREG |=(1
Благодарю за уроки! Почему программа не продолжает свою работу дальше, а возвращается в начало?
В этом примере смысл в том, что когда нажимаешь обычную кнопку светодиод начинает моргать тогда,когда до него дойдет алгоритм по коду сверху вниз при условии что будет нажата кнопка.А при нажатии на кнопку прерывания чтения кода прерывается и сразу переходит на алгоритм мигания одного светодиода,после его выполнения начинается чтение кода заново то есть сверху вниз.Что бы работало так как автор показывал в начале нужно код мигания одного светодиода поместить в функцию и нажатием кнопки прерывания вызывать эту функцию ,тогда после отрабатывания функции код продолжит работу до конца.
Это глюк протеуса, в железе все работает как надо.
Из-за дребезга контакта прерывание может попасть в отложенные (может внутри обработчика еще раз выставить бит INT0 в регистре GIFR) и сработать 2 раза. Чтобы этого избежать, при выходе из обработчика этот бит лучше сбросить
@@cr00z Благодарю, за разъяснение! Удачи!
@@cr00z все верно, чтоб в протеус заработало нормально, нужно прогнать его хотя бы один раз с sei(); вместо SREG |= (1
Чтобы после прерывания светодиоды не начинали мигать сначала, надо вместо команды SREG |=(1
Не заметил никакой разницы. Одинаково работает и та и так.
@@splinterkab9007 там ошибка в коде. В GICR открыты 2 ноги для прерывания, а в ддрД и портД 1 на прерывание, одна на кнопку. Надо либо там убрать лишнюю,либо тут добавить. Весь день мучился, вообще на железе не работало, а в протеусе так же, начинался цикл сначала.
@@BitlllJooS я на си давно уже не пишу. Мне для мк сейчас проще flowcode использовать. Накидал блоками в визуальной среде. Добавил нужные компоненты и готова прошивка для мк. Если тебе для изучения си. Я уже забыл что там к чему. Если просто для себя сделать что-то рабочее. Flowcode изучить не долго. Там и эмулятор встроенный есть.
@@splinterkab9007 никогда не слышал о flowcode. Действительно гораздо проще,чем Си? Надо изучить этот вопрос
@@BitlllJooS проще. Советую попробовать и разобраться. Особенно если лень вникать в си. Программ для визуального программирования есть несколько. Мне больше зашла flowcode. Они хотя и требуют элементарных понятий. Но это проще чем учить си с ноля. В ютуб есть человек который по этой программе отлично поясняет. Не буду ссылку на канал кидать. Где программу скачать, как установить и как настроить тоже писать не буду. Надеюсь в гугл не забанили.
Через данную программу может немного увеличится размер после компиляции по сравнению с тем же на си. Хотя смотря как на си написать.
Отличный пример со светодиодами
а почему вы не используете оператор While? для повторения итерации самое то! копировать по нескольку раз, это кащунство!
Доброе время суток, у меня вопрос - когда нажимаешь на кнопку прерывания скажем на 3 светодиоде то после возобновления цикла данного прерывания начинается с начала а не продолжает цикл дальше... или я не правильно, что то понял ?
С Уважением Дмитрий! / Stepanov Dmitriy!
Здравствуйте! После обработки прерывания управление возвращается в то место, откуда было вызвано прерывания и цикл продолжается дальше.
@@Программированиемикроконтролле так в видео отлично видно, что процесс начинается щаново, а не с точки прерывания. Это глюк симмулятора (протеуса) или на реальном МК будет то же?
@@Жэк это небольшой косяк в коде)) надо лишнюю ногу для прерывания отключить и будет работать как надо. А так у меня МК зависал, хотя в протеусе все норм показывало
А почему прерывание сбрасывает цикл? Вроде как цикл должен продолжится после выполнения програмы прерывания? Или нужен какой-то дополнительный код?
Подскажите пожалуйста, может кто это читает и без кода сможет натолкнуть на мысль как поправить. Такое дело,
МК атмега328, по INT0_vect ставлю флаг, потом в лупе проверяю этот флаг и считываю данные из ADC. Все ок.
Но если добавить еще одно прерывание INT1_vect, то все будет работать, до того пока не дать сработать этому новому прерыванию, после него данные из ADC будут получаться не верные, кракозябры пойдут в лог.
В чем может быть дело?
А почему вы оговорите что после прерывания выполняется дальше программа где прервалась, а на самом деле видно что алгоритм программы просто начинается сначала. Или это тоже настраивается?
При запуске МК сразу выполняется программа прерывания и только потом программа основного цикла..Как заставить МК выполнять сразу программу основного цикла?
как активировать внешние прерывания определенным количеством (3-5 ) импульсов
на входе или нажатиями на кнопку. Меня интересует именно прошивка в atmel studio.
Так и не понял почему он выходит с прерывания и гасит светодиоды которые уже были включены?
В этом примере смысл в том, что когда нажимаешь обычную кнопку светодиод начинает моргать тогда,когда до него дойдет алгоритм по коду сверху вниз при условии что будет нажата кнопка.А при нажатии на кнопку прерывания чтения кода прерывается и сразу переходит на алгоритм мигания одного светодиода,после его выполнения начинается чтение кода заново то есть сверху вниз.Что бы работало так как автор показывал в начале нужно код мигания одного светодиода поместить в функцию и нажатием кнопки прерывания вызывать эту функцию ,тогда после отрабатывания функции код продолжит работу до конца.
@@Dima-vl7dm но ведь код мигания одного светодиода и так в функции... прерывания.
Как правильно это осуществить?
Все круто ! Поддерживаю пальцем вверх !
Ролики очень крутые, но у меня вопрос - после выхода из прерывания, код для диодов начал выполняться заново, а не с того момента, с которого мы упали в прерывание. Получается, выходя из прерывания, МК будет выполнять первую команду из главной части программы?
Добрый день. Получили ли Вы ответ на ваш вопрос. Меня это тоже интересут: почему не так как , как автор сначало в теории обьяснял. Я стараюсь изучать у разных проводящих занатия. Могу вам рекомендовать еще одного. Сначало я думал, что какой-то баран обьясняет. Но просмотрев и прослушав несколько его занатий заинересовался и потом даже больше получил инфо.
Даю на его занятия ссылку:
th-cam.com/play/PL-bJ-cyZJjjDetZrdA7uiYrVvdJSIBZVR.html
"andrey frolov" на youtube
@@kumelektronik340 ошибка в коде. Если ещё актуально, то расскажу) странно,что столько просмотров, а заметили всего пара человек
Всё будет работать, если разрешить с "sei()"
@@kumelektronik340 я весь день мучился. Нашел несостыковку GICR и ддрД и портД. В GICR 2 ноги под прерывание выбрано, а в ддр и порт одна для прерывания и одна для кнопки. В итоге вообще на железе не работало, зависало. Сейчас без Sri() работает как положено))
Я столкнулся с такой проблемой, что Atmel Studio не распознает команду конфигурации регистра статуса и фраза SREG подчеркивается красной волнистой линией. Если не конфигурировать этот регистр, то прерывание в программе не выполняется. Как решить данную проблему?
Забить на подчеркивание
После окончания функции прерывания программа начинается с начала, а не продолжается. Видно, что диоды не продолжают зажигаться, а зажигаются с первого.
Всё нормально в протеусе эмулирует. Вот рабочий пример. Светодиоды на порт C и D7. Кнопки на B2, D2 к земле. D3 к плюсу питания. Частота 8MHz.Может чего не так но работает.
#include
#define F_CPU 8000000UL
//8MHz
#include
#include
//////////////////////////////////////////////////////////////////////////
void _port(void)
{
DDRC |= 0b1111111;//порт С на выход
DDRD |=(1
Тестирование нужно производить в железе, а эмулятор есть эмулятор, сами же понимаете не у всех же стоят процы core i9
@@yuryfull5136 на четвёртом пне тоже ок. Необязательно i7.
В среде Arduino применяется обработка данных по прерыванию ? Например, когда для выбранной платы есть аппаратная поддержка какого-то протокола (SPI, UART, Ethernet и т. д.), используется режим ожидания приёма (Salve) и приходит пакет, можно ли вызвать программное прерывание и читать приёмный буфер только тогда, когда в нём что-то есть ?
А я вот долго и упорно не мог понять почему у меня не мигает диод на PC6
так почему?
а как настроить прерывание через INT1?
ISR(INT1_vect) написал код для прерывания, в тоже настроил ISC11 и ISC10 на MCUCR= 0b00001000, установил в регистре D PD3 на вход и поставил подтягивающий резистор DDRD &= ~(1
Я малость написал по своему но у меня оно работает так что при прерывании основная программа выполняется с начала а при нажатии обычной кнопки он помиает и продолжает с последнего места основную программу. Всего то написал массивом какой зажигать диод и условие с накоплением переменной.
Хочу попросить вас сделать видео по энкодеру.
Что такое MCU? Я про расшифровку аббревиатуры.
спасибо за хороший материал
В atmega328 не могу заставить работать по восходящему фронту. Может есть какие-то нюансы? Или это просто косяк протеуса?
Настраиваются прерывания немного по-другому(благодаря вам хоть понял, как можно извлечь полезные сведения из даташита)
EIMSK|=(1
На этом и предыдущем видео вот прям заметно,что на последней трети повествования у автора просто терпения не хватает . Начинается ускорение , доводящая до бешенства дрочка зумом (особенно бесит в протеусе ,т.к.буквально рвет схему на лоскуты) . Зачем увеличивать шрифт программы тоже не понятно ( нет возможности охватить взглядом и тоже приходится судорожно вспоминать где что) .В результате под конец получается слайд-шоу . Автор , у вас же отлично получается планировать рассказ для понимания .Всё очень доходчиво . Да, контент для очень начинающих )) ,но это ж не значит ,что нужен размер букв как в букваре) .Вы же делали картинку в картинке с реальным МК .Ну вот и сделали бы по пол-экрана программу и схему ,чтоб сразу увязки было видно. А вообще более внятных пояснений еще не попадалось . Ваш цикл вот прям очень нравится . На критику прошу не обижаться (кто-то же должен , а то возгордитесь)))
.
23:11 Можно же было всё так оставить в схеме и тогда бы по идее прерывание срабатывало после отпускания кнопки.
.
А что будет делать МК если я зажму кнопку с перыванием?
Обычно я целый день жду звонка и ничего не делаю. Значит, я не использую прерывания.
Спасибо автору
Возможны ли эти действия на телефоне
GICR = 0b01000000; // Отключите INT1, иначе схема работать не будет. Будут наводиться помехи
Вопрос а прерывания возможно сделать на 60 минут и как это будет выглядеть в написании кода ?
Привет. Рекомендую сдесь посмотреть:
th-cam.com/video/LpPAgIFQB7c/w-d-xo.html
th-cam.com/video/WfsHTeJQkKg/w-d-xo.html
если подтянуть пин прерывания к земле то при касании любым металическим предметом проводов питания ардуино то будут происходить ложные прерывания
А как лучше?
@@valovik внутрений резистор или подтяжка к плюсу
@@_lika_dedicated_4105 я позже подумал и пришёл к этому же мнению. На высоком уровне на ноге, естественно не будут отражаться помехи
@@valovik если делать на обычных пинах то вроде никакие помехи не ловятся ,у меня тоже такая проблема наверно придется делать инвертер сигналов ,мне надо высокие сигналы с порта передать на мк уже в низким сигналом
Спасибо!!!
А можно зажечь диоды через for?
Типа так?
for (int i = 0 ; i < 6 ; i++)
{
PORTC
Все сделал по уроку, в протеусе все работает, а на реальном МК работает только кнопка которая подключена к внешнему прерыватель. Удаляю строку которая отвечает за регистр SREG начинает работать часть кода, что в блоке main и перестает работать внешнее прерывание, соответственно. Кто знает в чем дело?
GICR = 0b01000000;// отключите INT1. схема работает не корректно. Из за наводк помех на INT1
super, super!!!
только через sei(); заработало прерывание.
Спасибо за ваши уроки. Очень помогают.
И, может кто подскажет, какими регистрами правильно настроить внешнее прерывание на Attiny44
GIMSK = 0b01000000; //Включаем внешнее прерывание
MCUCR = 0b00000010; //Сработка по спаду импульса
sei (); // Global interrupt enable;
Так не срабатывает.
Даташит подскажет :)
там где 5 раз моргнуть мог бы и поменьше копипастить for (int tmp_i = 0; tmp_i
Но тогда ЛОГ.1 подается на два пина..ну так протеус показал..У себя я выбрал ПИНД0,но во время запуска почему еще засвечивается светодиод и на ПИНД1
Считал сколько раз автор употребил слово,, данный,,,?
молодым легче и весей обучаться. в возрасте это такой геморрой.
Такую кашу наваял! У новичков от твоего светофора наверно флягу сорвало....
Урок ни сколько про внешние прерывания сколько про светомузыку!
это не прерывания не вводите в заблуждение. прервывания это interrupt
Дизлайк за неудачный пример и нерешительность в голосе
А в чем заключается неудачность примера? Ибо у меня в протеусе все работает, а на реальном МК не хочет, не выполняется код, что в блоке main.
@@dneproart ему лишь бы ляпнуть
@@dneproart может ошибка где. Проверил на мк. Всё работает.
Ошибка, надо NT1 отключить