Универсальный внешний накопитель для всех iOS-устройств, совместим с PC/Mac, Android
Header Banner
8 800 100 5771 | +7 495 540 4266
c 9:00 до 24:00 пн-пт | c 10:00 до 18:00 сб
0 Comments

Содержание

Таймер на микроконтроллере atmega8


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

Компактные размеры

Видео проверки таймера

Сердцем данного таймера является очень популярный и уже не дорогой микроконтроллер Atmega8. Вы можете сказать, что для прошивки нам потребуется программатор которого нет, но это не так, для прошивки Atmega достаточно всего пять коротких 10-15 см. проводков подключенных через резисторы 150-200 Ом. напрямую к LPT порту по этой схеме.


Вот по этой причине, эти микроконтроллеры стали самыми популярными у радиолюбителей.

На этом рисунке Вы видите: Схему распиновки ножек МК для подключения и прошивки.

Пункт 1. Подготовим все необходимое для изготовления таймера.

Самые обязательные радиодетали схемы, остальное обычно можно подобрать у себя дома, самая маленькая микросхема, это часы DS1307.

Нам потребуются такие радиоэлементы:
• Микроконтроллер Atmega8
• Интегральные часы DS1307
• LCD жидкокристаллический индикатор
• Стабилизатор 7805
• Конденсатор 500-1000 Мф – 16 вольт.
• Реле или электронный ключ (в зависимости от нагрузки которая планируется подключаться).
• Резисторы сопротивлением 5,1ком – 3 шт., резистор переменный (по мануалу LCD дисплея).
• Кварц часовой 32768 Гц.
• Кнопки без фиксации – 4 шт.
• Батарейка таблетка на 3 вольта.


• Текстолит для платы.
• Небольшой трансформатор ~220в. -> ~6-12в.
• Коробка распаечная для корпуса.
+ Для программатора: резисторы 150-200 Ом. – 4 шт., разъем LPT порта (для удобства, не обязателен).

Обязательные инструменты каждого радиолюбителя:
• Паяльник для пайки микросхем, паяльник для пайки пассивных радиодеталей и проводов.
• Тестер для прозвонки дорожек и проверки радиодеталей.
• Олово, канифоль.
+ Принтер лазерный (для изготовления платы или другой способ).

Пункт 2. Приступим к изготовлению.

Таймер будем делать по этой главной схеме.


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

Лично я своем таймере применил вот такую схему БП и исполнительное устройство на транзисторе и реле.


Но вы можете захотеть в качестве исполнительного устройства применить триаки, тиристоры и симисторы, варианты таких схемных показаны ниже.


Они более компактные (без радиатора), но менее мощные, чем простое реле.

В соответствии с главной принципиальной схемой + БП + ИУ и анализом монтажных габаритов вашей коробки для корпуса, а также размеров подобранных радио элементов, проектируем форму, размер и рисунок дорожек на плате. Для этого удобно пользоваться программой Sprint Layout.

Для моего устройства получилась вот такая простая плата.


