В АТ902313 предусмотрены два таймера/счетчика общего назначения: 8-разрядный таймер/счетчик О (Т/СО) и 16-разрядный таймер/счетчик 1 (Т/С1). Таймер Т/С1 может работать в режиме широтно-импульс-ной модуляции (ШИМ). Рассмотрим подробнее все особенности работы Т/С1 вышеуказанного микроконтроллера в режиме ШИМ.
В качестве источников импульсов для таймера можно выбрать сигнал с тактовой частотой микроконтроллера (СК), импульсы предварительного делителя (СК/8, СК/64, СК/256, СК/1024) или импульсы с соответствующего внешнего вывода.
Рассмотрим регистры управления Т/С1 -TCCR1AH TCCR1B. Назначение битов регистра TCCR1А приведе-но в таблице 1. Функции битов СОМ1А1, СОМ1А0 в режиме ШИМ приведены в таблице 2. Биты 5-2 в АТ902313 зарезервированы и всегда читаются как 0. Функции битов PWM11, PWM10 приведены в таблице 3. Назначение битов регистра TCCR1B приведено в таблице 4.
Бит 7 (ICNC1) - подавитель входного шума на входе захвата. Если ICNC1=0, то подавление входного шума входа захвата запрещено. При этом захват срабатывает по первому заданному(нарастающему или спадающему) фронту сигнала на выводе ICP (вывод 11). При установке бита обрабатываются четыре последовательные выборки сигнала на выводе ICP. Для срабатывания захвата все выборки должны соответствовать уровню, заданному битом ICES1. Частота выборок равна тактовой частоте процессора.
Таблица 1. Назначение битов регистра TCCR1A
Таблица 2. Функции битов СОМ1А1, СОМ1А0 в режиме ШИМ
Таблица 3. Функции битов PWM11, PWM10
Таблица 4. Назначение битов регистра TCCR1B
Бит 6 (ICES1) - выбор фронта захвата сигнала. Если ICES1 =0, содержимое таймера/счетчика 1 переписывается в регистр захвата по спадающему фронту на выводе ICP. Если бит установлен, - по нарастающему.
Биты 5,4 в АТ902313 зарезервированы и всегда читаются как 0. Бит 3 (СТС1) - очистка таймера/счетчика 1 по совпадению. В режиме ШИМ этот бит не работает. Биты CS12, CS11, CS10 отвечают за выбор тактовой частоты. Они задают коэффициент предварительного деления для таймера/ счетчика 1. Назначение данных битов приведено в таблице 5.
Т/С1 можно использовать как 8-, 9-, 10-разрядный широтно-им-пульсный модулятор. В этом случае счетчик и регистр OCR1A работают как защищенный от дребезга независимый ШИМ с отцентрированными импульсами.
При выборе режима ШИМ таймер/ счетчик 1 и регистр совпадения OCR1A формируют 8-, 9-, 10-разрядный непрерывный, свободный от "дрожания" и правильный по фазе сигнал, выводимый на вывод 15 (ОС1) микроконтроллера. Таймер/счетчик 1 работает как реверсивный счетчик, считающий от нуля до конечного значения. Конечное значение таймера и частота ШИМ приведены в таблице 6.
При достижении конечного значения счетчик начинает считать в обратную сторону до нуля, после чего рабочий цикл повторяется. Когда значение счетчика совпадет с 8, 9, 10 младшими битами регистра OCR1A, вывод 15 (ОС1) устанавливается или сбрасывается в соответствии с установками битов СОМ1А1 и СОМ1А0 в регистре TCCR1A (таблица 2). Программные ресурсы данного микроконтроллера позволяют реализовать ШИМ с достаточно гибким управлением и большим диапазоном задаваемых частот. Принципиальная схема широтно-импульсного модулятора (далее - устройства) на базе микроконтроллера AT902313-10PI представлена на рис. 1.
В этом устройстве использована 8-разрядная ШИМ. Поэтому в регистр TCCR1A загружается число 0Ь11000001. Для согласования двухразрядного числа, индицируемого на индикаторах HG1, HG2 с конечным значением таймера/счетчика 1, в программе заложена формула Y=2,5X, где X - число, индицируемое на индикаторах; Y - число, загружаемое в счетчик таймера/ счетчика 1. На дисплее в этом случае индицируется относительная величина (в %) загрузки числа в счетчик. Реально в счетчик загружается число от 0 до 247.
Рис. 1. Принципиальная схема широтно-импульсного модулятора
Индикатор HL1 включается с вывода 11 микроконтроллера DD1. Через порт В микроконтроллер DD1 управляет клавиатурой (кнопки S1...S3) и динамической индикацией. Динамическая индикация собрана на транзисторах VT1 , VT2, цифровых семисег-ментных индикаторах HG1, HG2.
Резисторы R4 - R11 - токоограни-чительные для сегментов индикаторов HG1, HG2. Коды для включения индикаторов HG1, HG2 при функционировании динамической индикации поступают на порт В микроконтроллера DD1. Для функционирования клавиатуры задействован также вывод 6 микроконтроллера DD1.
Рабочая частота (10 МГц) микроконтроллера задается генератором с внешним резонатором ZQ1.
В интерфейс устройства входят клавиатура (кнопки S1-S3), индикатор HL1 и блок индикации (дисплей) из двух цифровых семисегментных индикаторов HG1 и HG2. Интерфейс достаточно компактен, удобен и имеет хорошую читаемость. Кнопки клавиатуры имеют следующие назначения:
- S1 (А) - увеличение на единицу значения ШИМ (в %) при удержании данной кнопки в нажатом состоянии более 2 с; значение ШИМ, индицируемое на дисплее, увеличивается на 5 единиц за 1 с;
- S2 (у) - уменьшение на единицу значения ШИМ (в %) при удержании данной кнопки в нажатом состоянии более 2 с; значение ШИМ, индицируемое на дисплее, уменьшается на 5 единиц за 1 с;
- S3 (С) - выключение ШИМ; при выключении ШИМ выключается индикатор HL1, на выводе 15 микроконтроллера - лог. 1. Для включения ШИМ достаточно нажать кнопку S1 или S2. При включенной ШИМ индикатор HL1 включен.
Таблица 5. Назначение битов CS12, CS11, CS10
Таблица 6. Конечное значение таймера и частота ШИМ
Системный сброс микроконтроллера AT90S2313-10PI осуществляется сигналом низкого уровня через RC-цепь (резистор R3, конденсатор СЗ). Сразу после подачи питания инициализируются регистры, счетчики, стек, таймеры Т/СО и Т/С1, сторожевой таймер, порты ввода/вывода. При инициализации индикатор HL1 отключен. На индикаторах HG1 и HG2 индицируются нули.
Для перевода устройства в рабочий режим необходимо кнопками S1 (А), S2 (у) установить необходимое значение ШИМ, при этом включится индикатор HL1. Для отключения ШИМ надо нажать на кнопку S3 (С), на выводе 15 микроконтроллера при этом установится лог. 1.
Программа, листинг которой можно найти на сайте журнала "Современная электроника" (www.soel.ru), состоит из трех основных частей: инициализации, основной программы, работающей в замкнутом цикле, и подпрограммы обработки прерывания от таймера T/C0 (метки INIT, SE1, S0).
В основной программе происходят инкремент и декремент заданного значения ШИМ.
В програамме обработки прерывания от таймера Т/СО осуществляются опрос клавиатуры и перекодировка двоичного числа значений времени в код для отображения информации на семисегментных индикаторах и разрядов динамической индикации. В памяти данных микроконтроллера с адреса $60 по $61 организован буфер отображения для динамической индикации.
Каждый байт из функциональной группы цикла в подпрограмме обработки прерывания таймера Т/СО (метка SO) после перекодировки выводится в порт В микроконтроллера. Для включения индикаторов HG1, HG2 необходимо установить лог. 0 на выводах 2, 3, микроконтроллера DD1 соответственно.
Так, например, для того чтобы на индикаторе HG1 индицировалось число "1", необходимо двоично-десятичное число, расположенное по адресу $60, перекодировать, вывести в порт В микроконтроллера и установить лог 0 на выводе 2 микроконтроллера DD1. Записывая поочередно после перекодировки в цикле в порт В микроконтроллера байты из функциональной группы буфера отображения и лог 0 на соответствующие выводы порта D, получаем режим динамической индикации.
В процессе выполнения подпрограммы прерывания происходит опрос клавиатуры. Младшая тетрада выводимого при этом в порт В микроконтроллера байта для клавиатуры представляет собой код "бегущий ноль". После записи данного байта в порт В микроконтроллер DD1 анализирует сигнал на входе 6 порта D. В рамках вышеуказанной подпрограммы при любой нажатой кнопке на входе 6 микроконтроллера присутствует лог. 0. Таким образом, каждая кнопка клавиатуры привязана к "своему" разряду в младшей тетраде байта данных, выводимого в порт В микроконтроллера для опроса клавиатуры.
При нажатии на кнопку S1 текущее значение ШИМ на дисплее увеличивается на единицу и устанавливается флаг, разрешающий увеличивать значение ШИМ, индицируемое на дисплее. Одновременно запускается счет-чик, организованный на R2, формирующий интервал 2 с. Если кнопка удерживается более 2 с, значение ШИМ, индицируемое на дисплее, увеличивается на 5 единиц за 1 с. При отпускании кнопки S1 все вышеуказанные счетчики обнуляются.
Аналогичным образом организована работа кнопки S2 для уменьшения значения ШИМ, индицируемого на дисплее. При нажатии на кнопку S2 текущее значение времени на дисплее уменьшается на единицу. Если кнопка удерживается более 2 с, значение времени, индицируемое на дисплее, уменьшается на 5 единиц за 1 с. Счетчики приведенного алгоритма для кнопки S2 организованы соответственно в регистрах R3, R4.
В регистре R22 осуществляется выбор разрядов динамической индикации. При инициализации в R22 заносится число ObOOOOOOOL При каждом обращении к подпрограмме обработки прерывания единица сдвигается влево, подготавливая включение следующего разряда. В подпрограмме также осуществляется проверка, не вышла ли единица за пределы разрядной сетки, т.е. после числа ОЬОООООЮО в R22 загружается снова 0Ь00000001.
Все флаги, которые используются при работе программы, хранятся в регистрах R24, R25. Назначение каждого флага приведено в тексте программы.
Понятно, что частота ШИМ "привязана" к частоте кварцевого резонатора ZQ1, подключаемого к микроконтроллеру. Нетрудно подсчитать, что при частоте кварцевого резонатора 10 МГц в программе при 8-разрядной ШИМ можно задать минимальную частоту ШИМ -10 000 000Гц/1024x510=19,15Гц - и максимальную - 10 000 000Гц/ 510=19607,8Гц.
Разработанная программа на ассемблере занимает порядка 0,7 Кб памяти программ микроконтроллера.
Потребление тока от источника +5В не более 100 мА. В схеме, представленной на рис. 1, применены конденсаторы С1-С5 типа К10-17а.
Конденсатор С6 типа К50-35 устанавливается между цепью +5В и общим проводником микроконтроллера DD1. В схемах применены резисторы типа С2-ЗЗН-0.125.
Индикаторы HG1, HG2 зеленого цвета HDSP-F501. Подойдут любые другие индикаторы с общим анодом и приемлемой яркостью свечения, например, отечественные типа АЛС321. Индикатором HL1 красного цвета может служить любой подходящий светодиод с 1пр=10 мА.
Литература:
1. Фрунзе, А. В. Микроконтроллеры? Это же просто! Том 3. М.: ИД СКИМЕН, 2002.
2. Голубцов, М. С, Кириченко-ва, А. В. Микроконтроллеры AVR: от простого к сложному. Изд. 2-е испр. и доп. М.: СОЛОН-Пресс, 2005.
3. Нефедов, А. В. Интегральные микросхемы и их зарубежные аналоги. Справочник. Т. 8. М.: ИП Радио-Софт, 1999.
Статья предоставлена редакцией журнала Электроника. Другие статьи журнала "Электроника" можно прочитать на сайте журнала.
ia ebal etaot sait i vse io adminov i ix lubincav gia kvachi.