Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Микроконтроллеры в системах управления. Лабораторный практикум

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
Рис. 4. Формат регистров TCCR1A и TCCR1B
PWM10PWM11------COM1B0COM1B1COM1A0COM1A1
01234567
R/WR/WRRR/WR/WR/WR/W
Чтение(R) /
Запись (W)
TCCR1A
CS10CS11CS12CTC1------ISES1ICNC1
01234567
R/WR/WR/WR/WRRR/WR/W
TCCR1B
Чтение(R) /
Запись (W)
счетного регистра происходило одновременно, предусмотрен специальный 8-разрядный регистр TEMP (программно этот недоступен). Этот же регистр задействуется и при обращении к остальным 16-разрядным регистрам таймера/счетчика Т1: OCR1 (OCR1A и OCR1B) и ICR1. Прерывания на время обра­щения к любому из этих регистров должны быть программно запрещены.
Для выполнения полного цикла записи в 16-разрядный ре­гистр первым должен быть загружен старший байт (регистр TCNT1Н). Для выполнения полной операции чтения 16­разрядного регистра первым должен быть прочитан младший байт (регистр TCNT1L). Установка счетного регистра в нену­левое состояние перед каждым началом отсчета является од­ним из способов задания временного интервала счета (другой способ описан ниже).
Управление таймером/счетчиком Т1 осуществляется с помощью двух регистров управления TCCR1A и TCCR1B (рис. 4).
Неиспользуемые разряды регистров содержат «0» и до­ступны только для чтения. Начальное значение (после сброса микроконтроллера) всех разрядов регистра – «0». Значение разрядов этих регистров, необходимых для выполнения лабо­раторных работ, будет описано далее.
В частности, выбор источника тактового сигнала, а также запуск и остановка таймера/счетчика осуществляются с по-
31
CS12
CS11
CS10
Источник тактового сигнала
2 1 0
← Номера разрядов TCCR1B
0 0 0
Таймер/счетчик остановлен
0 0 1
СК (тактовый сигнал микроконтроллера)
0 1 0
CK/8
0 1 1
СК/64
1 0 0
СК/256
1 0 1
СК/1024
мощью разрядов CS12...CS10 регистра управления таймером TCCR1B. Соответствие между состоянием этих разрядов и ре­жимом работы таймера/счетчика приведено в табл. 4.
Таблица 4
Выбор источника тактового сигнала для таймера/счётчика Т1
Программное управление этими разрядами с помощью
маски будет описано ниже.
В таймере предусмотрен режим контроля совпадения те-
кущего значения отсчета с одним из двух заранее заданных значений. Если состояние таймера/счетчика становится рав­ным числу, находящемуся в одном из регистров совпадения, то в следующем машинном цикле устанавливается соответ­ствующий этому регистру флаг события в регистре TIFR (для регистра OCR1A – флаг ОСЕ1А, для регистра OCR1В – флаг OCF1B) и генерируется запрос на прерывание. Разрешение прерываний осуществляется установкой в «1» соответствую­щих флагов регистра TIMSK (OCIE1 в младших моделях AVR, либо OCIE1A и OCIE1B в старших моделях для регистров OCR1, OCR1A и OCR1B соответственно). Сигнал совпадения выводится в качестве альтернативной функции на один из выво­дов МК, обозначаемый ОС1А для регистра OCR1A и ОС1В для
OCR1В. Управление характером переключения сигнала ведет-
32
Разряд
Название
Описание
5
ICF1
Флаг устанавливается в «1» при загрузке содержимого таймера/счетчика в регистр
ICR1 (событие «захват»)
4
ОСF1A
Флаг устанавливается в «1» при совпадении значения таймера/счетчика Т1 с содержи­мым регистра OCR1A (событие «совпаде­ние A»)
3
ОСF1B
Флаг устанавливается в «1» при совпадении значения таймера/счетчика Т1 с содержи- мым регистра OCR1B (событие «совпаде- ние B»)
2
TOV1
Флаг устанавливается в «1» при перепол­нении таймера/счетчика Т1
ся разрядами TCCR1A и TCCR1В. Для регистра OCR1А при равенстве данных счетного регистра и регистра сравнения мо­жет выполняться сброс таймера/счетчика (Clear Timer on Compare). Задать эту функцию можно, установив в «1» при инициализации Т1 бита TCCR1B.3 – имя бита CTC1. Именно так и следует действовать, если необходимо задавать времен­ной интервал цикла таймера (другой, менее удобный способ описан выше), иначе после сравнения таймер продолжит счет до переполнения и только после этого начнет отсчет снова.
Каждый регистр сравнения физически размещается в двух регистрах ввода-вывода PBВ: OCR1A – OCR1AH: OCR1AL; OCR1B – OCR1BH:OCR1BL.
Реализованный в таймере режим захвата позволяет за­фиксировать значение кода в счетном регистре в момент появ­ления внешнего сигнала захвата, сохранив этот код ви двух­байтовом регистре захвата ICR1H:ICR1L. В данной лаборатор- ной работе он не исследуется.
Выполнение таймером своих функций отображается в ре- гистре событий TIFR в значениях соответствующих битов (флагов) – табл. 5.
Таблица 5
33
Раз-
ряд
Название
Описание
5
TICIE1
Флаг разрешения прерывания по событию «Input Capture» («захват») таймера/счетчика Т1
4
ОСIЕ1A
Флаг разрешения прерывания по событию «Compare Match A» («совпадение A») Т1
3
ОСIЕ1B
Флаг разрешения прерывания по событию «Compare Match B» («совпадение B») Т1
2
ТОIЕ1
Флаг разрешения прерывания по переполне­нию таймера-счетчика Т1
Следует обратить внимание на способ сброса любого из
этих флагов – аппаратно при запуске подпрограммы обработки соответствующего прерывания или программно – записью в него лог. «1» при программном слежении за процессом счета.
Для разрешения какого-либо прерывания от таймера необ-
ходимо заранее установить в «1» соответствующий разряд ре-
гистра маски TIMSK (табл. 6) и, разумеется, флаг I регистра SREG (см. табл. 2).
Таблица 6
Для выполнения перечисленных функций каждый таймер
использует один или более выводов МК. Как правило, эти выво­ды – линии портов ввода/вывода общего назначения (указанные в распиновке данной модели МК), а функции, реализуемые этими выводами при работе совместно с таймерами/счетчиками, явля­ются их альтернативными функциями. В этих случаях необхо­димо предварительно самостоятельно сконфигурировать эти выводы в соответствии с их функциональным назначением (вы­ход или вход с/без подтягивающего резистора).
Указания по составлению алгоритмов
Управление временем задержки
В данной работе таймер/счетчик Т1 будет использоваться
только для введения временного интервала перед или после
34
выполнения пересылки данных в порт, т.е. для формирования меток реального времени. Эти метки можно получить двумя способами: путем ожидания очередного переполнения таймера или события совпадения, как описано выше.
Использовать метки времени для выполнения каких-либо операций можно также двумя способами: контролем за появ­лением соответствующего флага в регистре событий таймера, либо формированием прерывания для перехода на подпро­грамму. Оба эти способа будут применяться в ходе выполне­ния лабораторной работы.
Способ управления временем задержки зависит от спосо­ба получения меток. В случае использования для уменьшения периода отсчета события переполнения счетного регистра сле­дует в начале каждого цикла выставлять TCNT1 в соответ­ствующее начальное значение, например, загружая константу или выражение вида $FFFF-$xxxx, где xxxx – количество тактов до переполнения. При использовании события совпадения нужно однократно, на стадии инициализации таймера, занести нужное значение в регистр OCR1A (OCR1 для простейших МК).
Дополнительно масштаб задержки можно изменять с по­мощью предделителя тактовой частоты таймера – см. табл. 4.
Режим обслуживания прерываний
Для удобства программирования Algorithm Builder поддер-
живает специальный вид меток – метки обслуживания прерыва­ний. Для обслуживания прерывания вам необходимо дать метке (вершине) стандартное имя прерывания, не вводя это имя вруч­ную, а выбрав пункт меню “Элементы\Прерывания\…”.
В случае, кода программа имеет входы в подпрограммы прерывания, исходный вертекс основного алгоритма обяза­тельно должен быть маркирован меткой “Reset”. Это обеспе­чит загрузку в нулевой адрес безусловного перехода на начало алгоритма. Метку “Reset” следует также устанавливать только через меню “Элементы\Прерывания\…”
35
…
Пример:
Если алгоритм построен таким образом, что может пре-
рвать исполнение какого-либо процесса, то в подпрограмме обработки прерываний необходимо позаботиться о сохранении состояния регистров, бит, переменных и т.д., которые могут быть переопределены этой подпрограммой, а по ее окончании должны быть восстановлены.
Таким образом, для того, чтобы создать прерывание,
необходимо обеспечить следующее:
1. Создать вертекс, т.е. вершину “Reset”, с которой бу-
дет начинаться исполнение программы.
2. Определить указатель стека – либо в явной форме, за­гружая значения в SPH и SPL (первым должен быть загружен именно старший байт), либо настройщиком “SP” (по умолча­нию это максимальный адрес SRAM выбранной модели, ука­зываемый настройщику в библиотеке).
3. Настроить таймер соответствующим сеттером, задав частоту предделителя, необходимые режимы (сравнение и сброс).
4. Разрешить соответствующим сеттером данное преры­вание (для таймеров – это соответствующие биты регистра
TIMSK).
5. Разрешить глобальное прерывание через регистр состоя- ния процессора, задав в алгоритме строку “1 -> I”.
36
6. Ввести подпрограмму обработки прерывания, которая
должна начинаться от вершины с именем прерывания (см. вы­ше), а заканчиваться обязательно оператором “RetI”.
Если требуется получать разовые, а не периодические прерывания от таймера, то следует запускать его непосред­ственно в нужном месте программы и формировать там цикл ожидания с какой-либо переменной. В подпрограмме обработ­ки прерывания таймер нужно останавливать и обнулять, а пе­ременную устанавливать в состояние, выводящее программу из ожидания.
Порядок выполнения работы
Предварительное задание
1. Изучите сведения о таймерах МК и их регистрах.
В случае надобности используйте файлы учебных материалов и лекции, подготовьте ответы на следующие контрольные во­просы: Объясните механизм создания временной задержки без по-
мощи таймера, известный вам из предыдущей лаборатор­ной работы.
Организация таймеров МК AVR. Их функции и возможно-
сти использования.
Конфигурирование таймеров и управление ими. Регистр состояния (флагов) таймера Т1, значение его битов. Какие способы можно использовать для получения меток
времени от таймера?
Как управлять временем задержки? Какие способы можно использовать для организации вы-
полнения заданной операции по сигналу таймера?
2. Изучите рабочее задание и подготовьтесь к его выпол-
нению.
37
Рабочее задание
1. Откройте АВ, загрузите ваш проект LR1_2 и сохраните
его как LR2_1.
2. Переработайте свой алгоритм, применив таймер Т1
вместо цикла «Пауза», в порядке, излагаемом ниже. При этом для формирования задержки используйте контроль за появле­нием события «Переполнение счетного регистра» по состоя­нию флага в регистре событий. Введите в алгоритм сеттер тай­мера Т1, откройте его окно, настройте на максимальную до­ступную частоту счета. Добавьте в этап инициализации обну­ление регистра событий. В циклическую часть алгоритма до­бавьте внутренний цикл ожидания появления соответствующе­го флага события (см. табл. 5), а затем установку этого флага в
исходное положение (обратите внимание на необходимое для
этого значение флага!). Поставьте на последней строке точку останова.
3. Запустите эмуляцию программы, откройте окна процес-
сора, порта, таймера (прерываний), времени процесса (#0). Проверьте работу алгоритма. Если нет ошибок, запишите в от­чет время одного цикла. Перезапишите алгоритм под тем же именем LR2_1.
4. Доработайте алгоритм, пользуясь «Указаниями…», с тем,
чтобы задавать численное значение времени задержки от тайме­ра путем начальной загрузки счетного регистра. Величину xxxx выберите так, чтобы длительность задержки существенно от­личалась от результата в п.2. Проверьте работу алгоритма, за­пишите в отчет значение xxxx и время одного цикла. Если нет ошибок, запишите алгоритм под именем LR2_2.
5. Переработайте алгоритм LR2_1, используя не перепол-
нение, а регистр совпадения выхода A. Пользуясь «Указаниями…», перенастройте сеттер Т1. Добавьте в этап инициализации установку регистра совпадений на число xxxx. Не забудьте также заменить в условном переходе имя бита со-
38
бытия. Вывод сигнала совпадения на внешний вывод не про-
граммируйте.
6. Проверьте работу алгоритма, запишите в отчет значение
xxxx и время одного цикла. Если нет ошибок, запишите алго­ритм под именем LR2_3. Определите основной недостаток ал­горитмов LR2_1… LR2_3 с точки зрения загрузки процессора.
7. Переработайте алгоритм LR2_3 в порядке, излагаемом
ниже, используя механизм прерываний, описанный выше, включая настройку маски, причем с использованием режима совпадений. Поскольку в алгоритме нет других задач, кроме пересылки и задержки, в условном переходе используйте цик­лическую проверку какого-либо бита, не связанного с тайме­ром (например, бита Т регистра состояния процессора), на од­но из его значений. Перед циклом задайте установку этого бита в противоположное значение, а в подпрограмме обслуживания прерывания – установку в состояние, выводящее программу из ожидания. Контрольную точку установите на выходе из пре­рывания.
8. Проведите контрольный логический анализ алгоритма,
опробуйте его работу, устраните ошибки, запишите в отчет значение xxxx и время одного цикла. Оцените принципиальные преимущества механизма прерываний и его недостатки. Если нет ошибок, запишите алгоритм под именем LR2_4.
9. Для того, чтобы в основной программе на время ожида-
ния прерывания могли выполняться другие действия, следует операции смещения единицы на выводах порта включить в подпрограмму обработки прерываний от таймера (без зацик­ливания и условного перехода). Переработайте таким путем алгоритм LR2_4. Учтите, что основная программа должна со­хранять вид цикла, а поскольку в алгоритме нет других задач, кроме пересылки и задержки, то включите в неё только цикл с пустой операцией. Останов установите на выходе из преры­вания от таймера, выполните симуляцию и запишите в отчет время одного цикла. Перезапишите алгоритм как LR2_5.
39
10. Замените тип МК, установив ATtiny25. Выполните си-
муляцию и проверьте, насколько изменилось время задержки. Проанализируйте устройство Т1 данного кристалла, используя окно таймера. Предложите способ получения времени задерж­ки, близкого к полученному ранее. Измените нужные настрой­ки, выполните симуляцию и запишите в отчет время одного цикла. Сохраните алгоритм как LR2_6.
11. Составьте отчет по перечисленным выше пунктам,
включая скриншоты алгоритмов и экранов эмуляции. Выдели­те в пунктах отчета полученные навыки составления алгорит­мов и навыки пользования программой, запишите отчет в файл под именем LR2 в той же папке, что и алгоритмы.
12. Покажите результаты преподавателю, ответьте на его
вопросы.
Итоговые вопросы
1. Объясните механизм создания временной задержки
без помощи таймера, известный вам из предыдущей лабора­торной работы, укажите его основной недостаток.
2. Организация таймеров МК AVR. Их функции и воз-
можности использования.
3. Конфигурирование таймеров и управление ими.
4. Регистр состояния (флагов) таймера Т1, значение его
битов.
5. Какие способы можно использовать для получения
меток времени от таймера? Дайте сравнительную оценку.
6. Как управлять временем задержки? Сравните оба
способа.
7. Какие способы можно использовать для организации
выполнения заданной операции по сигналу таймера?
8. Изложите кратко содержание каждого проработанно-
го вами алгоритма.
9. Обоснуйте настройку сеттеров таймера и его маски
на этапе инициализации при разных способах применения Т1.
10. Перечислите полученные навыки составления алго-
ритмов и навыки пользования средой Algorithm Builder.
40
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]