Полученный рисунок переносим с помощью специального маркера или по технологией ЛУТ (с помощью лазерного принтера и утюга) на медный слой текстолита. Если у вас принтер лазерный Brother (как у меня), то идею с ЛУТ лучше сразу забросить, по причине используемого в нем тугоплавкого тонера ~400C вместо обычных~200С, я кстати когда-то по глупости купил этот принтер именно для ЛУТ :(.
, поэтому в результате моя плата рисована маркером.
Нанесенный на медь рисунок вытравливаем в ванночке с хлорным железом или любым другим специальным раствором.

На готовую плату припаиваем детали согласно схеме, особое внимание обращаем при монтаже и пайке микросхемы часов и кварцевого элемента. Длина дорожек между ними должна быть минимальной, а лучше использовать микро кварц из наручных часов и припаять его непосредственно к ножкам МС часов. Все свободное пространство рядом с МС часов и кварца заполняем площадками корпуса (GND). Батарея необходима для поддержания часов в рабочем состоянии во время отключения от сети. Если по какой-то причине вы не стали устанавливать эту батарейку, то посадите плюсовой провод на корпус, иначе часы просто не пойдут.

Микроконтроллер прошиваем программатором или с помощью 5 проводков.

*Прошивка* multitimer100.rar [5.35 Kb] (скачиваний: 1622)

Автор прошивки специально для удобства (за что ему спасибо) и не стал изменять заводские фьюзы, что очень сильно облегчает, без заморочки, прошивку для начинающего радиолюбителя. Если МК еще не использовался, новый из магазина, то просто заливаете прошивку и все, но если уже есть изменения в фьюзах, то надо выставить их так CKSEL=0001. Все остальное просто и не нуждается в пояснении.

Пункт 3. Сборка.

Для корпуса очень удобно использовать распаечные коробки из пластмассы, они бывают разных размеров и форм.



В прорезанную ножом крышку, при помощи термоклея из пистолета, закрепляем LCD экран., прорезаем отверстия под кнопки управления и кнопку питания.


Подрезаем выступающий клей.

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

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

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

Меню состоит из трех пунктов, СLOCK -установка часов, TIMЕ – установка таймеров и RESET -сброс всех установленных таймеров.

Сначала заходим (*) в меню часов и выставляем точное время.


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

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


На видео в начале статьи можно посмотреть подробнее о меню.

Я применяю этот таймер для полива гидропоники.

Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.

Программируемый таймер для управления внешними устройствами на PIC16F628A

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

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

Microchip, 8-разрядный PIC16F628A. Пользователь может запрограммировать интервал между включениями внешнего устройства и продолжительность его работы. максимальное время паузы и включения составляет 99 часов 59 минут, то есть, фактически 100 часов.

Для управления таймером используются четыре кнопки, а для отображения информации применен стандартный ЖК индикатор на 2 строки из 16 символов, работающий на основе контроллера HD44780U от фирмы

Hitachi.
  
      
Для управления внешним устройством использовано электромагнитное реле. Обмотка реле должна быть рассчитана на напрядение 5V. Микроконтроллер управляет реле через ключ на транзисторе PN2222. Контакты реле должны быть рассчитаны на ток, потребляемый управляемым устройством. Кнопки управления подключены к портам микроконтроллера RB0, RA2, RA3 и RA4.

Дисплей работает в четырехбитном режиме и для его управления требуется 6 портов микроконтроллера. Для звуковой сигнализации включения и отключения нагрузки использован пьезокерамический звонок. Звуковой сигнал также подается и при включении питания таймера.

Блок питания таймера содержит стабилизатор напряжения +5V на микросхеме –  регуляторе LM7805. Для питания таймера от сети 220 вольт можно использовать любой нестабилизированный сетевой адаптер, купленный на китайском рынке. Выходное напряжение адаптера может быть в переделах 9 – 14 вольт.
  

   
Если мы внимательно посмотрим на схему устройства, то заметим, что выводы индикатора с номерами 15 и 16 не используются. они подключаются только в индикаторах с фоновой подсветкой. если вы хотите использовать индикатор с подсветкой, то подключите ее к +5B через резистор сопротивлением 39 Ом.
   

Кнопка Start/Stop. При нажатии на эту кнопку таймер запускается или останавливается.  При первом нажатии начинается отсчет времени выключенного состояния. Потом таймер включает внешнее устройство и начинает отсчет времени во включенном состоянии.

Кнопка On/Off Timeпозволяет запрограммировать таймер, установив время выключенного и включенного состояний внешнего устройства.

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

Кнопка Enter служит для подтверждения установленного значения.
  

Основные компоненты для сборки таймера можно недорого купить в Китае по следующим ссылкам:
   

Программируемый таймер на микроконтроллере | Компьютер и жизнь

Приветствую, друзья.

Хочу представить вам мою конструкцию программируемого таймера.

Данный таймер предназначен для отсчета заданных промежутков времени.

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

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

Характеристики таймера

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

Таким образом, минимальный промежуток времени может быть равным 1 секунде, максимальный – 4 часам и 15 минутам.

Отсчет времени начинается после нажатия кнопки старта (кнопку надо нажимать менее двух секунд).

Блок-схема программы таймера изображена на рис. 1.

Все константы – время включения, время паузы, количество рабочих циклов, величина кванта времени, режим работы также хранятся в энергонезависимой памяти, и могут быть изменены в любую сторону (перепрограммированы) посредством DIP-переключателей и отдельной кнопки программирования.

Для удобства таймер оснащен световой и звуковой сигнализацией.

Питаться таймер может как от сетевого адаптера с выходным постоянным напряжением 15-20 В, так и от аккумулятора напряжением 12 В.

Описание работы схемы таймера

Схема устройства изображена ниже. Его основа – микроконтроллер ATMega8L.

В качестве источника тактового сигнала используется внутренний RC-генератор микроконтроллера частотой 1 МГц. Для повышения точности отсчета временных интервалов используется синхронизация внутреннего таймера-счетчика Т/С2, (далее – таймера Т2) микроконтроллера от внешнего кварцевого резонатора BQ1 на частоту 32768 Гц. При коэффициенте деления 128 8-разрядный таймер Т2 переполняется каждую секунду, генерируя прерывание.

Исполнительным устройством служит реле К1, которое управляется посредством ключа на транзисторе VT1 с вывода РС5 микроконтроллера. Его контакты выведены на внешние клеммы разъема X2 и могут быть использованы для управления внешними цепями, в том числе и сетевым напряжением 220 В.

Звуковые сигналы подает пьезокерамический излучатель BQ2 (со встроенным звуковым генератором), который управляется выводом  РС4 микроконтроллера. Питание на микроконтроллер (+5 В) подается с выхода интегрального стабилизатора DA1. Напряжение на вход DA1 подается либо с выхода интегрального стабилизатора DA2 (+12 В), либо с аккумулятора, выбор осуществляется с помощью перемычки J1.

Светодиод HL1 зеленого цвета индицирует наличие питающего напряжения. Светодиод HL2 красного цвета служит для индикации режима работы и количества включений реле в предыдущем цикле работы. При срабатывании реле (на время включения) светодиод HL2 загорается на 1,5 с и на 0,25 с гаснет, если реле обесточено (время паузы) светодиод загорается на 0,25 с и на 1,5 с гаснет. После окончания отсчета времени светодиод HL2 гаснет. Таким образом, по характеру свечения HL2 видно, в каком состоянии находится таймер.

Конденсаторы С2 – С6 блокировочные. Диоды VD2, VD3 служат защитой от ошибочной полярности источников напряжения, диод VD1 – защита от ЭДС самоиндукции, возникающей при коммутации реле.

Движковые DIP-переключатели SA1 — SA8 служат для задания величины времени включения, времени паузы и количества рабочих циклов. Такие же переключатели SB1 – SB4 служат для выбора программируемой величины — времени включения, времени паузы, режима работы, количества рабочих циклов  и величины кванта времени. Соответствие переключателей программируемой величине приведено в табл. 1.

Задавать время включения/паузы и количества рабочих циклов надо в двоичном виде, что является некоторым неудобством. Но для перевода десятичных величин в двоичные можно использовать калькулятор, встроенный в Windows. При программировании следует помнить, что нулю двоичной величины соответствует положение ON переключателей, единице – положение OFF. Программирование производится с помощью кнопки программирования S1. Старт таймера осуществляется посредством стартовой кнопки S2.

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

В процессе отсчета времени программирование невозможно. Если начался отсчет времени, таймер нечувствителен к нажатию кнопок и изменению положения DIP-переключателей. Таймер остановится после окончания отсчета времени или исчезновении напряжения питания.

Звуковая сигнализация таймера

Звуковая индикация таймера работает следующим образом. При нажатии на кнопку старта в течение менее 2 с (переход в рабочий режим) раздается короткий звуковой сигнал длительностью 0,1 с, свидетельствующий о начале отсчета времени. Если используется ограниченно-циклический режим, то сразу по окончании отсчета времени раздается звуковой сигнал длительностью 2 с. Если кнопка старта нажата более 2 с, раздается 5 звуковых сигналов длительностью 0,1 с  — и таймер возвращается в исходный режим.

При программировании таймера процедура успешного программирования необходимой величины сопровождается двумя сигналами по 0,1 с. Если произошла ошибка (например, ошибочно задан нулевой интервал времени включения, чего быть не должно) раздается звуковой сигнал длительностью 1 с. При ошибке надо проверить положение DIP-переключателей SB1 – SB4.

При программировании микроконтроллера должны быть запрограммированы следующие фьюзы — SUT0, SUT1, CKSEL1, CKSEL2, CKSEL3, BODEN, BODLEVEL. Так как производится запись в энергонезависимую память (данные в которой могут искажаться при медленном снижении напряжения питания), то используется встроенная схема BOD (Brown-Out Detection) микроконтроллера, которая отслеживает питающее напряжение и производит сброс микроконтроллера при снижении его ниже 4 В.

Конструкция таймера

Конструктивно таймер собран на плате из фольгированного стеклотекстолита толщиной 1,5 мм размерами 83×52 мм. Топология печатной платы изображена на рис. 3, расположение деталей на ней – на рис. 4. В исходном состоянии в EEPROM запрограммированы следующие значения констант: время включения – 10 с, время паузы – 10 с, количество циклов включения – 3, квант времени – одна секунда, режим работы – циклически-ограниченный.

Транзистор VT1 можно заменить на КТ3102 с любым буквенным индексом или аналогичным. В качестве светодиодов можно использовать любые современные высокоэффективные светодиоды с заметным свечением при токе 2-3 мА. Реле К1 – постоянного тока, типа JZC-22F, но можно использовать и другое с катушкой на 12 В, подходящее по току контактов и типоразмеру.

Программирование таймера

Рассмотрим примеры перепрограммирования таймера. Отметим, что при программировании следует учитывать внутреннюю логику встроенной в микроконтроллер программы. Рабочий цикл – это время включения плюс время паузы. Количество рабочих циклов может быть и нулевым – это означает, что реле включается однократно на время включения. Таким образом, чтобы включить реле N раз, надо задать N – 1 рабочих циклов, соответственно, если задать N рабочих циклов, реле включится N + 1 раз.

Пример 1. Время включения – 10 сек, время выключения – 8 сек, режим работы – циклически-ограниченный, количество рабочих циклов — 5.

Для начала запишем все числа в двоичном виде: число 10 – это 00001010, 8 – 00001000, 5 – 00000101. Включаем таймер, ставим переключатель SB3 – ON (квант времени – секунда), SB4 — ON (циклически-ограниченный режим), SB2/SB1 – ON/OFF (время включения), на переключателях SA1 – SA8 набираем число 00001010 (SA2, SA4 – OFF, все остальные – ON) и нажимаем кнопку программирования. Слышим два коротких сигнала.

Далее ставим SB2/SB1 – OFF/ON (время паузы), набираем на SA1 – SA8 число 00001000 (SA4 – OFF, остальные – ON), вновь нажимаем кнопку программирования, вновь слышим два коротких сигнала. Теперь ставим SB2/SB1 – OFF/OFF (количество рабочих циклов), набираем на SA1 – SA8 число 00000101 (SA1, SA3 – OFF, остальные – ON), вновь нажимаем кнопку программирования, слышим два коротких сигнала. Выключаем и вновь включаем питание – и таймер с новыми значениями констант готов к работе.

Пример 2. Время включения – 4 сек, время выключения – 3 сек, режим работы – циклически-непрерывный.

Число 4 – 00000100, число 3 – 00000011. Включаем таймер, ставим SB3 –ON (квант времени – секунда), SB4 – OFF (циклически-непрерывный режим), SB2/SB1 – ON/OFF (время включения), на переключателях SA1 – SA8 набираем число 00000100 (SA3 – OFF, все остальные — ON), нажимаем кнопку программирования, слышим два сигнала. Далее ставим SB2/SB1 – OFF/ON ( время паузы), набираем на SA1 – SA8 число 00000011 (SA1, SA2 – OFF, остальные – ON), нажимаем кнопку программирования, слышим два коротких сигнала. Выключаем и вновь включаем питания – и таймер с новыми значениями констант готов к работе.

Пример 3. Время включения – 20 мин однократно.

Число 20 – 00010100. Включаем таймер, ставим SB3 – OFF (квант времени — минута), SB4 – ON (циклически ограниченный режим), SB2/SB1 – ON/OFF (время включения), на переключателях SA1 – SA8 набираем 00010100 (SA3, SA5 – OFF, остальные – ON), нажимаем кнопку программирования, слышим два коротких сигнала. Ставим SB2/SB1 – OFF/OFF (количество рабочих циклов), набираем на SA1 – SA8 число 00000000 (все переключатели – ON), нажимаем кнопку программирования, слышим два коротких сигнала. Выключаем и вновь включаем питание – таймер с новыми значениями констант готов к работе.

Архив с описанием, топологией платы, программой и прошивкой можно скачать здесь.

До встречи на блоге!


Таймер

Устройство, отмеряющее заданный временной интервал с момента запуска.

Таймер присутствия на PIC16F628A

Таймер присутствия каждый день на определенное время включает свет, создавая эффект присутствия. А также часы с резервным питанием.

Автор: VIG

4 0
[0] 2010 г.

Кухонный таймер

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

Автор: Гаркуша А.

7 0
[0]
Похожие статьи: 2011 г.

Программируемый цифровой коммутирующий таймер

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

Автор: Колтыков А.В.

11 0
[0] 2012 г.

Цифровой таймер для освещения

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

Автор: [email protected]

20 0
[0]
Похожие статьи: 2012 г.

Кухонный 4х таймер

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

Автор: Прокопьев Д.П.

0 0
[0]
Похожие статьи:

Таймер на PIC для управления электроприборами

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

Автор: сергей1012

13 5
[1]
Похожие статьи:

Схема таймера на микроконтроллере ATtiny2313

Подробности
Категория: Микроконтроллеры
Опубликовано 07.04.2016 12:35
Автор: Admin
Просмотров: 2616

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

Схема таймера на микроконтроллере ATtiny2313

Схема таймера выполнена на микроконтроллере ATtiny2313 который имеет 20 выводов. Развязка силовой часть от управляющей осуществляется через оптореле А1. Схема имеет также звуковую сигнализацию, пьезоэлектрический пассивный звукоизлучатель подключен к выводам 3 и 6.

Установка требуемого значения времени осуществляться при помощи трех кнопок, S1,S2,S3. Две из них необходимы для установки времени, это кнопки S1 и S2 а другая для запуска таймера, это кнопка S3. После того вы выставили время и нажали запуск срабатывает реле и включается нагрузка. После того как значение времени достигнет нулевого значения нагрузка выключится.

Для питании схемы таймера на микроконтроллере необходим источник в 5 В, который подключается к штекеру X4. Штекер X3 – розетка под нагрузку. Программатор подключатся к разъему X1.

Микроконтроллер затактирован от кварцевого резонатора с частотой в 4 МГц. В качестве табло выступает трехразрядный индикатор с общим катодом, тут используется динамическая индикация. Переключение каждого семисегментного индикатора осуществляется при помощи 3-х транзисторов VT1-VT3. Сопротивление R2-R9 необходимы для ограничения протекающего тока через семисегментный индикаторы.

Прошивка для таймера на микроконтроллере – скачать (1,5 Кб). Необходимые фьюзы отмечены галочками SPIEN, BODLEVEL2, BODLEVEL1, SUTO, CKSEL1

  • < Назад
  • Вперёд >
Добавить комментарий

Микроконтроллеры и Технологии – Двухканальный циклический таймер на Atmega8

Автор: AntonChip. Дата публикации: .

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

Возможности устройства

– 2 канала;
– Максимальная установка Таймера 1, 2 и паузы по времени – 99 минут 59 секунд;
– Максимальное количество циклов – 99
– Управление подсветкой дисплея через меню;
– Сохранение настроек в памяти микроконтроллера.

Схема таймера

Таймер построен на базе микроконтроллера Atmega8. Для более точного отсчета времени тактирование осуществляется от внешнего кварца на 8МГц. Дисплей на базе контроллера HD44780 или его аналога, 16 символов, 2 строки. Настройка осуществляется с помощью 4-х кнопок: “Меню/Вперед”, “Назад”, “+”, “-“. Если в режиме меню кнопки не нажимались в течение 30 секунд, таймер автоматически переходит в ждущий режим без сохранения настроек. Каждое нажатие кнопки подтверждается сигналом зуммера, зуммер применен обычный без встроенного генератора. Запускается таймер при помощи кнопки “Старт”, останавливается при нажатии на кнопку “Стоп”.

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

 

Настройка таймера

Для входа в меню нажмите кнопку “Меню/Вперед”, далее необходимо настроить параметры Таймера 1, кнопками “+” или “-” вводим необходимое значение для минут, причем разряд минут мигает раз в 1 секунду, снова нажимаем кнопку “Меню/Вперед”, вводим необходимое значение для секунд, причем разряд секунд мигает раз в 1 секунду. Таким же способом настраиваются Таймер 2 и Пауза 1 и 2, т.е. кнопками “Меню/Вперед” и “Назад” можно перемещаться по меню, а кнопками “+” или “-” вводить необходимые значения.

Чтобы сохранить настройки в параметре “Save Settings?” нажмите “Yes”.

Смотрите также версию таймера на ATmega328.

Внимание.

Если количество циклов равно нулю, цикл будет повторяться до бесконечности пока не будет нажата кнопка “Стоп”.

Если время таймера 1 или таймера 2 равно нулю, то пауза следующая за соответствующим таймером будет пропускаться.

Установка фьюз-битов

Видео работы таймера


Архив для статьи “Двухканальный циклический таймер на Atmega8”
Описание: Файлы прошивки и EEPROM микроконтроллера, проект Proteus
Размер файла: 19.56 KB Количество загрузок: 2 003 Скачать

Схема таймера на микроконтроллере ATINY2313 для тепловых пушек

Рассмотрена принципиальная схема реле времени для управления тепловыми пушками, она выполнена на базе микроконтроллера AVR. Описан принцип работы схемыреле времени, алгоритм его работы, а также рассмотрен программный код для микроконтроллера.

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

То есть после выключения электронагревателя производится его обдув, до тех пор пока температура на выходе тепловой пушки не достигнет, например, комнатной (если тепловая пушка эксплуатируется в помещении с комнатной температурой). Понятно, что требуемая задержка по времени при выключении вентилятора зависит от технических характеристик тепловой пушки (мощность, производительность, габаритные размеры и т. д.). Предлагаемый вариант реле времени реализует задержку от 1 до 999 секунд. Устройство имеет следующие функции:

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

Принципиальная схема

Принципиальная схема реле времени для управления тепловых пушек на базе микроконтроллера ATINY2313 представлена на рис. 1.

Канал управления нагревателем (канал управления № 1) собран на твердотельном реле VS1. Данный канал управляется с вывода 8 микроконтроллера DD1. Канал управления вентилятором (канал управления № 2) собран на твердотельном реле VS2. Канал управляется с вывода 9 микроконтроллера DD1.

Включение / выключение тепловой пушки осуществляется кнопкой S3 (С). Дистанционно устройство управляется кнопкой S4. Данная кнопка по схеме (рис. 1) для наглядности подключается через соединитель X3 (контакты 1, 2) и подключает вывод 11 микроконтроллера DD1 к общему проводнику.

В интерфейс реле времени входят клавиатура (кнопки S1…S3), и блок индикации (дисплей) из трех цифровых семисегментных индикаторах HG1…HG3. Кнопки клавиатуры имеют следующее назначение:

  • S1 ( А ) – увеличение на единицу значения при установки времени в секундах), при удержании данной кнопки в нажатом состоянии более 3 секунд, значение времени индицируемое на дисплее увеличивается на 5 единиц за 1 секунду;
  • S2 ( V ) – уменьшение на единицу значения каждого при установки времени в секундах, соответственно при удержании данной кнопки в нажатом состоянии более 3 секунд, значение времени индицируемое на дисплее уменьшается на 5 единиц за 1 секунду;
  • S3 ( С ) – кнопка включения/выключения реле времени (алгоритм работы в рабочем цикле приведен ниже).
  • S4 – внешняя кнопка (по отношению к реле времени) дистанционного управления, по функциональному назначению данная кнопка аналогична кнопке S3.

