Timer-counter interruptions ATmega8 | Microcontrollers from scratch #15

Поделиться
HTML-код
  • Опубликовано: 28 сен 2024
  • Interrupts from the timer-counter of the microcontroller can be caused both at overflow of the counter, and at coincidence with the value written down in the register register TCNTx. The use of timer-count interrupts allows you to avoid the use of delays connected by the library delay.h, and thus unload the microcontroller. Settings and connection are made by setting the corresponding bits in the TIMSK register.

Комментарии • 45

  • @Программированиемикроконтролле

    Программирование микроконтроллеров. Полный курс для начинающих: diodov.net/programmirovanie-mikrokontrollerov-avr/
    Электроника для начинающих. Мощный курс. diodov.net/elektronika-dlya-nachinayushhih/

  • @321Endeavor123
    @321Endeavor123 6 лет назад +17

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

    • @sg6630
      @sg6630 5 лет назад

      А что если прерывание искусственно продлить ( зажать кнопку которая управляет прерыванием) программа зависнет?

    • @rsa5991
      @rsa5991 5 лет назад +2

      "Никогда не должно" - слишком категорично. Да, прерывание останавливает основную программу, но что если так и надо? Что если основная программа не имеет смысла, пока прерывание не обработано?
      И если вы возразите, что "так никогда не делают" - делают. Некоторые системы реального времени представляют собой просто кучу прерываний с разными приоритетами. Основной программы может тогда вообще не быть - весь код в прерываниях.

  • @дигадвигуля
    @дигадвигуля 6 лет назад +5

    надеюсь выйдет сразу несколько уроков по АВР. Долго ждем. Ну дай Бог тебе свободного времени

  • @ЕвгенийБондарев-к7ф
    @ЕвгенийБондарев-к7ф 10 месяцев назад

    Благодарю за очередной урок, здесь все получилось , но почему то в предыдущем уроке микроконтроллер начал ловить помехи и работал через раз! 🎉

  • @anatoliyv5607
    @anatoliyv5607 Год назад +2

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

  • @igorletov
    @igorletov 4 года назад +1

    Вот это объясняет человек! Спасибо.

  • @aa_1000
    @aa_1000 5 лет назад +1

    Вообще-то sei - это ассемблерная инструкция установки флага I.

  • @hdl917
    @hdl917 4 года назад

    Теперь гирлянды на новый год будут точно у всех самодельные)...

  • @Владимир_Великий_Русь

    Ты с дуба упал ? Задержки ставить в прерываниях ?

    • @rsa5991
      @rsa5991 5 лет назад +2

      А что такого? Да, основная программа (и другие прерывания) не будет выполняться, но что если нам так и нужно?

    • @ValeraDXM
      @ValeraDXM Год назад +1

      Это же для общего понимания. Для наглядности работы алгоритма программы.

    • @Владимир_Великий_Русь
      @Владимир_Великий_Русь Год назад +1

      @@ValeraDXM тогда согласен

  • @talgtalga3767
    @talgtalga3767 2 года назад

    народ приветствую вопрос такой если мне нужен прерывния было через 40 секунды как тут быть????

  • @The9thug
    @The9thug 4 года назад

    почему то мой протеус не дружит с прерываниями

    • @splinterkab9007
      @splinterkab9007 4 года назад

      У него бывает. Мой дружит.

  • @fidfid1623
    @fidfid1623 4 года назад +4

    Наверно это урок, типа, как не надо делать.

    • @romanbru9504
      @romanbru9504 2 года назад +3

      Это урок - с чего начать хоть как то понимать суть происходящего

  • @олегспирин-р4р
    @олегспирин-р4р 4 года назад

    С каждым уроком комментариев всё меньше... Многие уже соскочили к этому уроку, всё таки очень сложно...

    • @splinterkab9007
      @splinterkab9007 4 года назад +1

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

    • @олегспирин-р4р
      @олегспирин-р4р 4 года назад

      @@splinterkab9007 вы занимаетесь программированием? Работа или просто хобби?

    • @splinterkab9007
      @splinterkab9007 4 года назад +2

      @@олегспирин-р4р я немного занимался ранее для себя. Правда не на C++. Но синтаксис похож. Ну хотя что может быть иначе, if он и в Африке if. Сейчас хотел бы освоить программирование МК для себя. Есть конечно графические программы которые позволяют быстро слепить нужное из блоков. Так конечно проще но код сильно раздувает. Хотя не сравнивал. Думаю лучше перейти на си. Пока тренируюсь. А большинству это ненужно. Вот и комментарии убывают. Да и наверное сложно тем кто никогда не изучал даже basic, Pascal etc.

    • @олегспирин-р4р
      @олегспирин-р4р 4 года назад

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

    • @splinterkab9007
      @splinterkab9007 4 года назад +3

      @@олегспирин-р4р ну например я себе сделал плавный розжиг ближнего в авто. Полезно чтоб лампы не перегорали. Еще и таймер туда добавил для отключения после выключения зажигания, просто пару раз забывал выключить. Если нормально изучить тему можно сделать все что угодно. Главное чтоб хватило фантазии и ресурсов МК. Сейчас конечно много чего есть в продаже. Но вдруг понадобится чего с особыми функциями. В сети конечно тоже много чего есть готового. Но мне больше интересно сделать своими руками с нуля. Моё мнение. Это полезно для общего развития. Да и мало ли в будущем работа, заказы, но нужно изучать хорошо. Да и иметь возможность сделать чего под себя не лишняя будет.
      Для меня например это вроде просто. Правда практики давно не было. Сижу вспоминаю да с регистрами МК разбираюсь. Он бы разбирал еще более подробно как с регистрами работать. А то умалчивает много. А язык буржуйский я плохо знаю.
      В общем советую не бросать и освоить хоть немного, а лучше много.

  • @СергейПлюйко-ь7о
    @СергейПлюйко-ь7о 6 лет назад +4

    Здравствуйте когда продолжение? Очень интересно.жду следующее видео.

  • @ivanrusev2270
    @ivanrusev2270 Год назад

    В прерывания по таймеру можно использовать инкримент и через оператор if можно настраиват задержку.А так абра кадабра.TCNT1=0; до выполнения программы в обработчике прерывания.

  • @ВиталийЧеренков-ц4х

    Не легче зажигать все светодиоды через умножение на 2 и прибавление 1 через цикл for или while?

  • @ГлебЛомоков
    @ГлебЛомоков 2 года назад

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

  • @oblibox1
    @oblibox1 2 года назад

    А распечатку или скетч урока можно под видео выкладывать))?

  • @Dmitrii82
    @Dmitrii82 6 лет назад +2

    а можно вообще наверно написать TCCR1B=3 !?

    • @splinterkab9007
      @splinterkab9007 4 года назад

      Конечно можно. 3 или 0x03 или 0b11. Можно и так
      TCCR1B=(0

    • @digital4ik621
      @digital4ik621 3 года назад

      @@splinterkab9007 Вы много комментируете и всегда по делу, и не только на этом канале. Подскажите, пожалуйста, почему при прерываниях по переполнению таймера продолжение выполнения кода после этого прерывания происходит с того же места, как и должно быть. А в предыдущем уроке №14 при внешних прерываниях выполнение кода после прерывания начинается заново. Автор канала к огромному сожалению не отвечает на этот неоднократно заданный вопрос. Замена SREG на sei ничего не меняет, что бы там ни писали другие комментаторы.
      К автору канала тоже огромная просьба откликнуться и пролить свет на данную непонятку.
      Всем за ранее спасибо.

    • @TrasherFCR
      @TrasherFCR 3 года назад

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

  • @teist111
    @teist111 3 года назад

    Возможно ли все это выполнять на телефоне

  • @Dmitrii82
    @Dmitrii82 6 лет назад

    опять же как я понимаю, к примеру:
    TCCR1B=0b00000011
    TCCR1B|=(1

    • @sg6630
      @sg6630 5 лет назад

      Да

    • @channeltimelord9453
      @channeltimelord9453 5 лет назад +7

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

  • @тураразимхан
    @тураразимхан 5 лет назад +1

    вы классно объясняете по моему как вы никто не учит

  • @АлексейСолянов-и3ы
    @АлексейСолянов-и3ы 3 года назад

    Здравствуйте , такой вопрос.
    Если указать глобальную переменную для задержки delay();
    Допустим int z = 100;
    И менять эту переменную только в одном месте , почему компилятор ругается? И не компилирует код?
    Тоесть так сделать не получится, почему?

    • @TrasherFCR
      @TrasherFCR 3 года назад

      Где-то ошибка, так же делали в предыдущих уроках.

    • @Yupitrer
      @Yupitrer Год назад

      Теже не работает