Организация прерывания по таймеру на примере Arduino UNO. Применение таймеров

Формат управляющих регистров таймера/счетчика. Программирование таймеров в плате Arduino. Необходимые соединения между платой Arduino Uno, ЖК дисплеем. Обработка прерывания переполнения счетчика. Управление двигателями до создания устройств учета времени.

Рубрика Программирование, компьютеры и кибернетика
Вид реферат
Язык русский
Дата добавления 19.03.2024
Размер файла 1,7 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Институт электроэнергетики и электроники

(полное название института)

Промышленная электроника (полное название кафедры)

РЕФЕРАТ

по дисциплине

«Микропроцессорная обработка данных в устройствах электроники» на тему «Организация прерывания по таймеру на примере Arduino UNO. Применение таймеров.»

Выполнил: студент группы ПЭм-1-22 Муратов Ильдар Ильшатович

Руководитель работы:

Ахметвалеева Ляля Вахитовна, доцент

Казань, 2023 г.

ВВЕДЕНИЕ

Платформа Arduino была первоначально спроектирована в 2005 году и первоначально предназначалась для того, чтобы люди, мало знакомые с электроникой и программированием, могли конструировать разнообразные электронные устройства. Но со временем она получила широкое распространение не только в кругах, начинающих знакомиться с электроникой, но и среди профессионалов в сфере электроники.

В отличие от языков программирования для микроконтроллеров AVR, ARM, PIC, STM, в которых нужно хорошо представлять структуру этих микроконтроллеров, язык программирования для платформы Arduino исключительно простой и понятный. Достаточно легко понять, к примеру, как работают функции digitalWrite(), AnalogWrite(), Delay() и др. не вникая в суть машинного языка, который спрятан внутри них. Также не нужно вникать в суть различных регистров микроконтроллера, которые используются для управления этими процессами.

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

В этой статье мы рассмотрим как без использования функции delay(), управлять задержками в программе, непосредственно имея дело с регистрами микроконтроллера. Для этого мы будем использовать программную среду Arduino IDE. Мы будем устанавливать соответствующие биты регистра таймера и использовать прерывание переполнения таймера (Timer Overflow Interrupt) чтобы переключать (включать/выключать) состояние светодиода каждый раз, когда происходит прерывание. Для контроля длительности задержки в схеме будут использоваться кнопки, с помощью которых можно будет изменять заранее загружаемое значение в биты таймера.

1. ЧТО ТАКОЕ ТАЙМЕРЫ?

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

Таймеры в современной электронике - определенный вид прерываний. Это простые часы, которые могут измерять длительность какого-нибудь события. Каждый микроконтроллер имеет встроенные часы (осциллятор), в плате Arduino Uno его роль выполняет кварцевый генератор, расположенный на плате, который работает на частоте 16 МГц. Частота влияет на скорость работы микроконтроллера. Чем выше частота, тем выше скорость работы. Таймер использует счетчик, который считает с определенной скоростью, зависящей от частоты осциллятора (кварцевого генератора). В плате Arduino Uno состояние счетчика увеличивается на 1 каждые 62 нано секунды (1/16000000 секунды). Фактически, это время, за которое плата Arduino Uno переходит от одной инструкции к другой (то есть выполняет одну инструкцию).

1.1 Таймеры в Arduino Uno

В стандартных платах Arduino на 8 битном AVR чипе имеется сразу несколько таймеров. У чипов Atmega168 и Atmega328 есть три таймера Timer0, Timer1 и Timer2. Они также имеют сторожевой таймер, который можно использовать для защиты от сбоев или как механизм программного сброса.

Итак, в плате Arduino Uno используется три таймера:

· Timer0: 8-битный таймер, используемый в таких функциях как delay(), millis().

· Timer1: 16-битный таймер, используемый в библиотеке для управления серводвигателями.

· Timer2: 8-битный таймер, используемый в функции tone().

1.2 Регистры таймеров в Arduino Uno

Для изменения конфигурации таймеров в плате Arduino Uno используются следующие регистры:

1) Timer/Counter Control Registers (TCCRnA/B) - управляющие регистры таймера/счетчика

Эти регистры содержат основные управляющие биты таймера и используются для управления предварительными делителями частоты (предделителями) таймера. Они также позволяют управлять режимом работы таймера с помощью битов WGM.

Рисунок 1.1 - Формат управляющих регистров таймера/счетчика

Предделитель (Prescaler)