Разряды индикации интерфейса имеют следующее назначение:

  • 1 разряд (индикатор HG3) отображает “единицы секунд”;
  • 2 разряд (индикатор HG2) отображает “десятки секунд”;
  • 3 разряд (индикатор HG1) отображает “сотни секунд”.

Сразу после подачи питания на выводе 1 микроконтроллера DD1 через RC-цепь (резистор R2, конденсатор Сб) формируется сигнал системного аппаратного сброса микроконтроллера DD1.

В микроконтроллере инициализируются регистры, счетчики, стек, таймер T/C1, сторожевой таймер, порты ввода/вывода, на дисплее индицируется число 001, Временные диаграммы, поясняющие алгоритм работы приведены на рис. 2

Рис. 1. Принципиальная схема таймера (реле времени) для управления тепловой пушкой.

Алгоритм работы реле времени в рабочем цикле следующий. После инициализации на выводах 8, 9 микроконтроллера устанавливаются сигналы уровня лог.1 (каналы № 1 и №2 отключены). Далее кнопками SI, S2 необходимо задать временную задержку на выключение АТ канала № 2, заданное значение индицируется на дисплее.

При включении реле времени кнопкой S3 в момент времени tl, сразу включается каналы управления № 1 и № 2 (устанавливается лог. 0 на выводах 8 и 9 микроконтроллера DD1). То есть электронагреватель вентилятор в тепловой пушке включаются одновременно.

При выключении реле времени кнопкой S3 в момент времени t2, сразу выключается канал управления № 1 (устанавливается лог. 1 на выводе 8 микроконтроллера DD1), на дисплее индицируется временная задержка АТ. Заданное время АТ декрементируется с каждой секундой. И как только оно станет равным нулю, выключается канал управления № 2 (устанавливается лог. 1 на выводе 9 микроконтроллера DD1). На дисплее снова индицируется заданное значение АТ. Цикл завершен.

АТ задается в диапазоне от 1 до 999 с, с дискретностью задания 1 секунда.

С порта РВ микроконтроллер DD1 управляет клавиатурой (кнопки S1…S3) и динамической индикацией. Динамическая индикация собрана на транзисторах VT1…VT3, цифровых семисегментных индикаторах HG1…HG3. Резисторы R3…R10 – токоограничительные для сегментов индикаторов HG1…HG3.

Коды для включения индикаторов HG1…HG3 при функционировании динамической индикации поступают на вход РВ микроконтроллера DD1. Для функционирования клавиатуры задействован вывод 7 микроконтроллера DD1. Рабочая частота микроконтроллера DD1 задается генератором с внешним резонатором ZQ1 на 10 МГц.

При инициализации микроконтроллера DD1 все выводы порта В сконфигурированы как выходы. Выводы PD3, PD6 порта D сконфигурированы как входы, остальные как выходы. Как видно из принципиальной схемы аппаратная часть микроконтроллера DD1 задействована полностью.

Рис. 2. Временные диаграммы, поясняющие алгоритм работы.

Для перевода устройства в рабочий режим необходимо кнопками S1 ( Д ), S2 ( v ) установить необходимый интервал времени ДТ. Для включения устройства как указывалось выше необходимо нажать на кнопку S3 (С) или кнопку S4. Установленное время при этом заносится в ОЗУ микроконтроллера DD1. Если необходимо изменить заданное время, то для этого необходимо нажать на кнопку S3 (С). Потом кнопками S1 ( Д ), S2 ( v ) установить необходимый интервал времени ДТ и снова нажать на кнопку S3 (С).

Совсем коротко о программе. Программа состоит из трех основных частей; инициализации, основной программы, работающей в замкнутом цикле и подпрограммы обработки прерывания от таймера Т/C1 (соответственно метки INIT, SE1, ТІМ0). В основной программе происходит инкремент, декремент заданного значения времени и запись заданного интервала времени ДТ из буфера хранения в буфер отображения.

В памяти данных микроконтроллера с адреса $060 по $062 организован буфер отображения для динамической индикации. С адреса $064 по $66, организован буфер для хранения заданного интервала времени ДТ. В подпрограмме обработки прерывания осуществляется счет одной секунды, опрос клавиатуры, включение световых и звуковых сигналов и перекодировка двоичного числа значений времени в код для отображения информации на семисегментнных индикаторах.

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

Задача по формирование временных интервалов длительностью 1 с, решена с помощью прерываний от таймера Т/Cl, и счетчика на регистре R25. Счетчик на регистре R21 формирует интервал в одну минуту. Таймер Т/C1 формирует запрос на прерывание через каждые ~ 3900 мкс.

Счетчики на данных регистрах, подсчитывают количество прерываний и через каждую минуту, устанавливается флаг (PUSK), и текущее время декрементируется. Через каждые « 3900 мкс происходит отображения разрядов в динамической индикации устройства. Назначение флагов в регистрах flo и flo1 приведено в программе.

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

Если кнопка удерживается более 3 секунд, значение времени, индицируемое на дисплее увеличивается на 5 единиц за 1 секунду. (То есть, максимальное значение индицируемое на дисплее – 999 можно задать через я 200 секунд). Интервал времени в течении которого происходит увеличение времени организован на регистре R0. При отпускании кнопки 51 все вышеуказанные счетчики обнуляются. Совершенно аналогичным образом организована работа кнопки S2 для быстрого уменьшения текущего значения времени, индицируемого на дисплее.

При нажатии на кнопку S2 текущее значение времени на дисплее уменьшается на единицу. Если кнопка удерживается более 3 секунд, значение времени, индицируемое на дисплее уменьшается на 5 единиц за 1 секунду. Счетчики приведенного алгоритма для кнопки 52 организованы соответственно на регистрах R3 и R2. Кнопки 53 и S4 имеют одинаковое функциональное назначение в устройстве, но аппаратно-программная реализация механизма функционирования данных кнопок – разная.

Далее приведены фрагменты программ для кнопок S3 и S4.

