Interrupts in Arduino, Part 1. Timer interruptions - Arduino for beginners

Sdílet
Vložit
  • čas přidán 18. 07. 2017
  • The site of the school of technical creativity INTEGER Omsk: gointeger.ru/
    Vkontakte community: gointeger
    Links for ordering the necessary components: progmk.ru/komponentyi/
    Everything for programmers: progmk.ru/
    ================================================== ====
    DESCRIPTION:
    This is the first part, perhaps, of the most important and complex topic within the framework of the "Arduino Basics for Beginners" course, as today we will talk about interruptions. Specifically, about timer interruptions. About how to make your programs more flexible and get rid of the notorious delay () function, which, in fact, stops the entire microcontroller.
    ================================================== ====
    Sketches shown in the video: yadi.sk/d/29qd9_2Q3LB6FG
    ================================================== ====
    The rest of the course "Arduino for Beginners": • ОБРАЗОВАТЕЛЬНОЕ: Уроки...
    ================================================== ====
    We can help our project by these details:
    Yandex.Money - 410011223685103
    Webmoney - R516670493738
    Sberbank - 4276450014692863
    Paypal - viva-os@mail.ru
    ================================================== ====
    "Robotics", "Smart Home", "Arduino for Beginners" - unique courses on learning the basics of programming and creating electronic devices for children and adults. A consistent approach to learning and guaranteed results in both school and online classes. Free trial lesson - gointeger.ru/
  • Věda a technologie