Биты CS12, CS11, CS10 в регистре TCCR1B устанавливают коэффициент деления предделителя, то есть скорость часов таймера. В плате Arduino Uno можно установить коэффициент деления предделителя равный 1, 8, 64, 256, 1024.

Рисунок 1.2 - Предделитель (Prescaler)

2) Timer/Counter Register (TCNTn) - регистры таймера/счетчика

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

Формула для расчета заранее загружаемого значения (preloader value) для необходимого интервала времени (Time) в секундах выглядит следующим образом:

TCNTn = 65535 - (16x106xTime in sec / Prescaler Value)

Откуда берется величина 16х106? Здесь все просто - это переведенная в Герцы частота кварцевого генератора 16 МГц.

Чтобы для таймера 1 (timer1) задать время равное 2 секундам, при коэффициенте деления предделителя (Prescaler Value) равном 1024, получим:

TCNT1 = 65535 - (16x106x2 / 1024) = 34285

1.3 Прерывания таймеров в Arduino

Прерывания таймеров являются видом программных прерываний. В Arduino присутствуют следующие виды прерываний таймеров.

· Прерывания переполнения таймера (Timer Overflow Interrupt)

Это прерывание происходит всегда, когда значение счетчика достигает его максимального значения, например, для 16-битного счетчика это 65535. Соответственно, процедура обработки (обслуживания) прерывания (ISR) вызывается, когда бит прерывания переполнения таймера установлен (enabled) в TOIEx присутствующем в регистре масок прерываний TIMSKx.

ISR Format:

ISR(TIMERx_OVF_vect)