Рис. 3. Фрагменты программ микроконтроллера для кнопок S3 и S4.

Разработанная программа на ассемблере занимает порядка 0,7 Кбайт памяти программ микроконтроллера. Для получения питающего напряжение +5В в устройстве задействован AC/DC преобразователь U1. Потребление тока по каналу напряжения:+5 В, не более 500 мА. В принципиальной схеме (рис.

1) применены следующие элементы. Конденсаторы С1, C3 типа К15-5 – ЗкВ, конденсатор С2 типа К73-11. Конденсаторы С4…С6 типа К10-17а. В схеме применены резисторы типа С2-ЗЗН-0.125. Индикаторы HG1…HG3 зеленого цвета типа HDSP-F501. Максимальный ток нагрузки для твердотельных реле D2425 (позиционные обозначения в принципиальной схеме VS1, VS2) – 25А.

Данный ток определяет мощность, подключаемых к устройству электронагревателя и вентилятора.

Шишкин С.

Литература: А. В. Белов Создаем устройства на микроконтроллерах.

Введение в таймеры микроконтроллеров: периодические таймеры

Эта статья является первой в серии, посвященной функциям «таймер / счетчик» в микроконтроллерах. Основное внимание уделяется не конкретному семейству микроконтроллеров, а описанию функций таймера в целом. Я начну с рассмотрения общих черт с большинством типов таймеров. Затем я перехожу к периодическому таймеру и к тому, как его можно использовать. Я подробно описываю таймер SysTick в качестве примера. В следующих статьях рассматриваются другие распространенные таймеры.

Общие характеристики

Давайте начнем с общих черт многих таймеров.


Каждому таймеру нужен источник тактового сигнала или развертка. Часто существует несколько возможных источников синхронизации, и один из них выбирается с помощью переключателя или мультиплексора. Иногда можно использовать внешний источник синхронизации. Чтобы увеличить диапазон счета, выбранные часы поступают на «предварительный делитель», который делит часы, прежде чем они перейдут на основной счетчик. Коэффициент деления предварительного делителя обычно ограничен степенью 2. Например, от 2 0 до 2 7 можно выбрать 1, 2, 4, 8, 16, 32, 64 или 128.Некоторые предделители доходят до 2 16 или 65 536. Выходной сигнал предварительного делителя поступает на главный счетчик, который часто имеет ширину 16 бит и ведет счет в диапазоне от 0 до 65 535. Иногда два 16-битных счетчика могут быть объединены в 32-битный счетчик, но большинство функций синхронизации возможно с предварительным делителем и 16-битным основным счетчиком. Диапазон счета основного счетчика устанавливается значением «модуля» ( M ), хранящимся в регистре. Вот типичная последовательность подсчета с M = 999. Это обратный счетчик, который перезагружает значение модуля на следующих часах после того, как оно достигнет 0.

   999  ( M  = 999)

   998 

   997 

  .

  .

    2 

   1 

   0  (перезагрузите  M , когда счетчик достигнет 0)

    999 

    998 

  .

  .

 

Обратите внимание, что количество состояний счета равно M + 1 или 1000 из-за состояния «0». Обязательно проверьте характеристики модульной нагрузки таймера.

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

Начальная конфигурация часто включает:

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

Опрос и прерывания

Основная программа и таймер являются асинхронными, что означает, что таймер работает независимо от выполнения программы. Программа может опрашивать таймер, чтобы получить информацию о таймере. Опрос – это периодическое считывание регистров состояния для обнаружения событий таймера или текущего значения счетчика. Этот тип координации может потребовать много времени обработки или время отклика может сильно варьироваться в зависимости от сложной программы.Решение этих проблем – использование прерываний. Вот диаграмма, показывающая типичный поток программы с использованием периодического прерывания.


«Основная» – это обычная программа, работающая на процессоре. Происходит событие таймера и запускает прерывание. Например, прерывание происходит, когда таймер обратного отсчета достигает 0 и перезагружает модуль в основном счетчике. Таймер отправляет аппаратный сигнал на «контроллер прерывания», который приостанавливает выполнение основной программы и заставляет процессор перейти к программной функции, называемой «подпрограммой обслуживания прерывания» или ISR.ISR иногда называют «обработчиком прерывания» или «обработчиком исключений». Когда ISR завершена, основная программа возобновляется. Обратите внимание, как основная программа не тратит время на проверку события таймера. Ответ на событие таймера может быть очень быстрым и предсказуемым.

Разработчики, только начинающие работу с микроконтроллерами, иногда избегают прерываний, потому что они кажутся сложными. Однако таймеры и прерывания действительно хорошо работают вместе. Кроме того, таймер может быть отличным способом изучения прерываний, поскольку все находится внутри микроконтроллера и видно с помощью отладчика.Никаких внешних подключений или оборудования не требуется. Начните с простого «периодического таймера», описанного ниже. Заставьте его работать без перебоев. Затем настройте контроллер прерываний и включите прерывание в таймере.

ISR может быть очень простым. Для начала достаточно чего-то вроде этого «псевдокода». Реальный пример чрезвычайно короткой ISR приведен далее в статье.

/ * Псевдокод ISR простого таймера * /


    -Объявление глобальной переменной с именем timerTicks;


/ * Это процедура обслуживания прерывания таймера * /

timerISR {

    -Очистить флаг прерывания в таймере

    -Добавить 1 в timerTicks

    -Возвращаться

}; 

Периодические таймеры

Периодический таймер отлично подходит для изучения таймеров.Они относительно просты, и их несложно наблюдать с помощью отладчика. Периодические таймеры создают повторяющиеся маркеры или «отметки» с фиксированным периодом, как показано здесь. Главный параметр – это период, который задается с помощью счетчика модуля.


«A» вызывает периодическое выполнение действия «B» под строгим контролем таймера. Некоторые примеры:

  • Управление опросом цифровых входов, таких как кнопки
  • Планирование задач операционной системой реального времени (RTOS)
  • Точная синхронизация DMA-передач на цифро-аналоговый преобразователь
  • Запуск аналого-цифрового преобразователя для точной частоты дискретизации

Запуск аналого-цифрового преобразователя – интересный случай.Рассмотрим цепочку действий, показанную на этой диаграмме.

Периодический таймер запускает процесс, запуская аналого-цифровое преобразование аналогового сигнала. Когда преобразование завершено, аналого-цифровой преобразователь сообщает контроллеру DMA (Direct Memory Access), чтобы он переместил результат в память. Затем все ждет следующего триггера от периодического таймера. Когда необходимый объем данных получен, контроллер прямого доступа к памяти сообщает об этом основной программе.Важной частью этого сбора данных является точная стимуляция с помощью периодического таймера без неопределенности времени со стороны программного обеспечения. Кроме того, программное обеспечение совершенно бесплатно, чтобы делать что-то еще. С некоторыми микроконтроллерами с низким энергопотреблением процессор, АЦП и DMA могут даже переходить в спящий режим и экономить энергию, ожидая своей очереди в процессе.

Задержка

Функции задержки вызывают что-то происходящее по истечении определенного периода времени. На диаграмме показано, как «A» сбрасывает таймер на 0 и запускает задержку в три тика до того, как произойдет «B».

Пример задержки – дергание кнопки. Первоначальное нажатие кнопки обнаруживается путем опроса входа или прерывания. Затем «А» запускает задержку, чтобы дождаться завершения любого механического отскока кнопки. По истечении задержки выборка кнопки снова выполняется в «B». Если кнопка все еще активна, обнаруживается правильное нажатие кнопки. Использование таймера для задержки позволяет процессору делать другие вещи во время устранения дребезга, а задержка является точной и повторяемой.

Подробное описание простого периодического таймера

Я хочу проиллюстрировать один периодический таймер более подробно. Самый простой из известных мне – «Таймер SysTick» или просто SysTick. Таймер SysTick – это опция, включенная в некоторые процессоры ARM, которые используются в качестве ядра многих 32-разрядных микроконтроллеров. Вот схема таймера SysTick.

Опять же, для простоты я не раскрываю много деталей. Выбор часов – это часы процессора или дополнительные часы, выбранные разработчиками микроконтроллеров. В микроконтроллере, который я использую в настоящее время, эти часы – это тактовая частота процессора, деленная на 16. Счетчик имеет ширину 24 бита и ведет отсчет от значения модуля, которое перезагружается, когда счетчик достигает 0. Последовательность счета такая же, как показано ранее. Значение счетчика можно считать «на лету» из регистра «текущего значения». Когда счетчик достигает 0, таймер может запросить прерывание. Это примерно так же просто, как и для периодического таймера.

Вот короткая процедура для инициализации таймера SysTick на период в 1 миллисекунду с использованием тактовой частоты процессора 48 МГц.Требуется только запись в три регистра SysTick.

void init_sysTick (void) {


     SYST_RVR = 47999; // Загружаем модуль подсчета или «значение перезагрузки».

     SYST_CVR = 0; // Записываем 0 в регистр «текущее значение»

                       // инициализировать счетчик

     SYST_CSR = 0x7; // Запись в регистр управления и статуса

                       // для выбора тактовой частоты процессора,

                       // разрешаем прерывания и начинаем отсчет

}

 

Почему модуль 47 999, а не 48 000? Запомните дополнительный счетчик, чтобы счетчик перешел в 0.

SysTick и другие периодические таймеры часто расширяются за счет совместной работы с программным обеспечением. Распространенный метод точного отсчета времени для длительных периодов – наличие программной переменной, которая увеличивается с каждым прерыванием от таймера. Эту переменную часто называют «тиковым счетчиком». Вот пример подпрограммы обслуживания прерывания или «обработчика исключений», увеличивающего переменную с именем «sysTicks», чтобы вести текущий счет количества прошедших периодов таймера SysTick.

void SysTick_Handler (void) {

         extern uint32_t sysTicks;

         sysTicks ++;

}

 

