Кто считает время в Arduino. Pro 1.0 delay() vs. millis(). lesson 12

Содержание

Слайд 2

План занятия

План занятия

Слайд 3

Кто считает время в Arduino

Мы постоянно писали delay(1000); и не задумывались откуда

Кто считает время в Arduino Мы постоянно писали delay(1000); и не задумывались
Arduino знает, что прошла 1с. Пришло время в этом разобраться и постичь силу таймеров.
Начнём с того, откуда вообще микроконтроллер знает, сколько проходит времени. Ведь у него нет часов! Для работы микроконтроллера жизненно важен так называемый тактовый генератор, или кварцевый генератор, или он же кварц.

Давайте найдем кварц на Arduino.

Слайд 4

Кто считает время в Arduino

Кварц выполняет очень простую вещь: он пинает микроконтроллер

Кто считает время в Arduino Кварц выполняет очень простую вещь: он пинает
со своей тактовой частотой, то есть 16 МГц кварц пинает МК 16 миллионов! раз в секунду. Микроконтроллер, в свою очередь зная частоту кварца, может прикинуть время между пинками (16 МГц = 0.0625 микросекунды), и таким образом ориентироваться во времени. Но на деле не всё так просто, потому что принимают пинки таймера так называемые таймеры-счётчики (Timer-counter). Это физически расположенные внутри МК устройства, которые занимаются подсчётом пинков тактового генератора. И вот микроконтроллер уже может обратиться к счётчику и спросить, а сколько там натикало. И счётчик ему расскажет. И вот этим мы уже можем пользоваться, для этого у Ардуино есть готовые функции времени.

Timer-counter

Слайд 5

Любимая функция delay();

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

Любимая функция delay(); Простейшей с точки зрения использования функцией времени является задержка,
у нас две:
delay(time) – “Приостанавливает” выполнение кода на time миллисекунд.
delayMicroseconds(time) – Аналог delay(), приостанавливает выполнение кода на time микросекунд.
Задержки использовать очень просто:

Что же делает эта программа?

Слайд 6

Забываем про delay()

Так в чем же проблема? Почему использовать delay() не рекомендуется?

Забываем про delay() Так в чем же проблема? Почему использовать delay() не
Как вы думаете?

Мы можем делать какое-то действие раз в секунду. А что делать, если нам нужно выполнять одно действие раз в секунду, а другое – три? А третье – 10 раз в секунду, например.
Если я хочу получать значение с одного датчика каждую секунду, а с другого 10 раз в секунду?

Слайд 7

Забываем про delay()

Основаня проблема в том, что при использовании функции delay() наша

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

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

Слайд 8

Функции millis() и micros()

Данные функции возвращают время, прошедшее с момента запуска микроконтроллера.

Функции millis() и micros() Данные функции возвращают время, прошедшее с момента запуска
Таких функций у нас две:
millis() – Возвращает количество миллисекунд, прошедших с запуска. Возвращает unsigned int, от 1 до 4 294 967 295 миллисекунд (~50 суток), после переполнения сбрасывается в 0.
micros() – Возвращает количество микросекунд, прошедших с запуска. Возвращает unsigned int, от 4 до 4 294 967 295 (каждые 4 микросекунды) микросекунд (~70 минут), после переполнения сбрасывается в 0.

Слайд 9

Функции millis() и micros()

Вы спросите, а как время со старта МК поможет

Функции millis() и micros() Вы спросите, а как время со старта МК
нам организовать действия по времени? Очень просто, алгоритм такой:
1) Выполнили действие
2) Запомнили текущее время со старта МК (в отдельную переменную)
3) Ищем разницу между текущим временем и запомненным
4) Как только разница больше нужного нам времени – выполняем действие и так по кругу
Пример:

Слайд 10

Задание 1:
Вывести в монитор порта время в миллисекундах, прошедшего с момента включения

Задание 1: Вывести в монитор порта время в миллисекундах, прошедшего с момента
Arduino

А в секундах?

Слайд 11

Задание 2:
Сделать мигание светодиодом 2 раза в секунду, используя функцию millis()

Задание 2: Сделать мигание светодиодом 2 раза в секунду, используя функцию millis()

Слайд 12

Задание 3:
Сделать мигание одним светодиодом 1 раз в секунду, вторым – 2

Задание 3: Сделать мигание одним светодиодом 1 раз в секунду, вторым –
раза в секунду, третьим – 5 раз в секунду
Имя файла: Кто-считает-время-в-Arduino.-Pro-1.0-delay()-vs.-millis().-lesson-12.pptx
Количество просмотров: 40
Количество скачиваний: 0