{Output Compare Register (OCRnA/B) - регистр сравнения выхода

Процедура обработки прерывания сравнения выхода (Output Compare Match Interrupt) вызывается при вызове функции TIMERx_COMPy_vect если установлен бит/флаг OCFxy в регистре TIFRx. Эта процедура обработки прерывания (ISR) становится доступной при помощи установки бита OCIExy, присутствующем в регистре маски прерываний TIMSKx.

· Захват входа таймера (Timer Input Capture)

Процедура обработки этого прерывания вызывается если установлен бит/флаг ICFx в регистре флагов прерываний таймера (TIFRx - Timer Interrupt Flag Register). Эта процедура обработки прерываний становится доступной при установке бита ICIEx в регистре маски прерываний TIMSKx.

2. ПРОГРАММИРОВАНИЕ ТАЙМЕРОВ В ПЛАТЕ ARDUINO

Необходимые компоненты:

· Плата Arduino Uno

· ЖК дисплей 16х2

· Резисторы 10 кОм (2 шт.) и 2,2 кОм

· Светодиод (любого цвета)

· Кнопка (2 шт.).

· Источник питания с напряжением 5 В.

Рисунок 2.1 - Схема устройства

Рисунок 2.2 - Необходимые соединения между платой Arduino Uno и ЖК дисплеем

Две кнопки через подтягивающие резисторы 10 кОм подключены к контактам 2 и 4 платы Arduino Uno, а светодиод подключен к контакту 7 Arduino через резистор 2,2 кОм.

Рисунок 2.3 - Собранная схема устройства

В этом проекте мы будем использовать прерывание переполнения таймера (Timer Overflow Interrupt) и использовать его для включения и выключения светодиода на определенные интервалы времени при помощи установки заранее определяемого значения (preloader value) регистра TCNT1 с помощью кнопок. Полный код программы будет приведен в конце статьи, здесь же рассмотрим его основные части:

• Для отображения заранее определяемого значения используется ЖК дисплей, поэтому необходимо подключить библиотеку для работы с ним.

• Анод светодиода подключен к контакту 7 платы Arduino, поэтому определим (инициализируем) его как ledPin.

• Затем сообщим плате Arduino к каким ее контактам подключен ЖК дисплей.

• Установим заранее определенное значение (preloader value) равное 3035 - это будет соответствовать интервалу времени в 4 секунды. Формула для расчета этого значения приведена выше в статье.

• Затем в функции void setup() установим режим работы ЖК дисплея 16х2 и высветим приветственное сообщение на нем на несколько секунд.

• Затем контакт, к которому подключен светодиод, установим в режим вывода данных, а контакты, к которым подключены кнопки - в режим ввода данных.

• После этого отключим все прерывания.

• Далее инициализируем Timer1.

• Загрузим заранее определенное значение (3035) в TCNT1.

• Затем установим коэффициент деления предделителя равный 1024 при помощи конфигурирования битов CS в регистре TCCR1B.

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

• Теперь разрешим все прерывания.

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

• В функции void loop() предварительно загружаемое значение увеличивается и уменьшается на 10 (инкрементируется и декрементируется) при помощи кнопок в схеме. Также это значение отображается на экране ЖК дисплея 16х2.

Рисунок 2.4. - Текст программы

ЗАКЛЮЧЕНИЕ

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

Использование таймеров в Arduino позволяет управлять скоростью работы программы, реализовывать задержки, синхронизировать работу нескольких модулей и устройств, а также создавать прерывания для реагирования на события во время выполнения программы.

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

Таймеры в Arduino - это мощный инструмент для управления временными задержками и точного времени выполнения программы. Они улучшают эффективность работы устройств и систем на микроконтроллерах Arduino. arduino uno таймер счетчик

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

1. Ардуино для начинающих [Электронный ресурс] URL: Программирование Ардуино дата обращения - 20.04.2023 г.

2. Банци М. Arduino для начинающих волшебников / М. Банци. - М.: Рид Групп, 2012. 128 с.

3. Блум Д. Изучаем Arduino: инструменты и методы технического волшебства / Д. Блум. - Спб: БХВ-Петербург, 2015. 336 с.

4. Данилин А. А. Измерения в радиоэлектронике: Учебное пособие / А. А. Данилин, Н. С. Лавренко. - Спб: Издательство «Лань», 2017. 408 с.

5. Ридико Л.И. DDS: Прямой цифровой синтез частоты / Л.И. Ридико // Компоненты и технологии. 2001. № 7. С. 50 - 54.

Размещено на Allbest.ru


Подобные документы

  • Рассмотрение общих правил отмеривания временных интервалов в различных режимах работы таймеров. Программное обеспечение ввода-вывода данных через параллельные порты таймера. Изучение особенностей использования системы прерываний микроконтроллера.

    лабораторная работа [73,8 K], добавлен 18.06.2015

  • Возможности платформы Arduino. Загрузка микроконтроллера прерываниями. Подтягивающие (нагрузочные) резисторы. Аналого-цифровой преобразователь, цоколевка. Прерывание по таймеру, память. Библиотеки Servo, SPI, Stepper. Комбинация фазы синхронизации.

    курсовая работа [53,4 K], добавлен 23.12.2014

  • Представление о системе Arduino. Структура платформы Android. Выбор средств разработки. Разработка структур данных и алгоритмов. Характеристика Bluetooth модуля, блок реле, резисторов, диодов. Графический интерфейс приложения. Написание кода программы.

    дипломная работа [4,0 M], добавлен 19.01.2017

  • Анализ GPS-навигаторов для животных. Использование плат и среды программирования Arduino для разработки ошейника с GPS-навигатором для отслеживания маршрута, проделанного животным, и уведомления об этом пользователя. Выбор модели микроконтроллера.

    курсовая работа [2,4 M], добавлен 18.10.2015

  • Теоретические сведения о таймерах Windows. Описание используемых WinAPI функций для измерения текущего времени, для создания виртуальных таймеров. Выключение и перезагрузка компьютера по нажатию на кнопку и по таймеру, вывод текущей даты и времени.

    курсовая работа [50,0 K], добавлен 18.05.2014

  • Подключение периферийных устройств к ЭВМ. Синхронизация выполнения программы с внешними процессами. Прерывания. Реализация механизма прерывания в х86. Прямой доступ к памяти. Шины, магистраль PCI. Процесс загрузки компьютера. Клавиатура, системный таймер.

    презентация [7,1 M], добавлен 14.12.2013

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

    курсовая работа [588,7 K], добавлен 11.08.2017

  • Основные понятия операционных систем. Синхронизация и критические области. Сигналы и взаимодействие между процессами. Управление памятью. Драйверы устройств. Особенности современных операционных систем. Центральный процессор, микросхемы часов и таймеров.

    учебное пособие [1,2 M], добавлен 24.01.2014

  • Создание динамической модели табеля учета рабочего времени. Формирование счетчика с 1901 по 2012. Формат ячеек. Условный формат для выходных дней. Проектирование динамической модели календаря с помощью именованных констант. Вычисление дат понедельников.

    курсовая работа [6,5 M], добавлен 15.02.2015

  • Проектирование механизма обработки прерываний. Контроллер прерываний Intel 82C59A. Ввод-вывод по прерыванию. Программируемый контроллер интерфейса Intel 82C55A. Роль процессора в обработке прерывания ввода-вывода. Обзор алгоритма обработки прерывания.

    контрольная работа [8,0 M], добавлен 19.05.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.