Обратите внимание, что для таймера SysTick не требуется даже сбрасывать флаг прерывания! Если sysTicks (переменная, а не таймер) составляет 32 бита, максимальный период увеличивается до 47 лет.На практике таймер SysTick обычно устанавливается на удобную единицу времени, например 1 или 10 миллисекунд. Затем с помощью программного обеспечения создается дополнительный временной интервал, использующий этот период в качестве временной основы. Типичный пример – использование SysTick в качестве пульса операционной системы реального времени для переключения задач и предоставления других услуг.

Бонусный совет

Высокоскоростной таймер, такой как SysTick, работающий на частоте 48 МГц, – отличный способ измерить время выполнения критического кода с высоким разрешением.Для 48 МГц разрешение по времени составляет ± 21 наносекунду. Инициализируйте и запустите таймер в начале критического участка. В конце раздела прочтите счетчик SysTick.

Чтобы получить время выполнения участка кода, вычтите значение счетчика из модуля (начальный счет) и умножьте эту разницу на период тактовой частоты процессора. Интересно увидеть эффект изменений, которые вы вносите в код, или эффект включения различных уровней оптимизации в компиляторе.

Что дальше

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

Микроконтроллеры

– Руководство для новичков – Таймеры и счетчики

Микроконтроллер

– Руководство для начинающих – Базовое и стандартное использование таймера и счетчика и часов микроконтроллера

Таймеры и счетчики настолько важны, что вы найдете множество примеров повсюду. эту серию руководств.Как следует из названия, таймеры могут показывать время и считать. Подсчет а время позволяет делать действительно крутые вещи, например регулировать яркость Светодиоды, управляющие углом сервопривода, принимают данные датчиков, которые передают в PWM (широтно-импульсная модуляция – подробнее об этом в другом руководстве), делая таймер (как на плите), или просто добавив переменную времени в свой микроконтроллер проект.

Но сначала важно знать, что внутри (или снаружи) микроконтроллеров AVR есть часы. Фактически, все микроконтроллеры имеют в себе часы (или используют тот, который находится вне микроконтроллера). Микроконтроллерам нужны часы, чтобы наши программы могли выполняться в ритме с часами. Это основная функция микроконтроллеров. Базовая инструкция обрабатывается, когда проходит тиканье часов. Так же, как эти программы, которые мы пишем, по мере прохождения часов, инструкции обрабатываются синхронно с тактами часов.

Функции таймера и счетчика в микроконтроллере просто отсчитывают синхронно с часами микроконтроллера. Однако счетчик может считать только до 256 (8-битный счетчик) или 65535 (16-битный счетчик). Это далеко от 1000000 тиков в секунду, которые обеспечивает стандартный микроконтроллер AVR. Микроконтроллер предоставляет очень полезную функцию, называемую предварительным масштабированием. Предварительное масштабирование – это просто способ счетчика пропустить определенное количество тактов микроконтроллера. Микроконтроллеры AVR позволяют предварительно масштабировать (пропускать) числа: 8, 64, 256 и 1024.То есть, если в качестве предделителя установлено 64, то счетчик будет считать только каждый раз, когда часы тикают 64 раза. Это означает, что за одну секунду (когда микроконтроллер тикает один миллион раз) счетчик будет считать только до 15 625. вы могли видеть, что если счетчик считает до этого числа, вы сможете мигать светодиодом каждую секунду.

В основном таймеры имеют регистр для управления и регистр, в котором хранится счетчик. номер.Регистр управления содержит несколько переключателей для включения и выключения функций. Как вы уже догадались … одна из функций – выбрать предварительное масштабирование. Контроль Регистр называется TCCR0 или TCCR1 (Регистр управления таймером / счетчиком). TCCR0 – это 8-битный регистр управления и имеет только 8-битный регистр управления, поэтому есть только 8 переключателей для включения и выключения. TCCR1 – 16-битный, поэтому у него есть 16 переключателей для включения и выключен, но он находится в двух 8-битных регистрах с метками A и B (TCCR1A и TCCR1B).Переключатели следующие: FOC (принудительное сравнение выходов), WGM (генерация сигналов). Mode), COM (режим сравнения совпадения вывода) и CS (выбор часов).

Регистр, в котором хранится счетчик, называется регистром TCNT. И есть 8-битный версия (TCNT0) и 16-разрядная версия (TCNT1). Регистр TCNT1 фактически получает свое число из двух других 8-битных регистров, чтобы создать полное 16-битное число, но это все делается за кулисами (абстрактно), поэтому вам не нужно беспокоиться о том, как TCNT1 получил эту возможность иметь 16-битную версию, просто подумайте, это волшебство.

На видео были показаны две программы: одна показывает только мигание одного светодиода. примерно через 1 секунду, и другая программа, в которой один ряд из 7 светодиодов гоняется за каждую секунду, и еще один ряд из 7 светодиодов преследует каждый с интервалом в 1 секунду. Последняя программа показан здесь, поскольку он имеет большинство функций, используемых с 16-битным таймером.

Не повторяя предыдущих постов, программа инициализирует порты для светодиодов и устанавливает таймер / счетчик №1 (16-битный таймер).Элемент управления TCCR1B Регистр используется для установки коэффициента предварительного масштабирования 64 с переключателями CS10 и CS11.

Поскольку мы хотим, чтобы один из 7 светодиодов следил за 1/7 секунды каждый, мы берем число 15,625 (1000000/64 – помните, что 1000000 – это тактовая частота микроконтроллера 1 МГц) и разделите его на 7, чтобы получить ~ 2,232,143. Вы говорите, но используете только 2232 в программе !! это потому, что TCNT1 принимает только целые числа (без десятичных знаков).Сейчас же вы говорите, отсчет времени будет на величину десятичной дроби !! Верно, но Внутренние часы АРН в любом случае неточны на +/- 10%. Если используется внешний кристалл, вы можете использовать идеальное число, которое представляет соответствующий счетчик.

Вы заметите, что TCNT1 также сбрасывается на ноль вручную. Это необходимо в противном случае TCNT1 будет продолжать отсчет после установленного условия 2232.Есть другие функции управления, у которых есть автоматическое обнуление этого числа, но мы доберемся до это в другом руководстве. Остальные части программы используют то, что мы узнали. i предыдущие руководства (включение и выключение светодиодов и массивов).

#include
int main (пусто)
{ DDRB = 0b01111111;
PORTB = 0b00000000;
DDRD = 0b01111111;
PORTD = 0b00000000;
TCCR1B | = 1
int LEDNumber [2];
а (1)
{ если (TCNT1> 2232)
{ TCNT1 = 0;
PORTB = 1
LEDNumber [0] ++;
если (LEDNumber [0]> 6)
{

LEDNumber [0] = 0;
PORTD = 1 << LEDNumber [1];
LEDNumber [1] ++;
если (LEDNumber [1]> 6)

LEDNumber [1] = 0;

} } } }
Микроконтроллеры для начинающих

Часть 11: Таймеры, счетчики и часы микроконтроллера

Таймеры и счетчики

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

Во-первых, важно понять, что внутри (или снаружи) микроконтроллеров AVR есть часы. Все микроконтроллеры имеют встроенные часы или используют внешние часы. Для микроконтроллеров требуются часы, чтобы программы могли выполняться в ритме с часами.Как и в программах, которые мы пишем, по мере прохождения каждого такта часов инструкции обрабатываются синхронно с тактами часов.

Функции таймера и счетчика в микроконтроллере подсчитывают синхронно с часами микроконтроллера. Однако счетчик считает только до 256 (8-битный счетчик) или 65535 (16-битный счетчик). Это далеко от 1000000 тиков в секунду, которые обеспечивает стандартный микроконтроллер AVR. Микроконтроллер предлагает довольно полезную функцию, называемую предварительным масштабированием.Предварительное масштабирование – это упрощенный способ, позволяющий счетчику пропустить определенное количество тактов часов. Микроконтроллеры AVR позволяют предварительно масштабировать числа: 8, 64, 256 и 1024. Например, если на предварительном делителе установлено значение 64, счетчик будет считать только каждый раз, когда часы отсчитывают 64 раза. Это означает, что за одну секунду (когда микроконтроллер щелкает 1000000 раз) счетчик будет считать только до 15625. Если счетчик досчитает до этого числа, вы сможете мигать светодиодом каждую секунду.

В основном таймеры имеют регистр для управления и регистр, в котором хранится счетчик.Регистр управления содержит несколько переключателей для включения и выключения функций. Как вы уже догадались … одна из функций – выбрать предварительное масштабирование. Регистр управления называется TCCR0 или TCCR1 (Регистр управления таймером / счетчиком). TCCR0 – это 8-битный регистр управления и имеет только 8-битный регистр управления, поэтому есть только 8 переключателей для включения и выключения. TCCR1 является 16-битным, поэтому у него есть 16 переключателей для включения и выключения, но он поставляется в двух 8-битных регистрах, помеченных A и B (TCCR1A и TCCR1B). Переключатели следующие: FOC (принудительное сравнение выходов), WGM (режим генерации сигналов), COM (режим сравнения выходных сигналов) и CS (выбор тактовой частоты).

Регистр, в котором хранится счетчик, называется регистром TCNT. И есть 8-битная версия (TCNT0) и 16-битная версия (TCNT1). Регистр TCNT1 фактически получает свой номер из двух других 8-битных регистров для создания полного 16-битного числа, но все это делается за кулисами (абстрактно), поэтому вам не нужно беспокоиться о том, как TCNT1 получает эту возможность есть 16 бит, просто подумайте, что это волшебство.

На видео были показаны две программы: одна, в которой только один светодиод мигает с интервалом приблизительно 1 секунду, а другая программа имеет один ряд из 7 светодиодов, преследующих каждую секунду, и еще один ряд из 7 светодиодов, преследующих каждую с интервалом в 1 секунду.Последняя программа показана здесь, поскольку она имеет большинство функций, используемых с 16-битным таймером.

Без повторения из предыдущих сообщений, программа инициализирует порты для светодиодов и устанавливает таймер / счетчик №1 (16-битный таймер). Регистр управления TCCR1B используется для установки коэффициента предварительного масштабирования 64 с переключателями CS10 и CS11.

