В предыдущей статье [1] уже рассказывалось о структуре микроконтроллера ATtiny2313, тем не менее, стоит сделать ряд дополнений. В микроконтроллере имеется два таймера счётчика общего назначения: 8-разрядный таймер/счётчик 0 (Т/С0) и 16-разрядный таймер/счётчик 1 (Т/С1). Оба таймера могут работать в режиме ШИМ. Модуль 16-разрядного таймера/счётчика 1 позволяет с высокой точностью формировать временные интервалы, генерацию периодических сигналов, импульсы заданной длительности. Отметим основные особенности Т/С1:
- 16-разрядная структура;
- два независимых модуля совпадения;
- двойная буферизация регистров совпадения;
- модуль захвата;
- схема фильтрации помех в режиме захвата;
- режим сброса при совпадении (автоперезагрузка);
- помехозащищённый, фазонезависимый широтноимпульсный модулятор (ШИМ);
- изменяемый период ШИМ;
- генератор сигналов;
- счётчик внешних событий;
- четыре независимых источника прерывания (TOV1, OCF1A, OCF1B, ICF1).
В ATtiny2313 таймер/счётчик 1 был модифицирован и улучшен по сравнению с предыдущими версиями этого счётчика (например, в микросхеме AT90S2313). Новый Т/С1 полностью совместим с более ранними версиями по следующим параметрам:
- все 16-разрядные регистры управления Т/С1 имеют те же самые адреса в адресном пространстве микроконтроллера, включая регистр прерывания таймера;
- сохранено расположение всех битов во всех 16-разрядных регистрах Т/С1, включая регистр прерывания по таймеру;
- сохранены адреса всех векторов прерываний.
И всё же, несмотря на предпринятые меры по совместимости нового 16-разрядного таймера/счётчика 1 со старым вариантом, в некоторых случаях совместимость будет неполная.
Изменили своё название, но имеют те же функциональные возможности и местоположение в регистрах, следующие служебные биты:
- PWM10 изменён на WGM10;
- PWM11 изменён на WGM11;
- CTC1 изменён на WGM12.
Использованы следующие новые биты в регистрах управления:
- биты FOC1A и FOC1B введены дополнительно в регистр TCCR1A;
- бит WGM13 введён дополнительно в регистр TCCR1B.
Рассмотрим подробнее все особенности работы Т/С1 указанного микроконтроллера в режиме ШИМ. Модуль Т/С1 поддерживает следующие режимы работы:
- режим Normal;
- режим сброса при совпадении (СТС);
- режим Phase Correct PWM (ШИМ, корректный по фазе);
- режим Phase Correct and Frequency Correct PWM (ШИМ, корректный по фазе и частоте);
- режим Fast PWM (быстрый ШИМ).
Микроконтроллер в представленном устройстве, как уже упоминалось, работает в режиме Phase Correct PWM (ШИМ, корректный по фазе) и Fast PWM (быстрый ШИМ). Общая информация о настройках режимов микроконтроллера была приведена в [1].

Различные режимы работы Т/С1, в зависимости от устанавливаемых битов регистров TCCR1А, TCCR1В, приведены в таблице, где BOTTOM = 0х0000, MAX = 0хFFFF. Значение TOP зависит от выбранного режима и может иметь одно из трёх фиксированных значений: 0х00FF, 0х01FF, 0х03FF, также оно может определяться значением регистра OCR1A или регистра ICR1.
В режиме Phase Correct PWM и Fast PWM таймер/счётчик Т/С1 можно использовать как 8-, 9- или 10-разрядный широтно-импульсный модулятор. В этом случае счётчик и регистр OCR1А (ОСR1В) работают как защищённый от дребезга независимый ШИМ с отцентрированными импульсами.
Принципиальная схема широтно-импульсного модулятора (далее – устройство) на базе микроконтроллера ATtiny2313-PU представлена на рисунке 1.

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

