Схема таймера на avr: Таймер своими руками | Программирование микроконтроллеров AVR ⋆ diodov.net

Содержание

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

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

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

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

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

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

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

Квант времени может быть выбран равным одной секунде или одной минуте, соответственно, время включения и время паузы могут находиться в диапазоне от 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), нажимаем кнопку программирования, слышим два коротких сигнала. Выключаем и вновь включаем питание – таймер с новыми значениями констант готов к работе.

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

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


Схема таймера на микроконтроллере 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А.

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

Шишкин С.

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

Обзор таймера микроконтроллера

AVR® — Помощь разработчику

Таймеры — это очень полезная функция микроконтроллера для подсчета импульсов на входном контакте. Когда они управляются инструкционными часами, они могут стать точной базой времени. Устройства AVR® имеют 8-битные и 16-битные таймеры и предлагают различные функции в зависимости от устройства. Очень типичный набор таймеров можно найти в микроконтроллере AVR ATmega328PB . Это устройство имеет пять таймеров/счетчиков, как описано здесь:

Таймер 0 ТС0 8-битный таймер/счетчик с широтно-импульсной модуляцией (ШИМ)
Таймер 1 ТС1 16-разрядный таймер/счетчик с ШИМ и асинхронным режимом работы
Таймер 2 ТК2 8-битный таймер/счетчик с ШИМ и асинхронным режимом работы
Таймер 3 ТС3 16-разрядный таймер/счетчик с ШИМ и асинхронным режимом работы
Таймер 4 ТС4 16-разрядный таймер/счетчик с ШИМ и асинхронным режимом работы

Определения:

Регистр Номенклатура
НИЖНЯЯ Счетчик достигает НИЗА, когда становится равным нулю (0x00 для 8-битных счетчиков и 0x0000 для 16-битных счетчиков)
МАКС Счетчик достигает своего максимального значения, когда он становится 0x0F (десятичное число 15) для 8-битных счетчиков и 0x00FF (десятичное число 255) для 16-битных счетчиков
ВЕРХ Счетчик достигает TOP, когда его значение становится равным максимально возможному значению. Величине TOP может быть присвоено фиксированное значение MAX или значение, хранящееся в регистре OCRxA. Это назначение зависит от режима работы

Timer/Counter0 (TC0) — это 8-разрядный модуль таймера/счетчика общего назначения с двумя независимыми блоками сравнения выходов и поддержкой ШИМ.

Регистры TC0

Регистр таймера/счетчика 0 (TCNT0) и регистры сравнения вывода TC0x (OCR0x) являются 8-битными регистрами. Все сигналы запроса прерывания отображаются в регистре флагов прерывания таймера 0 (TIFR0). Все прерывания индивидуально маскируются регистром маски прерывания таймера 0 (TIMSK0).

Источники синхронизации таймера/счетчика TC0

TC0 может синхронизироваться от внутреннего или внешнего источника синхронизации. Источник тактового сигнала выбирается путем записи битов выбора тактового сигнала (CS02:0) в регистре управления таймером/счетчиком (TCCR0B).

Биты 2:0 – CS0n: Выбор часов [n = 0..2]

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

CS02 CS01 CS00 Описание
0 0 0 Нет источника синхронизации (таймер остановлен)
0 0 1 clkio/1 (без предварительного масштабирования)
0 1 0 clkio/8 (из прескалера)
0 1 1 clkio/64 (из прескалера)
1 0 0 clkio/256 (из прескалера)
1 0 1 clkio/1012 (из прескалера)
1 1 0 Внешний источник тактового сигнала на выводе T0 (тактовый сигнал по заднему фронту)
1 1 1 Внешний источник тактового сигнала на выводе T0 (тактовый сигнал по переднему фронту)

Блок счетчика TC0

В зависимости от используемого режима работы значение T0 очищается, увеличивается или уменьшается на каждом такте таймера (clkT0). clkT0 может генерироваться из внешнего или внутреннего источника синхронизации, выбираемого битами выбора синхронизации (CS0[2:0]).

Последовательность счета определяется установкой битов WGM01 и WGM00, расположенных в регистре управления T0 A (TCCR0A), и бита WGM02, расположенного в регистре управления таймером/счетчиком B (TCCR0B).

Биты 1:0 – WGM0n: режим генерации сигнала [n = 1:0]