Поскольку мы хотим, чтобы один из 7 светодиодов отслеживал 1/7 секунды каждый, мы берем число 15625 (1000000/64 – помните, что 1000000 – это частота микроконтроллера с частотой 1 МГц) и делим его на 7, чтобы получить ~ 2,232.143. Вы говорите, но в программе используется только 2232 !! это потому, что TCNT1 принимает только целые числа (без десятичных знаков). Теперь вы говорите, что отсчет времени будет отключен на величину десятичной дроби !! Верно, но внутренние часы AVR в любом случае неточны на +/- 10%. Если используется внешний кристалл, вы должны использовать идеальное число, которое представляет соответствующий счетчик.

Вы заметите, что TCNT1 также сбрасывается на ноль вручную. Это необходимо, иначе TCNT1 будет продолжать отсчет после установленного условия 2232.Есть и другие функции управления, которые имеют автоматическое обнуление этого числа, но мы вернемся к этому в другом руководстве. Остальные части программы используют то, что мы узнали в предыдущих уроках (включение и выключение светодиодов и массивы).

Понимание таймеров в микроконтроллере PIC16F877A PIC с последовательностью мигания светодиода

Это будет пятый учебник в нашем учебном пособии PIC серии , который поможет вам изучить и использовать таймеры в PIC16F877A . В наших предыдущих руководствах мы начали с Введение в PIC и MPLABX IDE, затем мы написали нашу первую программу PIC для мигания светодиода с помощью PIC, а затем создали последовательность мигания светодиода, используя функцию задержки в микроконтроллере PIC.Теперь давайте воспользуемся той же последовательностью мигания светодиода, которую мы использовали в предыдущем учебном пособии, и с этим мы научимся , как использовать таймеры в нашем PIC MCU . Мы только что добавили еще одну кнопку на светодиодную панель для этого урока. Прочтите руководство, чтобы узнать больше.

Таймеры – одна из важных рабочих лошадок для встроенного программиста. Каждое разрабатываемое нами приложение каким-то образом будет включать в себя приложение для измерения времени, например, включение или выключение чего-либо по истечении заданного интервала времени.Хорошо, но зачем нам таймеры, если у нас уже есть макросы задержки (__delay_ms ()), делающие то же самое !!

Почему таймер, когда у нас есть Delay ()?

Макрос задержки называется задержкой «дампа». Поскольку во время выполнения функции задержки MCU сидит в дампе, просто создавая задержку . Во время этого процесса MCU не может прослушивать свои значения АЦП или читать что-либо из своих регистров. Следовательно, не рекомендуется использовать функции задержки, за исключением таких приложений, как мигание светодиода, где временная задержка не должна быть точной или длинной.

Макросы задержки также имеют следующие короткие замыкания ,

  1. Значение задержки должно быть постоянным для макросов задержки; его нельзя изменить во время выполнения программы. Следовательно, он остается определенным программистом.
  2. Задержка не будет точной по сравнению с использованием таймеров.
  3. Большие значения задержек не могут быть созданы с помощью макросов, например, задержка в полчаса не может быть создана с помощью макросов задержки. Максимальная задержка, которую можно использовать, зависит от используемого кварцевого генератора.

Таймеры микроконтроллера PIC:

Физически таймер – это регистр, значение которого постоянно увеличивается до 255, а затем начинается все сначала: 0, 1, 2, 3, 4 … 255 …. 0, 1, 2, 3 … …так далее.

PIC MCU PIC16F877A имеет три модуля таймера . Они называются Timer0, Timer1 и Timer2. Таймер 0 и Таймер 2 – это 8-битные таймеры, а Таймер 1 – это 16-битный таймер. В этом руководстве мы будем использовать таймер 0 для нашего приложения. Как только мы поймем таймер 0, будет легко работать и с таймером 1, и таймером 2.

Таймер / счетчик модуля Timer0 имеет следующие особенности:

  • 8-битный таймер / счетчик
  • Доступно для чтения и записи
  • 8-битный программно-программируемый предделитель
  • Выбор внутренних или внешних часов
  • Прерывание при переполнении от FFh до 00h
  • Выбор края для внешних часов

Чтобы начать использовать таймер, мы должны понимать некоторые причудливые термины, такие как 8-битный / 16-битный таймер , предделитель, прерывания таймера и фокус. Теперь давайте посмотрим, что на самом деле означает каждое из них. Как было сказано ранее, в нашем микроконтроллере PIC есть как 8-битные, так и 16-битные таймеры, основное различие между ними состоит в том, что 16-битный таймер имеет гораздо лучшее разрешение, чем 8-битный таймер.

Предделитель – это название части микроконтроллера, которая делит тактовую частоту генератора, прежде чем она достигнет логики, увеличивающей состояние таймера. Диапазон идентификатора предварительного делителя составляет от 1 до 256, а значение предварительного делителя может быть установлено с помощью регистра OPTION (того же, что мы использовали для подтягивающих резисторов).Например, если значение предварительного делителя равно 64, то для каждых 64 th импульсов таймер будет увеличиваться на 1.

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

Fosc обозначает частоту осциллятора , это частота используемого кристалла.Время, затрачиваемое на регистр таймера, зависит от значения предделителя и значения Fosc.

Программирование и объяснение работы:

В этом руководстве мы установим две кнопки как два входа и 8 светодиодов как 8 выходов. Первая кнопка будет использоваться для установки временной задержки (500 мс для каждого нажатия), а вторая кнопка будет использоваться для запуска мигания последовательности таймера. Например, если первая кнопка нажата трижды (500 * 3 = 1500 мс), задержка будет установлена ​​на 1.5 секунд, и при нажатии кнопки два каждый светодиод будет включаться и выключаться с заданной временной задержкой. Посмотрите демонстрационное видео в конце этого учебного пособия.

Теперь, имея в виду эти основы, давайте посмотрим на нашу программу, приведенную в конце в Code section .

Ничего страшного, если вы не получили программу, но если получили !! Дайте себе файл cookie и сбросьте программу, чтобы насладиться результатом. Для других я разобью программу на значимые части и объясню вам, что происходит в каждом блоке.

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

Затем давайте пропустим все строки и сразу перейдем к функции void main, внутри которой находится конфигурация PORT для Timer0.

