Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Микроконтроллеры в системах управления. Лабораторный практикум
.pdf
Рис. 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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