В сочетании с битом WGM02, находящимся в регистре TCCR0B, эти биты управляют последовательностью счета счетчика, источником максимального (TOP) счетчика значения и какой тип генерации формы сигнала следует использовать. Блок таймера/счетчика поддерживает следующие режимы работы: нормальный режим (счетчик), режим сброса таймера при сравнении совпадений (CTC) и два типа режимов широтно-импульсной модуляции (ШИМ).

Таблица 1-2 Режим генерации сигнала Бит Описание
Режим WGM2:0 Режим работы ВЕРХ Обновление OCR0x Флаг ТОВ установлен на
0 0 0 0 Обычный 0xFF Немедленно МАКС
1 0 0 1 Коррекция фазы ШИМ 0xFF ТОП НИЖНЯЯ
2 0 1 0 СТС ОКРА Немедленно МАКС
3 0 1 1 Быстрый ШИМ 0xFF НИЖНЯЯ МАКС
4 1 0 0 Зарезервировано ~ ~ ~
5 1 0 1 Коррекция фазы ШИМ ОКРА ТОП НИЖНЯЯ
6 1 1 0 Зарезервировано ~ ~ ~
7 1 1 1 Быстрый ШИМ ОКРА НИЖНЯЯ МАКС

Примечание:
1. MAX = 0xFF
2. BOTTOM = 0x00

Режимы работы для TC0

Режим работы определяет поведение TC0 и выходных контактов сравнения. Он определяется комбинацией битов режима генерации сигнала и битов режима сравнения вывода в регистрах управления таймером/счетчиком A и B (TCCR0B.WGMn2, TCCR0A.WGM01, TCCR0A.WGM00 и TCCR0A.COM0x[1:0]).

Доступные режимы работы для TC0:

  • Нормальный режим
  • Очистить таймер в режиме сравнения совпадений (CTC)
  • Быстрый режим ШИМ
  • Фазокорректный режим ШИМ

Сброс таймера в режиме сравнения и совпадения

В режиме сброса таймера в режиме сравнения или CTC (WGM0[2:0]=0x2) регистр OCR0A используется для управления разрешением счетчика: счетчик сбрасывается в НУЛЬ, когда значение счетчика (TCNT0) соответствует OCR0A. OCR0A определяет максимальное значение счетчика, а значит, и его разрешение.

Значение счетчика (TCNT0) увеличивается до тех пор, пока не произойдет совпадение сравнения между TCNT0 и OCR0A, после чего счетчик (TCNT0) будет очищен. Прерывание может генерироваться каждый раз, когда значение счетчика достигает значения TOP, путем установки флага OCF0A. Если прерывание разрешено, процедура обработки прерывания может использоваться для обновления значения TOP.

Частота сигнала определяется следующим уравнением:

N представляет коэффициент предварительного делителя (1, 8, 64, 256 или 1024).

16-разрядные блоки таймера/счетчика позволяют точно определять время выполнения программы (управление событиями), генерировать волны и измерять время сигнала.

Регистры (TC1, TC3, TC4)

  • Таймер/счетчик (TCNTn), регистры сравнения вывода (OCRA/B) и регистр захвата ввода (ICRn) являются 16-разрядными регистрами.
  • Регистры управления таймером/счетчиком (TCCRnA/B) являются 8-разрядными регистрами и не имеют ограничений доступа ЦП.
  • Сигналы запросов прерывания (сокращенно Int.Req. на блок-схеме) отображаются в регистре флагов прерывания таймера (TIFRn). Все прерывания индивидуально маскируются регистром маски прерывания таймера (TIMSKn).

Источники синхронизации таймера/счетчика (TC1, TC3, TC4)

Таймер/счетчик может синхронизироваться от внутреннего или внешнего источника синхронизации. Источник тактового сигнала выбирается логикой выбора тактового сигнала, которая управляется битами выбора тактового сигнала в регистре управления таймером/счетчиком B (TCCRnB.CS[2:0]).

Биты 2:0 – CS[2:0]: выбор часов [n = 0..2]
Три бита выбора часов выбирают источник синхронизации, который будет использоваться таймером/счетчиком.

CS02 CS01 CS00 Описание
0 0 0 Нет источника синхронизации (таймер остановлен)
0 0 1 clkio/1 (без предварительного масштабирования)
0 1 0 clkio/8 (из прескалера)
0 1 1 clkio/64 (из прескалера)
1 0 0 clkio/256 (из прескалера)
1 0 1 clkio/1012 (из прескалера)
1 1 0 Внешний источник тактового сигнала на выводе T0 (тактовый сигнал по заднему фронту)
1 1 1 Внешний источник тактового сигнала на выводе T0 (тактовый сигнал по переднему фронту)