Komentáře • 198

  • @LabRazum
    @LabRazum  Před 7 lety +19

    UPD: Вторая часть видео: czcams.com/video/BPnNQwr18yg/video.html
    На 7:09 очепятка - 0.001с = 1 мс
    На 11:02 забыл добавить обязательное обнуление переменной timerLED1, когда она отсчитает 1000, будьте внимательны.
    Правильно будет так:
    timerLED1++;
    if(timerLED1 == 1000)
    {
    timer LED1 = 0;
    timerLED1Sec++;
    }

    • @McrRadium
      @McrRadium Před 7 lety

      Как увидел в видео эти строки тут же кинулся в комменты искать патч) Там ведь можно обойтись остатком от деления, чтобы не инициализировать новую переменную. Но. Так таймер будет каждый ~50 дней ошибаться на 705 мс. Серьезный выбор, 705 мс на 50 дней или пару байт оперативной памяти)

    • @DDRcom
      @DDRcom Před 6 lety

      Ничего страшного при переполнении не будет, это беззнаковые переменные, а значит их разность даст нам разность по модулю. т.е запись вида timerLed- timerPrev >=1000 - корректно отработает при переполнении timerLed. проблема будет наблюдаться только при записи вида timerLed>= timerPrev+1000. Поэтому необходимо использовать сравнение в виде первой записи и все будет ОК.

    • @user-ii3lg9xb9c
      @user-ii3lg9xb9c Před 6 lety +2

      ну какой нахер звонок? ты чо про прерывания шестилетним детям рассказываешь?
      Или нормальным людям?
      Сказать нельзя что сигнал идет постоянно а, скажем, нажатие кнопки размыкает цепь и получается прерывание?
      И сравнить это с ГОРЯЩЕЙ ЛАМПОЧКОЙ, А НЕ С ДВЕРНЫМ ЗВОНКОМ.
      Или уж если со звонком то мог бы сказать что ты воткнул в кнопку звонка спичку и он голосит как сумасшедший а добрые гости пришли и вытащили спичку.
      Эх, ты, горе-учитель. Мне жалко твою аудиторию.
      Не у это - пиздец, обнуление переменной он забыл, а сравнить прерывание с замыканием он не забыл.
      да ну, нах!!!

    • @m4dd1m4
      @m4dd1m4 Před 5 lety +6

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

    • @gelaev7670
      @gelaev7670 Před 5 lety

      @@m4dd1m4 каждому своё

  • @romanberngardt2855
    @romanberngardt2855 Před 6 lety +43

    7:12 0.010 c - это 10 миллисекунд, а не одна. Но вот 0.000004х250 действительно равно 0.001, то есть 1 миллисекунде.

  • @iopko26heb58
    @iopko26heb58 Před 5 lety +12

    Парень молодец. Подаёт материал грамотно, без запинок, а-канья, из ума всё. Все выпуски просмотрел, ждём продолжения. СПАСИБО!!!

  • @Razmarin84
    @Razmarin84 Před 6 lety +3

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

  • @incorruptibilis
    @incorruptibilis Před 7 lety +36

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

  • @shonnews7025
    @shonnews7025 Před 2 lety +1

    7.08- 7.27 Виправте помилки з нулями. 1мс =0.001с. Гарне навчальне відео, дякую.

  • @user-rg5gd9td8w
    @user-rg5gd9td8w Před 7 lety +12

    Огромное спасибо за такой труд, это именно то видео которого мне так не хватало!!!
    Спасибо автору за такое очень полезное пояснение в видео!!!
    От меня Лайк!!!

  • @sylstall5590
    @sylstall5590 Před 6 lety +54

    Не видно обещанных последующих видеоуроков. Продолжайте пожалуйста, всем интересно, ждем!

    • @LabRazum
      @LabRazum  Před 4 lety

      Вторая часть видео: czcams.com/video/BPnNQwr18yg/video.html

  • @chingizbashirov2354
    @chingizbashirov2354 Před rokem

    Так долго ломал голову над тем как сделать что бы два двигателя в моем проекте работали одновременно. И тут в рекомендацию выходит это видео. Спасибо!

  • @otherattack6125
    @otherattack6125 Před 6 lety +2

    С нетерпением жду продолжения!

  • @user-ut5yb4fq8i
    @user-ut5yb4fq8i Před 7 lety

    Отлично подан материал. Я уже не Личинка кодера, но и далеко не Кодер-Прогер-Старичок. Но каждое ВАШЕ видео очень полезно. Это основы. Которых так не хватает. Когда делаешь что то сложное. А уж тем более многозадачное. Спасибо за самые важные базовые Кирпичи знаний.

  • @aleksandrzv8688
    @aleksandrzv8688 Před 7 lety

    Спасибо большое.Отлично.Молодцы что оставили скетчи в ссылках,появилась возможность самому по заниматься и разобраться.

  • @Unregistered33
    @Unregistered33 Před 6 lety

    Отличный материал! Очень жду того же про внешние прерывания.

  • @menxxx1
    @menxxx1 Před 4 lety +1

    Спасибо вам большое. Только не бросайте.

  • @1978Denis1978
    @1978Denis1978 Před 4 lety

    Круть! Ничего не понял, но понял, что нужно разобраться в этих таймингах, СПАСИБО!!!!!!!!!!!

  • @topalov_al
    @topalov_al Před 7 lety +26

    Чувствую не один раз буду пересматривать это видео :) Спасибо за информацию)

    • @Yupitrer
      @Yupitrer Před 6 lety +5

      Вот, смотрю спустя 4 месяца, уже немного понял.

    • @user-cf8jq7tr2y
      @user-cf8jq7tr2y Před 5 lety

      @@Yupitrer а, извиняюсь, в который раз?

    • @maxwellhawk
      @maxwellhawk Před 5 lety

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

    • @Yupitrer
      @Yupitrer Před 4 lety

      @@user-cf8jq7tr2y сегодня 28.10.19 Смотрю 4й раз. Для дела нужно)

  • @danik3314
    @danik3314 Před 6 lety +2

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

    • @LabRazum
      @LabRazum  Před 6 lety +1

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

  • @pan_electric
    @pan_electric Před 4 lety

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

  •  Před 6 lety

    Genialno. Na konec to est kanal gde obesniajut ooooocen dohodcevo. Spasibo!

  • @Victor-zz1gi
    @Victor-zz1gi Před 6 lety

    Понравилось. Интересно смотреть и слушать.

  • @Yupitrer
    @Yupitrer Před 6 lety +2

    Народ! Да я спасен! Это не вероятно. Целую неделю я думал как обойти эту бычевскую "дилей".
    Ролик прям в точку.

  • @pupkin204
    @pupkin204 Před 4 lety +3

    У светодиодах одинаковое время горения и время не горения, а как сделать, что бы было как blinka, что бы можно было менять время горения и не горения каждого светодиода.

    • @user-jo3wx9uo2k
      @user-jo3wx9uo2k Před 3 lety

      @Bulba NaftРугается на последнюю строчку greenOFF = millis();

  • @Bagasl
    @Bagasl Před 4 lety

    Отличные видео, с норм объяснением о работе прерываний со стеком выполнения, респект.
    Вы только на Ардуино платформе пишете, или на чистом Си + AVR/STM32 тоже планируются проекты ?

  • @boobonchik
    @boobonchik Před 7 lety

    Спасибо! Очень подробно объяснил.

  • @alekseynikitin3354
    @alekseynikitin3354 Před 4 lety

    Шикарно! На просторах ютуба не встречал аналогичных видео на данную тему. Но где продолжение?

  • @user-ro3kx1fk3s
    @user-ro3kx1fk3s Před 4 lety

    Очень подробно, спасибо.

  • @user-wh1iy2jd3k
    @user-wh1iy2jd3k Před 6 lety +6

    Когда будет продолжение выпусков?

  • @fixfix6815
    @fixfix6815 Před 6 lety +1

    Блин... Спасибо вам огромное!

  • @aptem968
    @aptem968 Před 6 lety +10

    когда будет продолжение

  • @user-or2nk3vc7r
    @user-or2nk3vc7r Před 6 lety

    Привет. Спасибо за уроки. Когда продолжение?

  • @kosmos8460
    @kosmos8460 Před 2 lety

    Однозначно лайк и подписка 👍

  • @alekskapitonov2738
    @alekskapitonov2738 Před 6 měsíci

    Спасибо автору!

  • @user-dg8tv6el1i
    @user-dg8tv6el1i Před 7 lety +1

    супер! спасибо

  • @user-su5sh6zc4o
    @user-su5sh6zc4o Před 3 lety

    Насчёт переменной подсчёта мс. Можно 16 разрядную положительную и спец алгоритм который учитывает переполнения. Например записываем или сравниваем с неким сгенерированный числом который учитывает переполнения

  • @RetiredNihilist
    @RetiredNihilist Před 3 měsíci

    Очень полезное видео, спасибо!
    Подскажите пожалуйста, возможно ли обеспечить многозадачность работы одной платы Ардуино UNO так, что бы она одновременно излучала ИК сигнал по протоколу NEC, например, и принимала его ИК приёмником типа CHQ 1838?

  • @odrimange
    @odrimange Před 5 lety

    ждём продолжения

  • @danik3314
    @danik3314 Před 6 lety

    Очень хотелось бы увидит использование экранов nextion и его программирование в nextion editor

  • @lexanstels5344
    @lexanstels5344 Před 6 lety

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

  • @user-vu6hn4ul2i
    @user-vu6hn4ul2i Před 6 lety +3

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

  • @user-ip2ml3xu4g
    @user-ip2ml3xu4g Před 6 lety +3

    Здравствуйте! Нравятся Ваши видео, очень доступно объясняете)) В своих кодах вы пишете "Если таймер отсчитал больше заданного значения". Но возник один вопрос - допустим в основном цикле у меня выполняется задача, в которой очень важно сохранять равные промежутки времени (не 1,001мс, не 0,9999мс, а ровно 1мс). При этом есть прерывание, например при нажатии кнопки производится какое-то действие. Оно же занимает определенное кол-во тактов, так? Основной цикл останавливается на это время. Получится незначительное изменение, времени работы, но мне то оно значительно! Не пойму, как синхронизировать работу так, чтобы отсчет в основном цикле всегда работал чётко, несмотря на прерывания. Есть идеи?))

  • @689849120
    @689849120 Před 3 lety

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

  • @Fly-24
    @Fly-24 Před 6 lety

    Очень дословно!)

  • @user-bd6ox3mw8n
    @user-bd6ox3mw8n Před 2 lety

    Не получается передать обороты с датчика Холла с олной ардуино на другую. Может это саязано с прерываниями? Без RS485, все получается, как только подключаю передачу данных не идет.

  • @user-uq9nl1gu3l
    @user-uq9nl1gu3l Před 6 lety

    Добрый день подскажите пожалуйста почему LCD экран сначала работает всё отлично а через несколько минут на нём исчезают все надписи

  • @kgaussss7299
    @kgaussss7299 Před 5 lety

    Дружище, а как же внешнее прерывание? Работа идёт или не стоит ждать продолжения?

  • @user-ex8ed6pu9h
    @user-ex8ed6pu9h Před 5 lety +3

    Извините, а где вторая часть 11-урока?

  • @Bondarev-Y
    @Bondarev-Y Před rokem

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

  • @sergiuspoet
    @sergiuspoet Před 4 lety +1

    для разных диодов понятно а как для одного задать разное время задержки

  • @Captain_Nemo_080
    @Captain_Nemo_080 Před 5 lety +2

    ((( продолжения не будет??? Очень жаль...

  • @nursultansulaymanov
    @nursultansulaymanov Před 6 lety

    Можно же просто millis() использовать? вместо всех этих кодов sei cli ?

  • @user-my3os1jy1f
    @user-my3os1jy1f Před 6 lety +2

    А можно заставить светодиод гореть одну секунду а не гореть десять?

  • @Nikita_Pro89
    @Nikita_Pro89 Před 8 měsíci

    Здравствуйте, спасибо за информацию. Обнаружил опечатку 8:31 (Timer2 использует пины 11 и 13). Должно быть 11 и 3.

  • @AndriiNikolaiev
    @AndriiNikolaiev Před 4 lety

    Спасибо. А пример шедуллера можно привести?

  • @Yupitrer
    @Yupitrer Před 6 lety +1

    Вот убил бы! Кто дизы ставит? Автор на столько доступно рассказывает что даже за деньги такого не расскажут.

    • @gelaev7670
      @gelaev7670 Před 5 lety

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

  • @bir52k1kv178
    @bir52k1kv178 Před 4 lety +2

    11:03 нет в условии обнуления миллисекундного счётчика когда он достигает значения 1000
    if(timerLED1 == 1000)
    {
    timerLED1Sec++;
    timerLED1 = 0;
    }

    • @Andrei-fz8rb
      @Andrei-fz8rb Před 2 lety

      Я тоже заметил. И полез в Комменты. Оказывается не я один.🙂Могу ошибаться но по моему переменная timerLED1Sec++; уже не нужна.

  • @user-yo4xh4xf1s
    @user-yo4xh4xf1s Před 4 lety

    подскажите пожалуйста как использовать millis в цикле For

  • @maozzzz
    @maozzzz Před 4 lety

    13:00 А что за "какое-нибудь испорченное" значение вы можете получить? Иначе мы рискуем пропустить прерывание? Каким образом вы его пропустите, поясните, пожалуйста. И еще вопрос вдогонку: а остановив прерывания вы не рискуете его пропустить? Особенно учитывая, что у вас в loop всего пара операций? ))
    И еще вопрос. А нельзя ли моргать приблизительно так:
    Например на X мс:
    if (millis() % X == 0) toogle(LED_X)

  • @fnhm_
    @fnhm_ Před 4 lety

    10:24 Почему бы вместо использования двух переменных просто не обнулять переменную счетчика при достижении значения в 1000? Таким образом экономится память (одна переменная вместо двух, тип переменной можно сделать uint16_t) и возможность переполнения можно исключить

  • @zhdanvadim9536
    @zhdanvadim9536 Před 5 lety

    Спасибо!

  • @denismorda
    @denismorda Před 5 lety

    У меня в ардуино таймеры вообще не хотят работать. В AVR studio проблем нет. Я так понимаю это конфликты библиотек?

  • @boyabend1912
    @boyabend1912 Před 4 lety

    Нестыковка получается, если в программу добавить delay или Serial.print, все тормозит...

  • @ivanvasin5666
    @ivanvasin5666 Před 2 lety

    А как реализовать работу светодиода(или реле): 1мин горит а 5 минут не горит?

  • @bandirom
    @bandirom Před 6 lety

    отлично)

  • @Al.Sy.
    @Al.Sy. Před 4 lety

    Прерывание на адресе 106 произошло, на вершине стека должен быть адрес следующей команды, перед которой было прерывание. Т.е. адрес возврата должен быть 107, но никак не 106.

  • @santhermTV
    @santhermTV Před rokem

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

  • @kolroot1281
    @kolroot1281 Před 2 lety

    А почему сразу не использовать unsigned long long ?

  • @alekseybazilevich1368
    @alekseybazilevich1368 Před 4 lety

    Доброго времени суток, пример с светодиодом понял. Но вот пытался реализовать с датчиком температуры и не получилось. Может сможете помочь?
    void loop()
    {
    digitalWrite(term_power, HIGH);
    sensors.requestTemperatures();
    delay(1000);
    sensors.requestTemperatures();
    Serial.println(sensors.getTempCByIndex(0));
    digitalWrite(term_power, LOW);
    delay(4000);
    }
    Буду очень благодарен. заранее спасибо.

  • @hagenh3365
    @hagenh3365 Před 4 lety

    Долго искал подробнее про программные прерывания, спасибо. А то раньше использовал чужой код без понимания.
    WDTCR=(1

  • @mihailpolunin6398
    @mihailpolunin6398 Před 6 lety

    Привет! А можно ссылку на даташит на русском для такого камня? Есть такое вообще? или только на англ языке?

  • @user-sl9qk1ms2n
    @user-sl9qk1ms2n Před 6 lety

    Как в скетче указать время в часах и минутах?

  • @4L1KYT
    @4L1KYT Před 6 lety

    что за трек играет в видео

  • @Gleb_Pastushenko
    @Gleb_Pastushenko Před 6 lety +2

    А зачем такое громоздкое условие на переключение флага LED1On? Вместо этих 10 строк проще написать:
    LED1On = !LED1On;
    degitalWrite(13, LED1On);

  • @wel_vito5911
    @wel_vito5911 Před 3 lety

    как менять функции при нажании одной кнопки

  • @user-ze1nm5uz5d
    @user-ze1nm5uz5d Před 6 lety +1

    Помогите мне нужно все как вашем виде только мне нужно зажигать светодиод на 2сек. Выключать его на 60 мин. Вообще мне это нужно залить в тмни13а

    • @LabRazum
      @LabRazum  Před 6 lety

      Посмотрите настройки таймеров для tiny13а по даташиту, ну а дальше следуйте тем же примерам из видео и изменяйте значение таймера под нужное вам.

  • @user-ow3sz4zz2j
    @user-ow3sz4zz2j Před 6 lety

    Пишите и не стесняйтесь пересматривать)))
    Ещё сто раз придётся поглядеть

  • @semisemikon1973
    @semisemikon1973 Před 5 lety

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

  • @user-mt3vd7xv2e
    @user-mt3vd7xv2e Před 3 lety

    Спасибо

  • @jansalk3636
    @jansalk3636 Před 6 lety

    Полезное видео. По логике регистр OCR0A можно изменить на значение 127 (0х7F) и получим задержку между прерываниями в два раза меньше. Но почему-то у меня ничего не изменяется. Пытаюсь реализовать обычный программный ножкодрыг с высокой частотой:
    // Вызов функции ISR - прерывание
    ISR (TIMER0_COMPA_vect)
    {
    if (PORTD == 0b01000000)
    {
    PORTD = 0b00000000;
    }
    else
    {
    PORTD = 0b01000000;
    }
    }
    В итоге частота всегда не измена и равна частоте пред делителя. На изменение OCR0A нет никакой реакции.

  • @user-li2zm9vk8e
    @user-li2zm9vk8e Před 2 lety

    спасибо

  • @MakTitov
    @MakTitov Před 7 lety +5

    Как понимание работы прерывания может и полезно, но как для организации параллельного мигания светодиодами - слишком заморочено и много кода. Проще делать через функцию "millis" на выходе она сразу без доп. настроек даёт значение в миллисекундах, и с помощью оператора сравнения "if" определяешь время до срабатывания. пример мигания одним светодиодом:
    bool x = LOW;
    unsigned long last;
    void setup() {
    pinMode(4, OUTPUT);
    }
    void loop() {
    if (millis() - last > 1000) {
    last = millis();
    x=!x;
    digitalWrite(4, x);
    }
    }
    Значение 1000 - это задержка в миллисекундах, изменяйте по вкусу.
    Переменная "last" - хранит в себе значение счётчика во время предыдущего срабатывания. Переменная "x" - флаг статуса светодиода вкл. - выкл.
    Конечно способ не без недостатков, он относительно прерывания чуть больше грузит ядро, но для малых проектов не критично. При довольно большом количестве кода точность может снижаться, до нескольких миллисекунд. Связано это с тем что событие могло наступить а текущая итерация всего кода ещё не закончена и проверка "if" будет только на следующей итерации, спустя несколько миллисекунд - поэтому в операторе стоит знак больше ">"
    Так как по факту проходит где то 1001 - 1002 миллисекунды, но можно написать программную коррекцию и значение не превысит пары миллисекунд, даже в больших проектах.

    • @LabRazum
      @LabRazum  Před 7 lety +5

      Отвечал на подобный вопрос:
      Для меня проще знать, что и когда работает, и управлять этим процессом как мне захочется. ИМХО, гораздо удобнее создать собственный таймер под каждую задачу и пользоваться им на протяжении всей программы, реализовать такой же таймер чисто на millis будет труднее. К тому же, если вы вводите небольшие задержки, например, до 32 секунд, то вам не нужно использовать unsigned long переменные для хранения времени в огромных цифрах от функции millis(), что сэкономит память.
      Ну и конечно, важным плюсом, который я озвучивал, является независимость программного кода, расположенного в обработчике прерывания. То есть, поместив быстровыполняемую процедуру непосредственно в обработчик прерывания (тоже мигание светодиодом), мы вовсе оставим цикл loop пустым, и нам будет все равно, какой код в нем расположен, в том числе и задерживающие работу циклы while или функции delay (что, по сути, одно и тоже). Ваш код с использованием millis я приводил в видео, смотрите внимательнее, плюс, сказал, что все это делается конечно же не для обычного мигания светодиодами, а для создания псевдопараллельного выполнения разных элементов кода в более менее серьезных проектах. Создайте 5-10 подобных сравнивателей на millis, которые периодически нужно отключать, и поймете насколько неудобен ваш метод ;)

    • @MakTitov
      @MakTitov Před 7 lety

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

    • @LabRazum
      @LabRazum  Před 7 lety +3

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

  • @user-kg2cj4hu1d
    @user-kg2cj4hu1d Před 3 lety

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

  • @Tarik91011
    @Tarik91011 Před 2 lety

    Объясняю для таких как я, делительная 64 означает что подсчёт тактов дойдёт до 250.000 и сброситься и начнется заново он не будет в конце делить 16 000 000 на 64 посколько это может быть поздно ми можем множить нетолько 250 чтобы получить 1 мс.

  • @user-yx6qr8di2r
    @user-yx6qr8di2r Před 5 lety

    Добрый день! Планирую изготовить станок на базе ардуино. Не хотели бы поучаствовать в проекте?

  • @cultofsogga5863
    @cultofsogga5863 Před 6 lety

    Вторая где часть!?

  • @user-rg5gd9td8w
    @user-rg5gd9td8w Před 7 lety

    Привет, что случилось со вторым видео уроком???
    Я не успел посмотреть, а теперь видео не доступно!!!

    • @LabRazum
      @LabRazum  Před 7 lety

      Это была неудачно залитая первая версия этого видео, пришлось ее удалить и загрузить вторую, так что вы ничего не потеряли :)

  • @sssserya1
    @sssserya1 Před 6 lety

    ну даже не знаю что быстрее ? просто считывать значение с функции миллис один раз в цикле или как в вашем случае вызывать прерывание при переполнению, прерывая код каждую миллисекунду, чтоб добавлять по единице в timerLED1 и т д. Вы проверяли код на скорость выполнения ?

    • @LabRazum
      @LabRazum  Před 6 lety

      А по вашему, что собой представляет функция millis? :) Она же не берет данные о работе микроконтроллера из воздуха, а пользуется тем же таймером T0, о чем я говорил в видео. Тоже касается функции delay() и других, просто это скрыто от ваших глаз и вы используете готовый результат.

    • @LabRazum
      @LabRazum  Před 6 lety

      Так как все временные функции в Arduino пользуются одним и тем же таймером, который мы взяли для работы, то скорость выполнения не нужно замерять - она будет одинаковой.

    • @sssserya1
      @sssserya1 Před 6 lety

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

  • @reodos3
    @reodos3 Před 5 lety +1

    7:02 0,000004*256=0,001024
    И еще, пробовал игратся со значением OCR0A = 0xF9; - ставил в 2 раза меньшее значение, но при этом частота мигания не увеличилась в 2 раза, чтото я делаю не так?

    • @sergeystep3415
      @sergeystep3415 Před 4 lety

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

    • @sergeystep3415
      @sergeystep3415 Před 4 lety

      пиши просто 125

  • @user-kk5gr7zk3m
    @user-kk5gr7zk3m Před 5 lety

    Кстати, в режиме СТС, функции миллис и микрос не работают вообще, только если сравнение будет 255. Я думаю вы бы сделали сносочку в видео, что бы не вводить людей в заблуждение...

  • @kosmos8460
    @kosmos8460 Před 2 lety

    Куда вы пропали со своими уроками ?!

  • @alexandr_84
    @alexandr_84 Před 5 lety

    А какой минимальный импульс может измерить преравание ардуина 16мгц?

    • @TELEZUD
      @TELEZUD Před 4 lety

      Alexandr Buzoff 0,00000006 сек :)

  • @shiv_live
    @shiv_live Před 7 lety

    Не могу понять регистры и как с ними работать. a

    • @rainlazer7089
      @rainlazer7089 Před 7 lety

      www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf

    • @stevenmiller1684
      @stevenmiller1684 Před 7 lety +1

      cxem.net/mc/mc388.php

  • @user-rj1yy1lp8g
    @user-rj1yy1lp8g Před 7 lety +15

    0.000004*256=0.001024 (норик пропустили)

    • @Yupitrer
      @Yupitrer Před 6 lety +9

      Букву "л" пропустили )

    • @sanzhar4710
      @sanzhar4710 Před 4 lety +2

      @@Yupitrer не пропустили а заменили

    • @Steel.Needle
      @Steel.Needle Před 4 lety

      Это все заметили , просто не все заостряют на этом внимание. Автору- респект.

  • @cultofsogga5863
    @cultofsogga5863 Před 6 lety

    половину объяснил, половину читайте на паузе, половину загуглите, збс урок!

  • @user-jw5pq6jo5z
    @user-jw5pq6jo5z Před 7 lety +4

    0,01 сек- это 10 мс.))

  • @valan7192
    @valan7192 Před 5 lety

    Только непонятно: почему миллисекунда - это одна сотая секунды???

  • @UrfinJus
    @UrfinJus Před 7 lety

    непонятно, почему одна сотая секунды названа миллисекундой.(7:15). милли означает тысячную долю. ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BB%D0%BB%D0%B8-

    • @LabRazum
      @LabRazum  Před 7 lety

      Да, это просто случайно потерянный нолик, приносим извинения :)

  • @hagenh3365
    @hagenh3365 Před 4 lety

    Я правильно понял, что можно, в принципе, ничего не прописывать, раз изначально настройки и так в 1 миллисикунду ? Отвечу сам себе, да не надо, тут просто для примера видимо. Кстати sei в примере тоже не нужно, если сначала вы не запрещаете прерывания, смысл их разрешать? Проверил, всё работает и без этого.

  • @goldirus
    @goldirus Před 6 lety

    это все хорошо, но как запустить таймер из вне и остановить его после первого же его срабатывания?

    • @LabRazum
      @LabRazum  Před 6 lety

      Для запуска извне вы можете использовать, например, кнопку - просто считываете состояние порта и, если он равен, например, 0, даете команду разрешения работы таймера timerLED1ON = 1.
      Чтобы остановить таймер, достаточно подать команду timerLED1On = 0; в том месте, где происходит накопление переменной-счетчика:
      if(timerLED1On == 1) //если включен таймер
      {
      timerLED1++; //+1 к переменной счетчику
      timerLED1On = 0; //выключить таймер
      }
      Только возникает вопрос: в чем смысл работы такого таймера, если он при запуске тут же останавливается? Кстати, пока вы будете нажимать кнопку, таймер успеет включиться и выключиться несколько раз, поэтому нужно вносить временнЫе задержки.

    • @goldirus
      @goldirus Před 6 lety

      при нажатии кнопки энкодера меняеться переменная 0-1-2-0 и по кругу. если она равна 1 то надо включить подсветку (lcd.backlight();) и не нарушая работу основного цикла через 60 сек выключить ее
      Все разобрался. Оказалось и не так страшно
      Одно не понятно почему в коде не имеющем delay имеется задержка больше секунды. Видать он на столько не оптимизирован

  • @kennn1221
    @kennn1221 Před 6 lety

    Ну где же где же еще видео. И обещанная программа от дребезга контактов.

  • @arayikavalyan9185
    @arayikavalyan9185 Před 6 lety +1

    А где продолжение урока???

    • @LabRazum
      @LabRazum  Před 6 lety

      Пока только в голове :)

    • @seregansd03
      @seregansd03 Před 6 lety +1

      Очень жаль, хотелось бы увидеть продолжение.