Системный сброс микроконтроллера DD1 осуществляется сигналом низкого уровня, через RC-цепь (резистор R3, конденсатор С3). При инициализации индикатор HL1 отключён. На индикаторах HG1…HG4 индицируются нули. Для перевода устройства в рабочий режим необходимо кнопками S1 (Δ) и S2 (∇) установить необходимое значение ШИМ, при этом включится индикатор HL1. Для отключения ШИМ нажать на кнопку S3 (С), на выводе 15 микроконтроллера при этом установится логическая 1.
Программа состоит из трёх основных частей: процедура инициализации, основная программа, работающая в замкнутом цикле, и подпрограмма обработки прерывания от таймера T/C0 (соответственно, метки INIT, SE1 и S0).
В основной программе происходит инкремент и декремент заданного значения ШИМ.
В подпрограмме обработки прерывания от таймера/счётчика T/C0 происходит опрос клавиатуры и перекодировка двоичного числа значений времени в код для отображения информации на семисегментных индикаторах и отображения разрядов в динамической индикации. В памяти данных микроконтроллера с адреса $60 по $63 организован буфер отображения для динамической индикации.
Каждый байт из функциональной группы в цикле, в подпрограмме обработки прерывания таймера T/C0 (метка S0), после перекодировки выводится в порт РВ микроконтроллера DD1. В процессе обработки подпрограммы прерывания происходит опрос клавиатуры. Выводимый при этом в порт PВ микроконтроллера байт для клавиатуры представляет собой код «бегущий ноль». После записи данного байта в порт PВ, микроконтроллер DD1 анализирует сигнал на входе 6 порта D. В рамках указанной подпрограммы, при любой нажатой кнопке, на входе 6 микроконтроллера присутствует логический 0. Таким образом, каждая кнопка клавиатуры привязана к своему разряду в выводимом байте данных.
При нажатии на кнопку S1 текущее значение ШИМ на дисплее увеличивается на единицу и устанавливается флаг, разрешающий увеличивать значение ШИМ, индицируемое на дисплее. Одновременно запускается счётчик, организованный на регистре R2, формирующий интервал в две секунды. Если кнопка удерживается более двух секунд, значение ШИМ, индицируемое на дисплее, увеличивается на 5 единиц за одну секунду. Интервал времени, в течение которого происходит увеличение, организован в регистре R1. При отпускании кнопки S1 все указанные счётчики обнуляются.
Аналогичным образом организована работа кнопки S2 для уменьшения значения ШИМ, индицируемого на дисплее. При нажатии на кнопку S2 текущее значение на дисплее уменьшается на единицу. Если кнопка удерживается более двух секунд, значение, индицируемое на дисплее, уменьшается на 5 единиц за одну секунду. Счётчики приведённого алгоритма для кнопки S2 организованы, соответственно, в регистрах R3 и R4.
В регистре R22 осуществляется выбор разрядов в динамической индикации. При инициализации в регистр R22 заносится число 0b00000001. При каждом обращении к подпрограмме обработки прерывания единица сдвигается влево, подготавливая включение следующего разряда. В подпрограмме также осуществляется проверка: не вышла ли единица за пределы разрядной сетки, т.е. после числа 0b00010000 в R22 загружается снова 0b00000001. Все флаги, которые используются при работе программы, выполнены на регистрах R24 и R25. Назначение каждого флага приведено в тексте программы, которую можно найти в дополнительных материалах к статье на сайте журнала (www.soel.ru).
Разработанная программа на ассемблере занимает порядка 0,7 Кбайт памяти программ микроконтроллера. Потребление тока по каналу напряжения +5 В составляет не более 100 мА. В схеме, представленной на рисун-ке 1, применены конденсаторы С1…С5 типа К10-17а. Конденсатор С6 – типа К50-35. Применены резисторы типа С2-33Н-0.125.
Литература
-
Шишкин Сергей. ШИМ на микроконтроллере ATTINY2313-PU. Современная электроника. 2017. №3.
Скачать
Если вам понравился материал, кликните значок — вы поможете нам узнать, каким статьям и новостям следует отдавать предпочтение. Если вы хотите обсудить материал —не стесняйтесь оставлять свои комментарии : возможно, они будут полезны другим нашим читателям!

