В ATtiny2313 предусмотрены два таймера/счётчика общего назначения: 8разрядный (Т/С0) и 16разрядный (Т/С1). Оба они могут работать в режиме ШИМ. Рассмотрим подробнее все особенности работы Т/С1 указанного микроконтроллера в режиме ШИМ. Модуль Т/С1 поддерживает следующие режимы работы:
- Normal (нормальный режим);
- СТС (сброс при совпадении);
- Phase Correct PWM (ШИМ, корректный по фазе);
- Phase Correct and Frequency Correct PWM (ШИМ, корректный по фазе и частоте);
- Fast PWM (быстрый ШИМ).
Микроконтроллер в представленном устройстве, как уже упоминалось, работает в режиме Phase Correct PWM (ШИМ, корректный по фазе). Рассмотрим детально данный режим работы.
В качестве источников импульсов для таймера можно выбрать сигнал с тактовой частотой микроконтроллера (СК), импульсы предварительного делителя (СК/8, СК/64, СК/256, СК/1024) или импульсы с соответствующего внешнего вывода.
Для управления Т/С1 используются два регистра. Это регистры TCCR1A и TCCR1В. Биты регистра TCCR1A приведены в таблице 1.

Биты 7 (COM1A1) и 6 (COM1A0) – выбор режима работы выхода совпадения порта А (вывод 15 микроконтроллера). Биты 5 (COM1В1) и 4 (COM1В0) – выбор режима работы выхода совпадения порта В (вывод 16 микроконтроллера). Соответствие значений битов 7, 6, а также битов 5, 4 режимам работы портов A и B в режиме Phase Correct PWM (или Phase Correct and Frequency Correct) приведено в таблице 2.

Выбор данных режимов осуществляется при помощи бита WGM13 в регистре TCCR1В. Биты 2, 3 регистра TCCR1A зарезервированы и всегда читаются как 0. Настройка работы Т/С1 битами WGM11, WGM10 для режима Phase Correct PWM приведена в таблице 3.


Биты регистра TCCR1В приведены в таблице 4. Бит 7 (ICNC1) разрешает работу шумоподавителя на входе захвата. Если ICNC1 = 0, то подавление входного шума входа захвата запрещено. Установка этого бита в единицу активизирует схему шумоподавителя на входе захвата. При этом захват срабатывает по первому заданному (нарастающему или спадающему) фронту сигнала на входе ICP1. При установке бита обрабатываются четыре последовательные выборки сигнала на входе ICP1. Для срабатывания захвата все выборки должны соответствовать уровню, заданному битом ICES1. Частота выборок равна тактовой частоте генератора. Бит 6 (ICES1) определяет выбор фронта захвата сигнала. Если ICES1 = 0, содержимое Т/С1 переписывается в регистр захвата по спадающему фронту на входе ICP. Если бит установлен – по нарастающему. Бит 5 зарезервирован и всегда читается как 0. Биты 4, 3 (WGM13, WGM12) служат для выбора режима генерации сигнала. Биты 2, 1, 0 (CS12, CS11, CS10) предназначены для выбора тактовой частоты. Эти биты задают коэффициент предварительного деления для Т/С1. Соответствие настроек указанных битов режимам работы Т/С1 приведено в таблице 5.

В режиме Phase Correct PWM таймер/счётчик Т/С1 можно использовать как 8, 9 или 10разрядный широтноимпульсный модулятор. В этом случае счётчик и регистр OCR1А (ОСR1В) работают как защищённый от дребезга независимый ШИМ с отцентрированными импульсами.
При выборе режима широтноимпульсной модуляции таймер/счётчик Т/С1 и регистр совпадения OCR1A (ОСR1В) формируют 8, 9 или 10разрядный непрерывный, свободный от «дрожания» и правильный по фазе сигнал, подающийся на вывод 15 (вывод 16 для ОСR1В) микроконтроллера. Т/С1 работает как реверсивный счётчик, считающий от нуля до конечного значения. Конечное значение таймера и соответствующая частота ШИМ приведены в таблице 6.

При достижении конечного значения счётчик начинает считать в обратную сторону до нуля, после чего рабочий цикл повторяется. Когда значение счётчика совпадёт с 8, 9 или 10, в зависимости от выбранной разрядности, младшими битами регистра OCR1A (ОСR1В), вывод 15 (вывод 16 для ОСR1В) устанавливается или сбрасывается в соответствии с установками битов СОМ1А1 и СОМ1А0 (СОМ1В1 и СОМ1В0 для порта B) в регистре TCCR1A (см. таблицу 2). В целом, программные ресурсы данного микроконтроллера ATtiny2313 позволяют реализовать ШИМ с достаточно гибким управлением и с большим диапазоном задаваемых частот.
Принципиальная схема широтноимпульсного модулятора (далее – устройства) на базе микроконтроллера ATtiny2313PU представлена на рисунке 1.

В устройстве задействован 8разрядный Phase Correct PWM с выходом ОСА1. Поэтому в регистр TCCR1A загружается число 0b11000001. Для согласования двухразрядного числа, индицируемого на индикаторах HG1 и HG2, c конечным значением таймера/счётчика Т/С1, в программе заложена формула: Y = 2,5 × X, где X – число, индицируемое на индикаторах, Y – число, загружаемое в Т/С1. На дисплее в этом случае индицируется относительная величина (в %) загрузки числа в счётчик. Реально в счётчик загружается число от 0 до 247.
Индикатор HL1 включается с вывода 11 микроконтроллера DD1. Через порт В микроконтроллер DD1 управляет клавиатурой (кнопки S1…S3) и динамической индикацией. Динамическая индикация собрана на транзисторах VT1, VT2 и цифровых семисегментных индикаторах HG1, HG2. Резисторы R4…R11 выполняют функцию токоограничителей для сегментов индикаторов HG1, HG2. Коды для включения индикаторов HG1, HG2 при функционировании динамической индикации поступают на порт В микроконтроллера DD1. Для функционирования клавиатуры задействован также вывод 6 микроконтроллера DD1. Выходной сигнал ШИМ поступает на контакт 1 соединителя Х2 с выхода эмиттерного повторителя, собранного на транзисторе VT1. Рабочая частота 10 МГц микроконтроллера задаётся генератором с внешним резонатором ZQ1.
Элементы интерфейса устройства: клавиатура (кнопки S1…S3), индикатор HL1 и блок индикации (дисплей), состоящий из двух цифровых семисегментных индикаторов HG1, HG2. Кнопки клавиатуры имеют следующие назначения:
S1 (Δ) – увеличение на единицу значения ШИМ (в %) при удержании данной кнопки в нажатом состоянии не более двух секунд (при нажатии более двух секунд значение ШИМ, индицируемое на дисплее, увеличивается на пять единиц за одну секунду);
S2 (∇) – уменьшение на единицу значения ШИМ (в %) при удержании данной кнопки в нажатом состоянии не более двух секунд (при нажатии более двух секунд значение ШИМ, индицируемое на дисплее, уменьшается на пять единиц за одну секунду);
S3 (C) – выключение ШИМ (при выключении ШИМ выключается индикатор HL1, на выводе 15 микроконтроллера – логическая «1»).
Фотография интерфейса устройства на макетной плате приведена на рисунке 2.

Для включения ШИМ достаточно нажать кнопку S1 или S2. При включённом ШИМ индикатор HL1, соответственно, тоже включён.
Системный сброс микроконтроллера DD1 осуществляется сигналом низкого уровня, через RCцепь (резистор R3, конденсатор С3). При инициализации индикатор HL1 отключён. На индикаторах HG1, HG2 индицируются нули. Для перевода устройства в рабочий режим необходимо кнопками S1, S2 установить необходимое значение ШИМ. При этом включится индикатор HL1. Для отключения ШИМ необходимо нажать на кнопку S3. На выводе 15 микроконтроллера при этом установится логическая «1».
Программа микроконтроллера состоит из трёх основных частей: процедура инициализации, основная программа, работающая в замкнутом цикле, и подпрограмма обработки прерывания от таймера/счётчика T/C0 (соответственно, метки INIT, SE1, S0).
В основной программе происходит инкремент и декремент заданного значения ШИМ.
В подпрограмме обработки прерывания от таймера/счётчика T/C0 происходит опрос клавиатуры и перекодировка двоичного числа значений времени в код для отображения информации на семисегментных индикаторах, а также отображения разрядов в динамической индикации. В памяти данных микроконтроллера с адреса $60 по $61 организован буфер отображения для динамической индикации.
Каждый байт из функциональной группы в цикле, в подпрограмме обработки прерывания таймера T/C0 (метка S0), после перекодировки выводится в порт В микроконтроллера. Для включения индикаторов HG1, HG2 необходимо установить логический «0» на выводах 2 и 3 микроконтроллера DD1. Например, для того чтобы на индикаторе HG1 индицировалось число «1», необходимо двоичнодесятичное число, расположенное по адресу $60, перекодировать, вывести в порт B микроконтроллера и установить логический «0» на выводе 2 (порт D) микроконтроллера DD1. Записывая поочерёдно после перекодировки, в цикле, в порт B микроконтроллера байты из функциональной группы буфера отображения и логический «0» на соответствующий вывод порта D, мы получаем режим динамической индикации.
В процессе обработки подпрограммы прерывания происходит опрос клавиатуры. Младшая тетрада выводимого при этом в порт В микроконтроллера байта для клавиатуры представляет собой код «бегущий ноль». После записи данного байта в порт В микроконтроллер DD1 анализирует сигнал на входе 6 порта D. В рамках подпрограммы, при любой нажатой кнопке, на входе 6 микроконтроллера присутствует логический «0». Таким образом, каждая кнопка клавиатуры «привязана» к «своему» разряду в младшей тетраде байта данных, выводимого в порт B микроконтроллера для опроса клавиатуры.
При нажатии на кнопку S1 текущее значение ШИМ на дисплее увеличивается на единицу и устанавливается флаг, разрешающий увеличивать значение ШИМ, индицируемое на дисплее. Одновременно запускается счётчик, организованный на регистре R2, формирующий интервал в две секунды. Если кнопка удерживается более двух секунд, значение ШИМ, индицируемое на дисплее, увеличивается на пять единиц за одну секунду. Интервал времени, в течение которого происходит увеличение значения, организован в регистре R1. При отпускании кнопки S1 все указанные счётчики обнуляются.
Аналогичным образом организована работа кнопки S2 для уменьшения значения ШИМ, индицируемого на дисплее. При нажатии на кнопку S2 текущее значение времени на дисплее уменьшается на единицу. Если кнопка удерживается более двух секунд, значение времени, индицируемое на дисплее, уменьшается на пять единиц за одну секунду. Счётчики приведённого алгоритма для кнопки S2 организованы, соответственно, в регистрах R3, R4. В листинге 1 (исходный текст программы содержится в архиве, который доступен для загрузки на сайте журнала www.soel.ru) приведён фрагмент программы работы клавиатуры.
В регистре R22 осуществляется выбор разрядов в динамической индикации. При инициализации в R22 заносится число 0b00000001. При каждом обращении к подпрограмме обработки прерывания единица сдвигается влево, подготавливая включение следующего разряда. В подпрограмме также осуществляется проверка, не вышла ли единица за пределы разрядной сетки, т.е. после числа 0b00000100 в R22 загружается снова 0b00000001. Все флаги, которые используются при работе программы, выполнены на регистрах R24, R25. Назначение каждого флага приведено в тексте программы.
Разработанная программа на ассемблере (см. листинг 2 – исходный текст программы содержится в архиве, который доступен для загрузки на сайте журнала www.soel.ru) занимает порядка 0,7 кбайт памяти программ микроконтроллера. Потребление тока по каналу напряжения +5 В составляет не более 100 мА. В схеме, представленной на рисунке 1, применены конденсаторы С1…С5 типа К1017а. Конденсатор С6 – типа К5035. Данный конденсатор устанавливается между цепью +5 В и общим проводником микроконтроллера DD1. Применены резисторы типа С233Н0.125.
Скачать
Если вам понравился материал, кликните значок — вы поможете нам узнать, каким статьям и новостям следует отдавать предпочтение. Если вы хотите обсудить материал —не стесняйтесь оставлять свои комментарии : возможно, они будут полезны другим нашим читателям!