Счетчик (TC1, TC3, TC4)

TC1, TC3 и TC4 — это программируемые 16-разрядные двунаправленные счетчики.

Каждый 16-битный счетчик сопоставляется с двумя 8-битными ячейками памяти ввода-вывода: Старший счетчик (TCNTnH), содержащий восемь старших бит счетчика, и Младший счетчик (TCNTnL), содержащий восемь младших битов.

В зависимости от выбранного режима работы счетчик очищается, увеличивается или уменьшается на каждый такт таймера (clkTn). Тактовый сигнал clkTn может генерироваться из внешнего или внутреннего источника тактового сигнала в зависимости от выбора битов выбора тактового сигнала в регистре управления таймером/счетчиком B (TCCRnB.CS[2:0]).

Последовательность счета определяется установкой битов режима генерации сигнала в регистрах управления таймером/счетчиком A и B (TCCRnB.WGM[3:2] и TCCRnA.WGM[1:0]).

Режимы работы (TC1, TC3, TC4)

Режим работы определяется комбинацией режима генерации сигнала (WGM[3:0]) и режима сравнения вывода (TCCRnA.COMx[1:0]) биты.

Доступные режимы работы:

  • Нормальный режим
  • Очистить таймер в режиме сравнения совпадений (CTC)
  • Быстрый режим ШИМ
  • Фазокорректный режим ШИМ
  • Правильный режим ШИМ по фазе и частоте

Режим быстрой ШИМ

Режимы быстрой широтно-импульсной модуляции или быстрой ШИМ (режимы 5, 6, 7, 14 и 15, WGM[3:0]= 0x5, 0x6, 0x7, 0xE, 0xF) обеспечивают высокую частоту Опция генерации сигналов ШИМ. Быстрая ШИМ отличается от других вариантов ШИМ работой с одним наклоном. Счетчик считает от НИЗА к ВЕРХУ, затем перезапускается с НИЗА.

В режиме Fast PWM счетчик увеличивается до тех пор, пока значение счетчика не совпадет с одним из фиксированных значений 0x00FF, 0x01FF или 0x03FF (WGM[3:0] = 0x5, 0x6 или 0x7), значением в ICRn (WGM[ 3:0]=0xE) или значение в OCRnA (WGM[3:0]=0xF). Затем счетчик очищается в следующем такте таймера.

Частота ШИМ для выхода может быть рассчитана по следующему уравнению:

Примечание:
• «n» в именах регистров и битов указывает номер устройства (n = 0 для таймера/счетчика 0), а «x ” указывает единицу сравнения вывода (A/B).
• N представляет делитель предварительной шкалы (1, 8, 64, 256 или 1024).

Timer/Counter2 (TC2) — двухканальный 8-разрядный модуль Timer/Counter общего назначения.

Регистры TC2

Таймер/счетчик (TCNT2) и регистр сравнения выходных данных (OCR2A и OCR2B) являются 8-битными регистрами. Все сигналы запроса прерывания отображаются в регистре флагов прерывания таймера (TIFR2). Все прерывания индивидуально маскируются с помощью регистра маски прерывания таймера (TIMSK2).

Источники тактового сигнала TC2

TC2 может тактироваться внутренним синхронным или внешним асинхронным источником тактового сигнала:
Три бита выбора тактового сигнала (CS2:CS0) выбирают источник тактового сигнала, который будет использоваться таймером/счетчиком.

CS02 CS01 CS00 Описание
0 0 0 Нет источника синхронизации (таймер остановлен)
0 0 1 clkio/1 (без предварительного масштабирования)
0 1 0 clkio/8 (из прескалера)
0 1 1 clkio/64 (из прескалера)
1 0 0 clkio/256 (из прескалера)
1 0 1 clkio/1012 (из прескалера)
1 1 0 Внешний источник тактового сигнала на выводе T0 (тактовый сигнал по заднему фронту)
1 1 1 Внешний источник тактового сигнала на выводе T0 (тактовый сигнал по переднему фронту)

Блок счетчика TC2

В зависимости от используемого режима работы счетчик очищается, увеличивается или уменьшается на каждый такт таймера (clkT2). clkT2 может генерироваться из внешнего или внутреннего источника синхронизации, выбираемого битами выбора синхронизации (CS2[2:0]).
Последовательность счета определяется настройкой битов WGM21 и WGM20, расположенных в регистре управления таймером/счетчиком (TCCR2A), и бита WGM22, расположенного в регистре управления таймером/счетчиком B (TCCR2B).

Режимы работы TC2

Режим работы, т. е. поведение контактов таймера/счетчика и выходного сравнения, определяется комбинацией режима генерации сигналов (WGM2[2:0]) и режима сравнения выходных данных. (COM2x[1:0]) бит.
Доступные режимы работы:

  • Нормальный режим
  • Очистить таймер в режиме сравнения совпадений (CTC)
  • Быстрый режим ШИМ
  • Фазокорректный режим ШИМ

Нормальный режим

В нормальном режиме (WGM22:0 = 0) направление счета всегда вверх (приращение) без сброса счетчика. Счетчик перейдет на 0c00, когда пройдет максимальное 8-битное значение (TOP = 0xFF).

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

Независимо от того, какой режим используется, программист должен помнить две вещи:

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

Таймер и счетчик в микроконтроллере AVR Atmega32A

Это руководство посвящено таймеру и счетчику в микроконтроллере AVR Atmega32A. Таймер — довольно сложная тема в микроконтроллере. Вместо того, чтобы повторять содержание таблицы и обсуждать описание регистра, мы сосредоточимся на основных деталях. В конце мы рассмотрим реальный пример вместе с принципиальной схемой и фрагментом кода. Все микроконтроллеры работают на заданной тактовой частоте, все они имеют возможность установки таймера для различных приложений. Таймеры могут показывать время и считать. Эти синхронизация и подсчет позволяют делать действительно интересные вещи, такие как подсчет, мониторинг внешних событий, генерация частоты, управление яркостью светодиода с помощью ШИМ, управление углом вала сервопривода, получение данных датчика, которые передаются в ШИМ, и многое другое…..

Все микроконтроллеры имеют часы в качестве встроенного периферийного устройства, а также можно добавить внешний кристалл или резонатор для более точного счета. Микроконтроллеру нужны часы, чтобы управлять процессом, который происходит в нашей программе. Программа или инструкция выполняется микроконтроллером в ритме с часами. Важно понимать, что функции таймера и счетчика в микроконтроллере просто считают синхронно с часами микроконтроллера. С другой стороны, таймеры могут работать асинхронно с ядром AVR. Это означает, что таймеры полностью независимы от процессора. В этом случае мы будем использовать микроконтроллер AVR Atmega32A, который имеет два 8-битных и один 16-битный таймер. Это означает, что у нас всего 3 таймера в нашем чипе. Два 8-битных таймера-счетчика досчитывают до 255, а один 16-разрядный таймер досчитывает до 65535.

Таймер 0 8-битный счетчик Количество от до 255
Таймер 1 16-битный счетчик Количество от до 65535
Таймер 2 8-битный счетчик Количество от до 255

Таймеры обычно используются в одном из следующих режимов:

  1. Нормальный режим
  2. Режим CTC
  3. Быстрый режим ШИМ
  4. Фазокорректный режим ШИМ

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

Прескалер, зачем нужен?

Предварительное масштабирование — это процесс генерации часов для таймера по часам F_CPU . Его также можно использовать в качестве счетчика для пропуска определенного количества тактов микроконтроллера. Микроконтроллер AVR позволяет предварительно масштабировать или пропускать число 8 , 64 , 256 , 1024 . Например: , если в качестве значения предварительного масштабирования установлено 64, то счетчик будет считать каждый раз, когда часы отсчитывают 64 раза, что означает, что за одну секунду, когда часы микроконтроллера отсчитывают миллион раз (по умолчанию), счетчик будет считать только до 15 625 ( 1000000/64=15 625). Вы можете видеть, что счетчик счетчика достигает 15 625 , тогда вы можете мигать светодиодом каждую секунду.

Режим CTC: (очистить таймер при сравнении совпадений)

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

Пример Учебник: В этом примере мы будем использовать timer-1 . Это 16-битный таймер, и для простоты и краткости мы не используем предварительный делитель. В этом случае мы используем регистр управления счетчиком таймера 9.0003 TCCR1B и установите бит CS10 в высокий уровень (1). См. номер страницы технического описания 115.

Мы подключили индикатор жадности и сопротивление (360 Ом) к контакту номер 1, который является контактом PB0 микроконтроллера.

Принципиальная схема (схематическая)
Исходный код: Таймер в микроконтроллере AVR Atmega32A
 /*
 * Пример проекта: TimerTest.					

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

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