пустая функция()
{
/ ***** Конфигурация порта для таймера ****** /
    OPTION_REG = 0b00000101; // Timer0 с внешней частотой и 64 в качестве предскалярного // Также включает PULL UP
    TMR0 = 100; // Загружаем значение времени для 0.0019968s; delayValue может быть только в диапазоне 0–256.
    TMR0IE = 1; // Включение бита прерывания таймера в регистре PIE1
    ЭДД = 1; // Включить глобальное прерывание
    PEIE = 1; // Включение периферийного прерывания
    / *********** ______ *********** / 

Чтобы понять это, мы должны взглянуть на регистр OPTION в нашей таблице данных PIC.

Как обсуждалось в предыдущем руководстве, бит 7 используется для включения слабого подтягивающего резистора для PORTB. Посмотрите на приведенный выше рисунок, бит 3 установлен в 0, чтобы указать MCU, что следующий устанавливаемый предделитель должен использоваться для таймера, а не для WatchDogTimer (WDT).Режим таймера выбирается сбросом бита 5 T0CS

(OPTION_REG <5>)

Теперь бит 2-0 используется для установки значения предварительного делителя для таймера. Как показано в таблице выше, чтобы установить значение предделителя 64, биты должны быть установлены как 101.

Затем давайте посмотрим на регистры, связанные с Timer0

Таймер начнет увеличиваться после установки и переполняться после достижения значения 256, чтобы разрешить прерывание таймера в этот момент, регистр TMR0IE должен быть установлен в высокий уровень.Так как Таймер 0 сам по себе является периферийным устройством, мы должны включить Периферийное прерывание, установив PEIE = 1 . Наконец, мы должны включить глобальное прерывание, чтобы MCU был уведомлен о прерывании во время любой операции, это делается путем установки GIE = ​​1.

Задержка = ((256-REG_val) * (Prescal * 4)) / Fosc

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

Где

REG_val = 100;

Prescal = 64

Fosc = 20000000

Это по расчету дает,

Задержка = 0.0019968s

Следующий набор строк предназначен для установки портов ввода / вывода.

        / ***** Конфигурация порта для ввода / вывода ****** /
    TRISB0 = 1; // Сообщаем MCU, что вывод PORTB 0 используется в качестве входа для кнопки 1.
    TRISB1 = 1; // Сообщаем MCU, что вывод PORTB 1 используется в качестве входа для кнопки 1.
    TRISD = 0x00; // Сообщаем микроконтроллеру, что все контакты на ПОРТУ D являются выходными
    PORTD = 0x00; // Инициализируем все выводы на 0
    / *********** ______ *********** / 

Это то же самое, что и в нашем предыдущем руководстве, поскольку мы используем то же оборудование.За исключением того, что мы добавили еще одну кнопку в качестве ввода. Это делается строкой TRISB1 = 1.

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

        в то время как (1)
        {
        count = 0; // Не запускать таймер в основном цикле
        // ******* Получить номер задержки от пользователя **** //////
        if (RB0 == 0 && flag == 0) // Когда вводится
        {
            get_scnds + = 1; // get_scnds = get_scnds + 1 // Увеличение переменной
            flag = 1;
        }
        if (RB0 == 1) // Чтобы предотвратить непрерывное приращение
            flag = 0;
        / *********** ______ *********** / 

Переменная с именем get_scnds увеличивается каждый раз, когда пользователь нажимает кнопку 1.Флаг , переменная (определяемая программным обеспечением) используется для удержания процесса увеличения до тех пор, пока пользователь не уберет палец с кнопки.

                // ******* Выполнить последовательность с задержкой **** //////
        в то время как (RB1 == 0)
        {
                PORTD = 0b00000001 << i; // Левый дерьмовый светодиод на i
                if (hscnd == get_scnds) // Если нужное время достигнуто
                {
                    я + = 1; // Переход к следующему светодиоду после заданной задержки
                    hscnd = 0;
                }
                flag = 2;
        }
        if (flag == 2 && RB1 == 1) // Сбрасываем таймер, если кнопка снова в высоком состоянии
        {
            get_scnds = 0; hscnd = 0; я = 0;
            PORTD = 0; // Выключаем все светодиоды
        }
        / *********** ______ *********** / 

Следующий блок вступает в действие, если нажата кнопка два.Поскольку пользователь уже определил требуемую задержку с помощью первой кнопки, она сохранена в переменной get_scnds. Мы используем переменную hscnd , эта переменная контролируется ISR (подпрограмма обслуживания прерывания).

Программа обслуживания прерывания - это прерывание, которое будет вызываться каждый раз при переполнении Timer0. Давайте посмотрим, как это контролируется ISR в следующем блоке, например, мы хотим увеличить задержку на полсекунды (0.5s) при каждом нажатии кнопки, то нам нужно увеличивать переменную hscnd на каждые полсекунды. Поскольку мы запрограммировали наш таймер на переполнение каждые 0,0019968 с (~ 2 мс), поэтому для подсчета полсекунды count переменная должна быть 250, потому что 250 * 2 мс = 0,5 секунды. Таким образом, когда count достигает 250 (250 * 2 мс = 0,5 секунды), это означает, что прошло полсекунды, поэтому мы увеличиваем hscnd на 1 и инициализируем счетчик до нуля.

пустое прерывание timer_isr ()
{
    if (TMR0IF == 1) // Флаг таймера сработал из-за переполнения таймера
    {
        TMR0 = 100; // Загружаем значение таймера
        TMR0IF = 0; // Очистить флаг прерывания таймера
        count ++;
    }
    
    если (количество == 250)
    {
        hscnd + = 1; // hscnd будет увеличиваться каждые полсекунды
        count = 0;
    }
} 

Итак, мы используем это значение и сравниваем его с нашим hscnd и смещаем наш светодиод в зависимости от времени, заданного пользователем.Он также очень похож на предыдущий урок.

Вот и наша программа понята и работает.

Принципиальная схема

и моделирование Proteus:

Как обычно, позволяет проверять вывод, используя сначала Proteus , я связал здесь файлы схемы Proteus.

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

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

8051 Микроконтроллер, 8–16-разрядные таймеры и счетчики

Многие приложения микроконтроллера требуют подсчета внешних событий, таких как частота последовательности импульсов, и создания точных внутренних временных задержек между действиями компьютера. Обе эти задачи могут быть реализованы программными методами, но программные циклы для подсчета и отсчета времени не дадут точного результата, более важные функции не выполняются.Чтобы избежать этих проблем, таймеры и счетчики в микроконтроллерах являются лучшими вариантами для простых и недорогих приложений. Эти таймеры и счетчики используются как прерывания в микроконтроллере 8051.

В микроконтроллере 8051 есть два 16-битных таймера и счетчика: таймер 0 и таймер 1. Оба таймера состоят из 16-битного регистра, в котором младший байт хранится в TL, а старший байт хранится в TH. Таймер можно использовать как счетчик, а также для работы по синхронизации, которая зависит от источника тактовых импульсов для счетчиков.


Таймеры и счетчики

Счетчики и таймеры в микроконтроллере 8051 содержат два специальных функциональных регистра: TMOD (регистр режима таймера) и TCON (регистр управления таймером), которые используются для активации и настройки таймеров и счетчиков.

Управление режимом таймера (TMOD): TMOD - это 8-битный регистр, используемый для выбора таймера или счетчика и режима таймеров. Младшие 4 бита используются для управления таймером 0 или счетчиком 0, а оставшиеся 4 бита используются для управления таймером 1 или счетчиком 1.Этот регистр присутствует в регистре SFR, адрес для регистра SFR - 89-й.

Управление режимом таймера (TMOD)

Строб: Если бит строба установлен на «0», то мы можем запускать и останавливать «программный» таймер таким же образом. Если вентиль установлен на «1», то мы можем запустить аппаратный таймер.

C / T: Если бит C / T равен «1», то он действует как режим счетчика, и аналогично, когда C +
= / T бит равен «0»; он действует как режим таймера.

Биты выбора режима: M1 и M0 - это биты выбора режима, которые используются для выбора операций таймера.Есть четыре режима работы таймеров.

Mode 0: Это 13-битный режим, который означает, что операция таймера завершается с «8192» импульсами.

Режим 1: Это 16-битный режим, что означает, что работа таймера завершается с максимальным количеством тактовых импульсов, равным «65535».

Режим 2: Этот режим представляет собой 8-битный режим автоматической перезагрузки, что означает, что операция таймера завершается только с «256» тактовыми импульсами.

Режим 3: Этот режим представляет собой режим разделения таймера, что означает загрузку значений в T0 и автоматический запуск T1.

Биты выбора режима

Выбор режима Значения таймеров и счетчиков в 8051

Значения выбора режима таймеров и счетчиков

Регистр управления таймером (TCON): TCON - еще один регистр, используемый для управления операциями счетчика и таймеров в микроконтроллерах. Это 8-битный регистр, в котором четыре старших бита отвечают за таймеры и счетчики, а младшие разряды отвечают за прерывания.

Регистр управления таймером (TCON)

TF1: TF1 означает бит флага «timer1».Каждый раз, когда вычисляется время задержки в таймере 1, Th2 и TL1 автоматически достигают максимального значения, равного «FFFF».

EX: while (TF1 == 1)

Всякий раз, когда TF1 = 1, очистить бит флага и остановить таймер.

TR1: TR1 обозначает стартовый или стоповый бит таймера 1. Запуск этого таймера может происходить с помощью программных инструкций или аппаратных средств.

EX: gate = 0 (запуск таймера 1 с помощью программной инструкции)
TR1 = 1; (Запуск таймера)

TF0: TF0 означает бит-флаг «timer0».Каждый раз, когда вычисляется время задержки в таймере 1, TH0 и TL0 автоматически достигают максимального значения «FFFF».

EX: while (TF0 == 1)
Всякий раз, когда TF0 = 1, очистите бит флага и остановите таймер.

TR0: TR0 обозначает стартовый или стоповый бит таймера 0; запуск этого таймера может происходить с помощью программного обеспечения или аппаратного метода.

EX: gate = 0 (запуск таймера 1 с помощью программной инструкции)
TR0 = 1; (Таймер запуска)

Расчет временной задержки для микроконтроллера 8051

Микроконтроллер 8051 работает с 11.Частота 0592 МГц.

Частота 11,0592 МГц = 12 пулей

1 тактовый импульс = 11,0592 МГц / 12

F = 0,921 МГц

Задержка времени = 1 / F

T = 1 / 0,92 МГц

T = 1,080506 мкс (для '1 'цикл)

1000us = 1MS

1000ms = 1sec

Процедура расчета программы задержки

1. Сначала мы должны загрузить значение регистра TMOD для «Timer0» и «Timer1» в разных режимах. Например, если мы хотим использовать таймер 1 в режиме 1, он должен быть настроен как «TMOD = 0x10».

2. Каждый раз, когда мы работаем с таймером в режиме 1, таймер берет максимальное количество импульсов 65535. Затем рассчитанные импульсы с временной задержкой должны быть вычтены из максимального количества импульсов, а затем преобразованы в шестнадцатеричное значение. Это значение должно быть загружено в старший и младший биты timer1. Эта операция таймера программируется с помощью встроенного C в микроконтроллер.

Пример: задержка времени 500 мкс

500 мкс / 1.080806 мкс

461 импульсов

P = 65535-461

P = 65074

65074 в шестнадцатеричном виде = FE32

Th2 = 0xFE;

TL1 = 0x32;

3.Запустите таймер1 «TR1 = 1;»

4. Контролировать бит флага «while (TF1 == 1)»

5. Очистить бит флага «TF1 = 0»

6. Очистить таймер «TR1 = 0»

Примеры программ:

Программа- 1Program- 2Program- 3

Счетчики в 8051

Мы можем использовать счетчик, поддерживая высокий бит C / T, то есть логическую «1» в регистре TMOD. Для лучшего понимания мы привели одну программу, которая использует таймер 1 в качестве счетчика. Здесь светодиоды подключены к порту 2 8051, а переключатель - к выводу P3 таймера 1.5; и поэтому, если переключатель нажат, значение будет подсчитано. В противном случае, внешний датчик, подключенный к этому контакту счетчика в качестве входа, выполняет эту операцию подсчета. Программа счетчика

Применение таймеров и счетчиков в 8051

Цифровой счетчик

с 8051

Цифровой счетчик с 8051 достигается путем программирования микроконтроллера, как описано выше, и путем присоединения к нему сенсорной системы. Этот счетчик объектов использует ИК-датчик, который обнаруживает препятствие рядом с ним, а также включает вывод микроконтроллера 06.Когда объект проходит через датчики, микроконтроллер получает сигнал прерывания от ИК-датчиков и увеличивает счетчик, который отображается на 7-сегментном дисплее. Цифровой счетчик

с 8051

Схема выдержки времени Использование микроконтроллера 8051

На рисунке ниже показано, как можно реализовать операцию таймера для эффективного переключения светодиодов. Операция задержки по времени для набора светодиодов программируется в микроконтроллере, как описано выше. Здесь набор светодиодов подключен к порту 2 с общей системой питания.Когда эта схема включается в соответствии с программой временной задержки в микроконтроллере, эти светодиоды включаются.

Схема выдержки времени

Это все о таймере и счетчиках микроконтроллера 8051 с базовыми схемами программирования и приложений. Мы надеемся, что информация в этой статье дала вам достаточно данных, чтобы лучше понять концепцию. Кроме того, с любыми техническими сомнениями по программированию 8051 и его схем вы можете связаться с нами, оставив комментарий ниже.

Фото:

8051 Таймеры и счетчики

В этой статье мы сосредоточимся на таймерах / счетчиках микроконтроллера 8051.8051 имеет два счетчика / таймера, которые могут использоваться либо как таймер для создания временной задержки, либо как счетчик для подсчета событий, происходящих вне микроконтроллера.

У 8051 есть два таймера: timer0 и timer1. Их можно использовать как таймеры или как счетчики. Оба таймера имеют ширину 16 бит. Поскольку 8051 имеет 8-битную архитектуру, к каждому 16-битному обращению обращаются как к двум отдельным регистрам младшего и старшего байта. Сначала мы обсудим регистры Timer0.

Регистры таймера 0 - это 16-битный регистр, доступ к которому осуществляется как младший и старший байт.Младший байт обозначается как TL0, а старший байт обозначается как TH0. К этим регистрам можно получить доступ, как к любым другим регистрам.

Регистры таймера 1 также является 16-битным регистром и разделен на два байта, называемых TL1 и Th2.

TMOD ( режим таймера) Регистр: Это 8-битный регистр, который используется обоими таймерами 0 и 1 для установки различных режимов таймера. В этом регистре TMOD младшие 4 бита зарезервированы для таймера 0, а старшие 4 бита зарезервированы для таймера 1.В каждом случае 2 младших бита используются для установки режима таймера, а 2 старших бита используются для определения операции.

TMOD

В старших или младших 4 битах первый бит является битом GATE. У каждого таймера есть средства запуска и остановки. Некоторые таймеры делают это программно, некоторые - аппаратно, а некоторые имеют как программные, так и аппаратные средства управления. Аппаратный способ запуска и остановки таймера внешним источником достигается установкой GATE = 1 в регистре TMOD. И если мы изменим значение на GATE = 0, тогда нам не потребуется внешнее оборудование для запуска и остановки таймеров.

Второй бит является битом C / T и используется для определения того, используется ли таймер в качестве генератора задержки времени или счетчика событий. Если этот бит равен 0, он используется как таймер, а если он равен 1, то он используется как счетчик.

В старших или младших 4 битах последние третий и четвертый биты известны как M1 и M0 соответственно. Они используются для выбора режима таймера.

M0 M1 Mode Рабочий режим

0 0 0 13-битный режим таймера, 8-битный таймер / счетчик THx и TLx как 5-битный предскалярный.

0 1 1 Режим 16-битного таймера, 16-битный таймер / счетчики THx и TLx каскадированы; Прескалярных нет.

1 0 2 8-битный режим автоматической перезагрузки, 8-битный таймер / счетчик автоматической перезагрузки; THx содержит значение, которое необходимо перезагружать в TLx при каждом переполнении.

1 1 3 Режим таймера пролива.

Mode 1- Это 16-битный таймер; следовательно, он позволяет загружать значения от 0000 до FFFFH в регистры таймера TL и TH.После того, как TH и TL загружены с 16-битным начальным значением, необходимо запустить таймер. Мы можем сделать это с помощью «SETB TR0» для таймера 0 и «SETB TR1» для таймера 1. После запуска таймера. Он начинает отсчет до тех пор, пока не достигнет своего предела FFFFH. Когда он переключается с FFFF на 0000H, он устанавливает высокий бит флага, называемый TF (флаг таймера). Этот флаг таймера можно отслеживать. Когда этот флаг таймера поднят, одним из вариантов может быть остановка таймера с помощью инструкций «CLR TR0» или CLR TR1 для таймера 0 и таймера 1 соответственно.Опять же, необходимо отметить, что каждый таймер флаг TF0 для таймера 0 и TF1 для таймера1. После того, как таймер достигнет своего предела и перевернется, чтобы повторить процесс, регистры TH и TL должны быть перезагружены с исходным значением, а TF должен быть сброшен на 0.

Mode0- Режим 0 точно такой же, как режим 1, за исключением того, что это 13-битный таймер вместо 16-битного. 13-битный счетчик может хранить значения от 0000 до 1FFFH в TH-TL. Следовательно, когда таймер достигает своего максимального значения 1FFH, он переключается на 0000, и TF повышается.

Mode 2- Это 8-битный таймер, который позволяет загружать только значения от 00 до FFH в регистр таймера TH. После того, как TH загружается с 8-битным значением, 8051 передает его копию TL. Затем нужно запустить таймер. Это выполняется инструкцией «SETB TR0» для таймера 0 и «SETB TR1» для таймера 1. Это похоже на режим 1. После запуска таймера он начинает отсчет, увеличивая регистр TL. Он считает, пока не достигнет своего предела FFH. Когда он переключается с FFH на 00.Он устанавливает высокий TF (флаг таймера). Если мы используем таймер 0, TF0 переходит в высокий уровень; при использовании TF1 повышается TF1. Когда регистр Tl переходит с FFH на 00 и TF устанавливается в 1, TL автоматически перезагружается с исходным значением, сохраненным в регистре TH. Чтобы повторить процесс, мы должны просто очистить TF и ​​позволить программисту не перезагружать исходное значение. Это приводит к автоматической перезагрузке режима 2, в отличие от режима 1, в котором программист должен перезагружать TH и TL.

Mode3- Mode 3 также известен как режим таймера разделения.Таймеры 0 и 1 могут быть запрограммированы в режимах 0, 1 и 2 независимо от аналогичного режима для другого таймера. Это не верно для режима 3; таймеры не работают независимо, если для таймера 0 выбран режим 3. Перевод таймера 1 в режим 3 приводит к остановке счета; бит управления TR1 и флаг таймера 1 TF1 затем используются таймером 0.

Регистр TCON- Биты, символы и функции каждого бит TCON следующие:

Функции символа BIT

7 TF1 Флаг переполнения таймера 1.Устанавливается, когда таймер переходит со всех единиц на 0. Сброшено

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

Расположен по программному адресу 001Bh.

6 TR1 Бит управления запуском таймера 1. Установите 1 программистом, чтобы включить таймер на

.

кол; Сброшен в 0 программой для остановки таймера.

5 TF0 Флаг переполнения таймера 0. То же, что и TF1.

4 TR0 Бит управления запуском таймера 0. То же, что и TR1.

3 IE1 Внешнее прерывание 1 Флаг фронта. Не относится к работе таймера.

2 IT1 Управляющий бит типа сигнала внешнего прерывания 1. Установить 1 программой на

Разрешить запуск внешнего прерывания 1 по заднему фронту сигнала.Комплект

В 0 по программе, чтобы разрешить сигнал низкого уровня при внешнем прерывании от 1 до

генерирует прерывание.

1 IE0 Внешнее прерывание 0 Флаг фронта. Не относится к работе таймера.

0 IT0 Управляющий бит типа сигнала внешнего прерывания 0. То же, что и IT0.

Модуль таймера / счетчика

- независимое руководство от контроллера

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

Модуль таймера является неотъемлемой частью любого семейства микроконтроллеров. Большинство современных контроллеров сегодня имеют как минимум один встроенный модуль таймера.Эти модули таймера, в зависимости от диапазона микроконтроллера (базовый, средний, расширенный), имеют различные функции, такие как прескалер, постделитель, автоматическая перезагрузка, возможность работы в качестве счетчика и так далее. Любое приложение, маленькое или большое, нуждается в таймере. Поэтому, как разработчикам встраиваемых систем, необходимо иметь практические знания о том, как они работают и ведут себя.

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

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

В обоих случаях модуль таймера / счетчика может быть сконфигурирован для прерывания при переполнении таймера или когда переполнение происходит определенное количество раз (концепция постделителя). Некоторые контроллеры могут не иметь возможности прерывания, некоторые могут не иметь постделителя, предварительного делителя или обоих. Но для любого микроконтроллера основная концепция одинакова.

Следующим фактором, который необходимо учитывать, является размер модуля таймера / счетчика.Это определит максимальное количество подсчетов, которое модуль может произвести до переполнения. По сути, 8-битный модуль таймера может хранить только запись 256 тактовых импульсов или внешних событий, прежде чем он переполнится или сработает и прервется. Таким образом, чем больше битов, тем дольше может работать таймер до переполнения. Таймеры могут быть счетчиками вверх (отсчет от 0 до N) или счетчиками вниз (отсчет от N до 0) и зависят от архитектуры каждого микроконтроллера.

Прескейлер и постделитель задаются в фиксированных соотношениях, например, 1: 2, 1: 4, 1: 8 и т. Д.В зависимости от размера регистров, в которых хранится значение, они могут составлять 1: 256 или более. Понятия предделителя и постделителя одинаковы. Они используются для умножения скалярного значения на значение регистра таймера. Но разница в том, как и где они размножаются.

Понимание концепции прескалера и постделителя:

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

Значение в регистре предварительного делителя определяет, сколько раз часы должны тикать, прежде чем регистр таймера получит единичный импульс. Это можно увидеть на изображении выше. Коэффициент масштабирования 1: 2 означает, что тактовый генератор должен иметь переход от низкого уровня к высокому дважды, чтобы выходной сигнал предварительного делителя завершился одним HIGH импульсом. Это один из способов снижения тактовой частоты. Следовательно, при использовании этого метода регистр таймера по существу умножается на «N», где N - значение предварительного делителя.

Концепция постделителя во многом похожа на предварительный делитель. Только здесь значение предварительного делителя определяет, сколько раз регистр таймера должен переполниться для создания прерывания. Следовательно, при использовании постделителя значение регистра таймера умножается на «M», где M - значение постделителя.

Следовательно, нетто-счетчик C, после которого таймер вызовет прерывание, когда используются и предварительный делитель, и постделитель, равен,

В случае UP-счетчика,

  C = N x [значение регистра таймера ] x M
  

В случае ВНИЗ-счетчика

  C = N x [(значение регистра таймера) - (регистр таймера максимального значения)] x M
  

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

Расчет временного интервала для заданного значения C:

Частота - это, по сути, количество раз, когда что-то происходит за одну секунду. Скажите это любому и убедитесь, что вы сказали это правильно. Итак, тактовая частота 20 МГц на самом деле равна 20 x 10 6 тактов за одну секунду. Чтобы получить время, затраченное на один тактовый цикл, вам нужно будет взять обратную частоту.В данном случае это 1/20 МГц, что даст мне 0,05x10 - 6 секунд.

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

А пока рассмотрим микроконтроллеры PIC. Здесь Fosc делится на коэффициент 4. Итак, мы имеем

  Fosc = 20Mhz.
Fosc / 4 = 5 МГц
Т = 1 / (Fosc / 4)
T = 1/5 МГц
Т = 0.2 микросекунды
  

Итак, один отсчет таймера займет 0,2 микросекунды.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *