Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







A001- Часы со встроенным календарем





A0 –ввод/вывод

(привести схему подключения RCT к МК, 2 варианта)

 

 

Лекция №

Таймеры/счетчики

Таймер/Счетчик общего назначения (General Purpose Timer/Counter) предназначен для формирования запроса прерывания при истечении заданного интервала времени (режим таймера) или свершении заданного числа событий (режим счетчика). Микроконтроллеры семейства AVR могут иметь от одного до трех Таймеров/Счетчиков общего назначения Т/СХ (X-номер Таймера/Счетчика, Х=0, 1, 2).

Основным элементом Таймера/Счетчика является базовый счетчик, который ведет счет на сложение. При его переполнении формируется запрос прерывания Т/СХ OVF.

Таймер/Счетчик общего назначения может выполнять дополнитель­ные функции:

• функцию захвата;

• функцию сравнения;

• функцию широтно-импульсного модулятора;

• функцию счета реального времени.

Функция захвата (capture) заключается в запоминании кода, сфор­мированного в базовом счетчике, в специальном регистре захвата при изменении значения определенного внешнего или внутреннего сигнала, При этом формируется запрос прерывания Т/СХ САРТ,

Функция сравнения (compare) заключается в изменении значения сигнала на определенном выходе микроконтроллера при совпадении кода, формируемого в базовом счетчике, с кодом в специальном регистре сравнения. При этом формируется запрос прерывания Т/СХ СОМР.

Функция широтно-импульсного модулятора (PWM) заключается в формировании на определенном выходе микроконтроллера импульсной последовательности с заданными периодом повторения и длительностью импульсов.

Функции сравнения и PWM реализуются с использованием одного и того же оборудования. Выбор нужной функции выполняется про­граммными средствами.

Функция счета реального времени (Real Time Clock) реализуется в таймере-счетчике при использовании дополнительного внутреннего гене­ратора с внешним кварцевым резонатором с частотой 32768 Гц ("часовой" кварц). При этом параметры процессов в таймере-счетчике с высокой точностью привязаны к единице измерения реального времени - секунде. В зависимости от разрядности счетчика и выполняемых дополнительных функций могут быть выделены пять типов таймеров-счетчиков общего назначения, входящих в группу периферийных устройств микроконтроллеров семейства AVR.

Микроконтроллеры ATmega603/103 оснащены тремя Таймерами/Счетчиками общего назначения - двумя 8-разрядными и одним 16-разрядным. Таймер/Счетчик0, в дополнение к обычному режиму, может тактироваться асинхронно от внешнего генератора. Этот генератор оптимизирован под использование кварцевого кристалла на частоту 32768 кГц, что позволяет использовать Таймер/Счетчик0 как часы реального времени (Real Time Clock - RTC).

Таймер/Счетчик0 оснащен своим собственным предварительным делителем. Таймеры/Счетчики 1 и 2 используют выходы ступеней деления общего 10-разрядного предварительного делителя. Эти два Таймера/Счетчика можно использовать как таймеры со встроенной временной базой или как счетчики, переключаемые по состоянию на внешнем выводе.

Предварительные делители таймеров/счетчиков. Предварительный делитель таймеров/счетчиков 1 и 2 содержит четыре ступени деления: СК/8, СК/64, СК/256 и СК/1024, где СК - входной тактовый сигнал. Кроме того, в качестве источников тактовых сигналов могут быть использованы сигналы от внешних источников, тактовый сигнал СК и нулевой тактовый сигнал (stop).

Тактовый сигнал таймера/счетчика0 обозначен TCK0. Этот тактовый сигнал по умолчанию подключен к основному тактовому сигналу системы CK. При установке бита AS0 в регистре ASSR таймер/счетчик0 будет асинхронно тактироваться сигналом с вывода TOSC1, что позволяет использовать таймер/счетчик0 в качестве часов реального времени (RTC). Генератор оптимизирован под использование кварцевого кристалла с частотой 32768 кГц, подсоединяемого между выводами TOSC1 и TOSC2.

8-разрядные Таймеры/Счетчики T/C0 и T/C2. 8-разрядный таймер/счетчик0 получает тактовый сигнал или непосредственно от TCK0 или после прохождения его через предварительный делитель.

8-разрядный таймер/счетчик2 получает тактовый сигнал непосредственно от CK, после прохождения его через предварительный делитель или от внешнего вывода. Оба таймера/счетчика могут быть остановлены, как это показано в описании регистров управления таймерами/счетчиками TCCR0 и TCCR2.

В регистре флагов прерывания таймеров/счетчиков TIFR хранятся различные флаги состояния регистров (переполнения, совпадения при сравнении и захвата события). Установки управляющих сигналов хранятся в регистрах управления таймерами/счетчиками TCCR0 и TCCR2. Установка разрешения/запрещения прерываний производится в регистре масок прерываний таймеров/счетчиков TIMSK.

При тактировании таймера/счетчика2 внешним тактовым сигналом этот сигнал синхронизируется с тактовой частотой CPU. Для обеспечения правильной синхронизацией внешнего сигнала необходимо, чтобы минимальное время между двумя входящими тактовыми циклами было не менее одного цикла внутреннего тактового сигнала CPU. Внешний тактовый сигнал синхронизируется нарастающим фронтом внутреннего тактового сигнала CPU.

Точность и разрешение 8-разрядных таймеров/счетчиков растет с уменьшением коэффициента предварительного деления. Аналогичным образом высокий коэффициент предварительного деления удобно использовать при реализации функций с низким быстродействием или точной синхронизации редко происходящих действий. Оба таймера/счетчика поддерживают две функции сравнения выхода OCR0 и OCR2 как источники данных, сравниваемых с содержимым таймеров/счетчиков. В функции сравнения выхода входит и опция очистки счетчика при совпадении и формирование, при совпадении, сигнала на выводах сравнения выхода - PB4 (OC0/PWM0) и PB7 (OC2/PWM2).

Таймеры/Счетчики 0 и 2 можно использовать как 8-разрядные широтно-импульсные модуляторы (PWM). В этом режиме таймер/счетчик, совместно с регистром совпадения выхода, работает как автономный ШИМ с центрированными импульсами и без ложных выбросов. Подробнее эта функция описана в разделе Таймеры/Счетчики 0 и 2 в ШИМ режиме.

Регистры управления таймером/счетчиком 0- TCCR0 (адрес $33 ($53)) и таймером/счетчиком 2 - TCCR2 (адрес $25 ($45)).

Bit 7 - Res: Зарезервированный бит. Данный бит в микроконтроллерах ATmega603/103 зарезервирован и при считывании всегда покажет нулевое состояние.

Bit 6 - PWM0 / PWM2: Разрешение широтно- импульсного модулятора. Установленный в состояние 1 бит разрешает режим ШИМ для таймеров/счетчиков 0 или 2. Режим подробно описан в разделе Таймеры/Счетчики 0 и 2 в ШИМ режиме.

Bits 5,4 - COM01, COM00 / COM21, COM20: Режим сравнения выхода, биты 1 и 0. Управляющие биты COMn1 и COMn0 устанавливают состояние выходных выводов PB4 (OC0/PWM0) или PB7 (OC2/PWM2). после совпадения в таймере/счетчике2. Поскольку это альтернативная функция выводов порта I/O, то соответствующий бит направления вывода должен быть установлен в состояние 1. Управляющая конфигурация показана в табл. 3.37.

Таблица 3.37. Выбор режима сравнения

COMn1 COMn0 Описание
    Таймер/счетчикn отсоединен от выходного вывода OCn/PWMn
    Переключение выходной линии OCn/PWMn
    Очистка выходной линии OCn/PWMn (установка в состояние 0)
    Установка выходной линии OCn/PWMn (установка в состояние 1)

Примечание: n = 0 или 2.

 

В ШИМ режиме функции этих битов отличаются. Подробное описание приведено в табл. 3.37. При изменении битов COMn1/COMn0 прерывание по сравнению выхода должно быть запрещено очисткой его бита разрешения прерывания в регистре TIMSK. В противном случае при изменении состояния бита может произойти прерывание.

Bit 3 - CTC0 / CTC2: Очистить таймер/счетчик при совпадении. При установленном в состояние 1 бите CTC0 или CTC2 таймер/счетчик сбрасывается в состояние $00 в течение одного тактового цикла CPU после наступления совпадения. Если бит управления сброшен, то таймер продолжает счет и не используется в процедуре сравнения. Поскольку факт совпадение детектируется в тактовом цикле CPU следующем за совпадением, то эта функция будет вести себя несколько по-другому, если коэффициент предварительного деления будет больше 1. Если используется коэффициент предварительного деления, равный 1, и в регистр сравнения A установлено содержимое C, то таймер будет продолжать счет, так как это делается при установленном CTC0/2.

Bits 2,1,0 - CS02, CS01, CS00 / CS22, CS21, CS20: Биты выбора тактовой частоты. Биты 2,1 и 0 выбора тактовой частоты таймера/счетчика2 подключают выход определенной ступени предварительного делителя (табл. 3.38 и 3.39).

Таблица 3.38. Выбор коэффициента деления предварительного

Делителя таймера/счетчика0

CS02 CS01 CS00 Описание
      Таймер/счетчик0 остановлен
      TCK0
      TCK0 / 8
      TCK0 / 32
      TCK0 / 64
      TCK0 / 128
      TCK0 / 256
      TCK0 / 1024

Таблица 3.39. Выбор коэффициента деления предварительного делителя таймера/счетчика2

CS22 CS21 CS20 Описание
      Таймер/счетчик0 остановлен
      CK
      CK / 8
      CK / 64
      CK / 256
      CK / 1024
      Внешний вывод PD7(T2), падающий фронт
      Внешний вывод PD7(T2), нарастающий фронт

 

Условие Stop обеспечивает реализацию функции разрешения/запрещения таймера.

Режим деления CK реализуется непосредственным делением тактовой частоты CK. Если для тактирования таймера/счетчика 2 используется внешний источник, то переключения на выводе PD7/(T2) будут воздействовать на счетчик, даже если этот вывод сконфигурирован как выход.

Регистры Таймер/счетчика0 - TCNT0 (адрес $32 ($42)) и Таймер/счетчика2 - TCNT2 (адрес $24 ($44)).

Содержимое этих 8-разрядных регистров является состоянием таймеров/счетчиков. Оба таймера/счетчика реализованы как счетчики по нарастанию или реверсивные (в ШИМ режиме) счетчики с возможностью чтения/записи. Если в таймер/счетчик записано некоторое значение и выбран источник тактового сигнала, то он продолжит счет с записанного значения с тактовой частотой счетчика.

 

Регистры сравнения выходов таймер/счетчиков OCR0 (адрес $31 ($51)) и OCR2 (адрес $23 ($43)).

Регистры сравнения выходов являются 8-разрядными регистрами с возможностью чтения/записи. Выполнение процедуры сравнения определяется регистрами TCCR0 и TCCR2. Совпадение при сравнении произойдет только тогда, когда таймер/счетчик досчитает до значения содержимого OCR. Программная запись одного и того же значения в таймер/счетчик и в регистр сравнения выхода не приведет к формированию совпадения при сравнении.

Совпадение при сравнении приведет к установке флага прерывания по совпадению в течение тактового цикла CPU, следующего за совпадением. Необходимо принимать меры предосторожности при работе таймера/счетчика0 в асинхронном режиме, т.е. устанавливать в состояние 1 бит AC0 в регистре ASSR. При записи в регистр OCR0 значение пересылается в регистр по TCK0 такту, следующему за операцией записи.

Таймеры/Счетчики 0 и 2 в ШИМ режиме. При установленном ШИМ режиме таймер/счетчик и регистр сравнения выхода (OCR0 или OCR2) формируют 8-разрядный, без ложных выбросов и с правильной фазой ШИМ сигнал с выходом через PB4 (OC0/PWM0) или PB7 (OC2/PWM2) выводы. Таймер/счетчик работает как реверсивный счетчик, считающий от $00 до $FF, после чего он считает в обратную сторону до нуля и только после этого начинает новый цикл. Когда состояние счетчика совпадает с содержимым регистра сравнения выхода, выводы PB4 (OC0/PWM0) или PB7 (OC2/PWM2) устанавливаются или очищаются, в соответствии с установленными в регистрах управления таймерами/счетчиками TCCR0 и TCCR2, битами COM01/COM00 или COM21/COM20 (табл. 3.40).

Таблица 3.40. Выбор режима сравнения в ШИМ режиме

COMn1 COMn0 Эффект, оказываемый на вывод Compare/PWM
    Не подсоединен
    Не подсоединен
    Очистка при совпадении, счет по нарастанию. Установка при совпадении, счет по убыванию (неинвертирующий ШИМ)
    Очистка при совпадении, счет по убыванию. Установка при совпадении, счет по нарастанию (инвертирующий ШИМ)

Примечание: n = 0 или 2.

В ШИМ режиме при записи содержимое регистра сравнения выхода пересылается на временное хранение. Содержимое фиксируется при достижении таймером/счетчиком состояния $FF. Такой прием предохраняет от появления ШИМ импульсов увеличенной ширины (ложных выбросов) в случае несинхронной записи OCR0 или OCR2.

В промежуток времени между операциями записи и фиксации считывание из OCR0 или OCR2 приведет к считыванию из места временного хранения. Это означает, что чаще всего при чтении значения установки считывание будет производиться из OCR0/2. При состоянии регистра OCR $00 или $FF выход ШИМ будет удерживаться на низком или высоком уровне, в зависимости от установок COM21/COM20 или COM11/COM10 (табл. 3.41).

Таблица 3.41. Состояния ШИМ выходов при OCRn=$00 или $FF

COMn1 COMn0 OCRn Выход PWMn
    $00 L - низкий уровень
    $FF H - высокий уровень
    $00 H - высокий уровень
    $FF L - низкий уровень

Примечание: n = 0 или 2.

 

В ШИМ режиме флаг переполнения таймера (TOV0 или TOV2) устанавливается при смене направления счета при $00. Прерывания по переполнению таймеров 0 и 2 работают так же, как и в нормальном режиме таймеров/счетчиков, т.е. они срабатывают, когда TOV0 или TOV2 установлены и разрешены прерывания по переполнению таймера и глобальному прерыванию. Это относится также к флагам сравнения выхода таймеров и прерываниям.

Частота ШИМ будет соответствовать тактовой частоте таймера, деленной на 510.

Асинхронная работа таймера/счетчика0. При синхронной работе таймера/счетчика0 все операции и тактирование идентичны работе таймера/счетчика2. Однако асинхронная работа имеет некоторые особенности.

Это важно! При переключении между асинхронным и синхронным тактированием таймера/счетчика0 регистры таймера TCNT0, OCR0 и TCCR0 могут быть повреждены. Безопасное переключение выполняется следующей последовательностью действий:

Запрещаются прерывания OCIE0 и TOIE0 таймера0.

Соответствующей установкой ASO выбирается источник тактового сигнала.

В TCNT0, OCR0 и TCCR0 записываются новые значения.

Если выполняется переключение в асинхронный режим, ожидать TCN0UB, OCR0UB и TCR0UB.

Разрешить прерывания, если это необходимо.

Генератор оптимизирован под использование часового кристалла с частотой 32,768 кГц. Внешний тактовый сигнал, подаваемый на этот вывод, проходит через тот же самый усилитель с полосой пропускания 256 кГц. Таким образом, внешний тактовый сигнал должен быть в диапазоне от 0 Гц до 256 кГц. Частота внешнего тактового сигнала, подаваемого на вывод TOSC1, не должна превышать одной четвертой от тактовой частоты CPU. Отметим, что тактовая частота CPU может быть ниже частоты XTAL, если разрешено деление частоты XTAL.

При записи в один из регистров TCNT0, OCR0 или TCCR0 записываемая величина пересылается в регистр временного хранения и фиксируется после двух положительных фронтов TOSC1. Пользователь не должен записывать новое значение прежде, чем содержимое регистра временного хранения не будет передано по назначению. Каждый из указанных регистров имеет свой собственный регистр временного хранения, это означает, к примеру, что запись в TCNT0 не исказится при записи в OCR0. Для того, чтобы убедиться в выполнении пересылки в регистр назначения, используется регистр статуса асинхронного режима (Asynchronous Status Register - ASSR).

При вводе режима Sleep после записи в регистры TCNT0, OCR0 или TCCR0 пользователь должен ожидать пока записываемый регистр не будет обновлен, если таймер/счетчик0 используется для активации прибора. В ином случае MCU перейдет в режим Sleep прежде, чем изменения окажут какой либо эффект. Это особенно важно, если для активации прибора, используется прерывание по сравнению выхода0; сравнение выхода запрещается во время записи в OCR0 или TCNT0. Если цикл записи не завершен (т.е. пользователь введет режим Sleep прежде, чем бит OCR0UB будет сброшен в 0), прибор никогда не получит совпадения при сравнении и MCU не будет активирован. Если таймер/счетчик0 используется для активации прибора из режима Power Save и если пользователь намеревается возобновить режим Power Save, то необходимо предпринимать меры предосторожности: для сброса логики прерывания необходим один цикл TOSC1. Если время между активацией и восстановлением режима Power Save меньше одного цикла TOSC1, прерывание не произойдет и прибор не будет активирован. Если пользователь сомневается в том, что промежуток времени перед восстановлением режима Power Save достаточен, необходимо использовать следующий алгоритм:

Записать значение в TCCR0, TCNT0 или OCR0.

Подождать, пока соответствующий флаг занятого обновления в регистре ASSR не будет сброшен в 0.

Ввести режим Power Save.

Генератор частоты 32кГц таймера/счетчика0 работает всегда, за исключением режима Power Down. При восстановлении питания или активации из режима Power Down пользователь должен помнить о том, что генератору для стабилизации необходимо время порядка одной секунды. Пользователю рекомендуется выждать не менее одной секунды, прежде чем использовать таймер/счетчик0 после подачи питания или активации из режима Power Down.

Описание активации прибора из режима Power Save при асинхронном тактировании таймера. Когда условия прерывания выполнены, на следующем цикле тактовой частоты таймера начинается процесс активации, т.е. состояние таймера должно увеличиться как минимум на единицу, прежде, чем процессор сможет прочитать состояние счетчика. Флаги прерываний обновляются за три тактовых цикла процессора после запуска тактовой частоты процессора. В течение этих циклов процессор выполняет команду, но условия прерывания еще не читаемы и подпрограмма обработки прерывания не может начать выполнение.

Во время асинхронной работы синхронизация флагов прерываний асинхронного таймера занимает три тактовых цикла процессора плюс один цикл таймера. Таким образом, содержимое таймера увеличивается минимум на единицу, прежде чем процессор сможет прочитать содержимое таймера, вызвавшее установку флага прерывания. Вывод сравнения выхода меняет состояние в соответствии с тактовым сигналом таймера и не синхронизирован с тактовой частотой процессора.

 

Регистр статуса асинхронного режима – ASSR. Адрес $30 ($50).

Bit 7..4 - Res: Зарезервированные биты. Эти биты в микроконтроллерах ATmega603/103 зарезервированы и при считывании всегда будут показывать 0.

Bit 3 - AS0: Асинхронный режим таймера/счетчика0. При установленном в состояние 1 бите таймер/счетчик0 тактируется сигналом вывода TOSC1. При очищенном бите таймер/счетчик0 тактируется внутренним тактовым сигналом CK. При изменении состояния этого бита содержимое TCNT0 может быть повреждено.

Bit 2 - TCN0UB: Таймер/счетчик0 занят для обновления. Бит устанавливается в состояние 1 при работе таймера/счетчика0 в асинхронном режиме и записанном TCNT0. При обновлении записанного в TCNT0 значения содержимым регистра временного хранения бит аппаратно очищается. Бит в логическом состоянии 0 означает, что TCNT0 готов к обновлению новым значением.

Bit 1 - OCR0UB: Сравнение выхода регистра0 занято для обновления. Бит устанавливается в состояние 1 при работе таймера/счетчика0 в асинхронном режиме и записанном OCR0. При обновлении записанного в OCR0 значения содержимым регистра временного хранения бит аппаратно очищается. Бит в логическом состоянии 0 означает, что OCR0 готов к обновлению новым значением.

Bit 0 - TCR0UB: Регистр управления таймера/счетчика0 занят для обновления. Бит устанавливается в состояние 1 при работе таймера/счетчика0 в асинхронном режиме и записанном TCCR0. При обновлении записанного в TCCR0 значения содержимым регистра временного хранения бит аппаратно очищается. Бит в логическом состоянии 0 означает, что TCCR0 готов к обновлению новым значением. Если запись выполняется в любой из трех регистров таймера/счетчика0, когда их флаги занятости для обновления установлены, то записываемое значение может быть повреждено и привести к нежелательному прерыванию. Считывание состояний TCNT0, OCR0 и TCCR0 отличается. При чтении состояния TCNT0 считывается действительное содержимое, при чтении состояний OCR0 или TCCR0 считывается содержимое регистров временного хранения.

 

Разрядный таймер/счетчик1

16-разрядный таймер/счетчик1 может получать тактовый сигнал от CK, CK после предварительного делителя и от внешнего вывода. Кроме того, его можно остановить, как показано в описании регистра управления таймером/счетчиком1-TCCR1B (Timer/Counter1 Control Register). В регистрах управления TCCR1A и TCCR1B находятся различные флаги, указывающие на переполнение, совпадение при сравнении и случаи захвата событий. В регистре масок прерываний TIMSK (Timer/Counter Interrupt Mask Register) устанавливаются разрешения/запрещения прерываний таймера/счетчика1. При внешнем тактировании таймера/счетчика1 внешний сигнал синхронизируется частотой тактового генератора CPU. Для правильной работы таймера/счетчика1 по внешнему тактовому сигналу минимальное время между двумя переключениями внешнего тактового сигнала должно быть не менее одного периода тактового сигнала CPU. Синхронизация внешнего тактового сигнала ведется нарастающим фронтом внутреннего тактового сигнала CPU.

Наилучшие точность и разрешение 16-разрядный таймер/счетчик1 обеспечивает при наименьшем коэффициенте предварительного деления. С другой стороны, высокий коэффициент предварительного деления удобен при реализации таймером/счетчиком1 низкоскоростных функций или точной синхронизации редко происходящих действий. Таймер/счетчик1 поддерживает две функции сравнения выхода, используя регистр1 сравнения выходов A и B - OCR1A и OCR1B в качестве источников данных, сравниваемых с содержимым таймера/счетчика1. Функции сравнения выхода включают очистку счетчика по совпадению сравненияA и воздействие на выводы сравнения выхода при обоих совпадениях сравнения.

Таймер/счетчик1 может быть использован в качестве 8, 9 или 10-разрядного широтно-импульсного модулятора. В этом режиме счетчик и регистры OCR1A/OCR1B работают как сдвоенный самостоятельный ШИМ со сцентрированными импульсами, без формирования ложных импульсов. См. раздел Таймер/счетчик1 в ШИМ режиме, где подробно описана эта функция.

Функция захвата входа таймера/счетчика1 обеспечивает захват содержимого таймера/счетчика1 в регистр захвата входа, запускаемый внешним событием на выводе входа захвата PD4/(IC1). Реальные установки захвата события определяются регистром управления таймером/счетчиком1 TCCR1B (Timer/Counter1 Control Register). Кроме того, для переключения входа захвата может быть использован аналоговый компаратор. Подробнее данная функция описана в разделе Аналоговый компаратор. Если разрешена функция подавления шума, действительные условия переключения события захвата тестируются четырьмя выборками, прежде чем захват будет активирован. Тестирование сигнала на входном выводе производится с частотой XTAL.

Регистр управления А таймера/счетчика1 - TCCR1A. Адрес $2F ($4F).

Bits 7,6 - COM1A1, COM1A0: Режим1A сравнения выхода, биты 1 и 0. Управляющие биты COM1A1 и COM1A0 определяют характер сигнала выхода, следующего за совпадением при сравнении таймера/счетчика1. Сигнал выхода поступает на вывод OC1A (Output CompareA). Поскольку это альтернативная функция порта I/O, то соответствующий бит управления направлением должен быть установлен в 1 (вывод работает на выход). Конфигурирование управления представлено в табл. 3.42.

Таблица 3.42. Выбор режима сравнения 1

COM1X1 COM1X0 Описание
    Таймер/счетчик1 отключен от вывода выхода OC1X
    Переключение выходной линии OC1X
    Очистка выходной линии OC1X (на линии низкий уровень)
    Установка выходной линии OC1X (на линии высокий уровень)

Примечание: X = A или B.

 

Bits 5,4 - COM1B1, COM1B0: Режим1B сравнения выхода, биты 1 и 0. Управляющие биты COM1B1 и COM1B0 определяют характер сигнала выхода, следующего за совпадением при сравнении таймера/счетчика1. Сигнал выхода поступает на вывод OC1B (Output CompareB). Поскольку это альтернативная функция порта I/O, то соответствующий бит управления направлением должен быть установлен в 1 (вывод работает на выход). Конфигурирование управления представлено в табл. 3.19. В ШИМ режиме функции этих битов отличаются. При изменении битов COM1X1/COM1X0 прерывания по сравнению выхода1 должны быть запрещены очисткой битов разрешения прерывания в регистре TIMSK. В противном случае при изменении битов может произойти прерывание

Bits 3..2 - Res: Зарезервированные биты. Эти биты в микроконтроллерах ATmega603/103 зарезервированы и при считывании всегда будут 0.

Bits 1..0 - PWM11, PWM10: Биты выбора режима ШИМ. Данные биты определяют установку режима ШИМ, как это показано в табл. 3.43.

Таблица 3.43. Выбор ШИМ режима

 

PWM11 PWM10 Description
    Работа таймера/счетчика1 в ШИМ режиме запрещена
    Работа таймера/счетчика1 в 8-разрядном ШИМ режиме
    Работа таймера/счетчика1 в 9-разрядном ШИМ режиме
    Работа таймера/счетчика1 в 10-разрядном ШИМ режиме

 

Регистр управления В таймера/счетчика1 - TCCR1B. Адрес $2E ($4E).

Bit 7 - ICNC1: Установка режима подавления шума на входе захвата 1. При сброшенном в состояние 0 бите ICNC1 функция подавления шума входного триггера захвата запрещена. Вход захвата переключается по первому нарастающему/падающему фронту, поступившему на вывод входа захвата PD4(IC1). При установленном в состояние 1 бите ICNC1 выполняются четыре последовательных опроса состояния вывода PD4(IC1) и все четыре выборки должны иметь одинаковый (высокий/низкий), определяемый битом ICES1 уровень. Частота опроса соответствует частоте XTAL.

Bit 6 - ICES1: Выбор фронта срабатывания на входе захвата 1. При сброшенном в состояние 0 бите ICES1 содержимое таймера/счетчика1, по падающему фронту на выводе входа захвата PD4(IC1), пересылается в регистр захвата входа ICR1. При установленном в 1 бите ICES1 содержимое таймера/счетчика1 пересылается в регистр захвата входа ICR1 по нарастающему фронту на выводе входа захвата PD4 (IC1).

Bits 5, 4 - Res: Зарезервированные биты. Эти биты в микроконтроллерах ATmega603/103 зарезервированы и при считывании всегда будут 0.

Bit 3 - CTC1: Очистка таймера/счетчика1 по совпадению. При установленном в состояние 1 бите CTC1 таймер/счетчик1 сбрасывается в состояние $0000 в течение тактового цикла, следующего за совпадением при сравненииA. Если бит CTC1 очищен, таймер/счетчик1 продолжает отсчет и не реагирует на совпадение при сравнении. Поскольку совпадение при сравнении детектируется в течение тактового цикла CPU следующего за совпадением, то поведение функции будет отличаться при установке коэффициента предварительного деления таймера/счетчика1 большем 1.

Bits 2,1,0 - CS12, CS11, CS10: Выбор источника тактовой частоты, биты 2,1 и 0. Установкой состояния данных битов производится выбор источника тактового сигнала (в том числе коэффициента предварительного деления) Stop условие выполняет функцию разрешения/запрещения таймера/счетчика1. В режимах с предварительным делением на соответствующий коэффициент делится частота CK тактового генератора (табл. 3.44). При использовании внешнего тактирования необходимо выполнить соответствующие установки в регистре управления направлением (очистка переводит вывод в режим входа).

Таблица 3.44. Выбор источника тактового сигнала

Таймера/счетчика1

CS12 CS11 CS10 Описание
      Stop условие - таймер/счетчик1 остановлен
      CK
      CK / 8
      CK / 64
      CK / 256
      CK / 1024
      Внешний тактирующий сигнал на выводе T1, нарастающий фронт
      Внешний тактирующий сигнал на выводе T1, падающий фронт

 

Таймер/счетчик1 - TCNT1H (адрес $2D ($4D)) и TCNT1L (адрес $2C ($4C)).

16-разрядный регистр содержит текущее значение 16-разрядного таймера/счетчика1. С тем, чтобы CPU могло считывать/записывать и старший и младший байты этого регистра одновременно, обращение реализовано посредством 8-разрядного регистра временного хранения (TEMP). Этот регистр используется также при обращении к OCR1A, OCR1B и ICR1. Если основная программа и подпрограммы обработки прерываний используют обращение к регистрам посредством TEMP, то прерывания должны быть запрещены на время обращения из основной программы.

Запись в таймер/счетчик1 - TCNT1. Когда CPU производит запись в старший байт (TCNT1H), записываемые данные размещаются в регистре TEMP. Затем, когда CPU производит запись в младший байт (TCNT1L), данные младшего байта объединяются с байтом данных регистра TEMP и все 16 битов одновременно переписываются в регистр таймера/счетчика TCNT1. Следовательно, при 16-разрядных операциях обращение к старшему байту (TCNT1H) должно выполняться первым. При использовании таймера/ счетчика1 в качестве 8-разрядного таймера достаточно производить запись только младшего байта.

Чтение таймера/счетчика1 - TCNT1. Когда CPU считывает младший байт (TCNT1L), то содержимое TCNT1L направляется непосредственно в CPU, содержимое старшего байта (TCNT1H) размещается в регистре TEMP и при считывании CPU старшего байта (TCNT1H) его содержимое CPU принимает из регистра TEMP. Следовательно, при 16-разрядных операциях первым должно выполняться обращение к младшему байту (TCNT1L). При использовании таймера/счетчика1 в качестве 8-разрядного таймера достаточно производить запись только младшего байта.

Таймер/счетчик1 выполнен в виде счетчика с нарастанием или реверсивного счетчика (в ШИМ режиме) и возможностью чтения/записи. Если в таймер/счетчик1 занесено некоторое значение и выбран источник тактового сигнала, то таймер/счетчик1 продолжит отсчет через один тактовый цикл после установки в нем записанного значения.

Регистры сравнения A выхода таймера/счетчика1 - OCR1AH (адрес $2B ($4B)) и OCR1AL (адрес $2A ($4A)) и регистры сравнения B выхода таймера/счетчика1 - OCR1BH (адрес $29 ($49)) и OCR1BL (адрес $28 ($48)).

16-разрядные регистры сравнения выхода обеспечивают и чтение и запись.

Регистры сравнения выхода таймера/счетчика1 хранят данные, постоянно сравниваемые с состоянием таймера/счетчика1. Действие, запускаемое совпадением при сравнении, определяется содержимым регистра управления и состояния таймера/счетчика1. Совпадение при сравнении может произойти только тогда, если таймер/счетчик1 досчитает до значения содержимого OCR. Если в TCNT1 и OCR1A или OCR1B программно будут записаны одинаковые значения, то значения, то совпадение при сравнении сгенерировано не будет.

Совпадение при сравнении устанавливает флаг прерывания по совпадению в тактовом цикле CPU, следующем за самим совпадением.

Поскольку регистры сравнения выхода OCR1A и OCR1B являются 16-разрядными, то для обеспечения одновременного занесения старшего и младшего байтов данных в регистры OCR1A/B используется регистр временного хранения TEMP. Когда CPU записывает старший байт, то данные временно сохраняются в регистре TEMP. Когда же CPU записывает младший байт в OCR1AL или OCR1BL, то одновременно содержимое регистра OCR1BH переписывается в OCR1AH или OCR1BH. Следовательно, при 16-разрядных операциях старшие байты регистров OCR1A/B должны записываться первыми.

Кроме того, регистр TEMP используется при обращении к TCNT1 и ICR1. Если основная программа и подпрограммы обработки прерываний используют обращение к регистрам посредством TEMP, то прерывания должны быть запрещены на время обращения из основной программы.

Регистры захвата входа таймера/счетчика1 - ICR1H (адрес $27 ($47)) и ICR1L (адрес $26 ($46)). 16-разрядный регистр захвата входа обеспечивает только чтение содержимого.

При обнаружении на выводе захвата входа PD4 (IC1) нарастающего или падающего фронта сигнала (определяемого установкой ICES1) текущее состояние таймера/счетчика1 пересылается в регистр захвата входа ICR1. Одновременно устанавливается в состояние 1 флаг захвата входа ICF1.

Поскольку регистр захвата входа является 16-разрядным, то для обеспечения одновременного чтения старшего и младшего байтов данных регистра ICR1 используется регистр временного хранения TEMP. При считывании CPU данных младшего байта содержимое ICR1L пересылается в CPU, а содержимое старшего байта ICR1H размещается в регистре TEMP, чтение старшего байта заключается в переносе в CPU содержимого регистра временного хранения TEMP. Следовательно, при чтении всего 16-разрядного регистра операцию чтения необходимо начинать с младшего байта ICR1L. Регистр TEMP используется также при обращении к TCNT1, OCR1A и OCR1B. Если основная программа и подпрограммы обработки прерываний используют обращение к регистрам посредством TEMP, то прерывания должны быть запрещены на время обращения из основной программы.

Таймер/счетчик1 в ШИМ режиме. При установленном ШИМ режиме таймер/счетчик1 и регистры сравнения выхода A и B (OCR1A и OCR1B) образуют сдвоенный 8, 9 или 10-разрядный автономный генератор ШИМ с правильным чередованием фаз, отсутствием ложных выбросов и выходами на выводы PD5 (OC1A) и OC1B. Таймер/счетчик1 работает как реверсивный счетчик, считающий от $0000 до TOP (табл. 3.45), при котором направление счета меняется и отсчет ведется до нуля, после чего цикл повторяется. Когда состояние счетчика совпадет с содержимым 10 младших битов OCR1A или OCR1B, выводы PD5 (OC1A)/OC1B устанавливаются или очищаются, в соответствии с установками битов COM1A1/ COM1A0 или COM1B1/COM1B0 в регистре управления таймером/счетчиком1 TCCR1A. (табл. 3.46).

 

Таблица 3.45. TOP значения таймера и частота ШИМ

Разрешение ШИМ TOP значения таймера Частота ШИМ
8-разрядное $00FF (255) f TC1 /510
9-разрядное $01FF (511) f TC1 /1022
10-разрядное $03FF (1023) f TC1 /2046

 

Таблица 3.46. Выбор режима сравнения1 в ШИМ режиме

COM1X1 COM1X0 Выходной сигнал на OCX1
    Не подключен
    Не подключен
    Очищается по совпадению при счете вверх. Устанавливается по совпадению при счете вниз (не инвертированный ШИМ)
    Очищается по совпадению при счете вниз. Устанавливается по совпадению при счете вверх (инвертированный ШИМ)

Примечание: X = A или B.

 

Отметим, что в ШИМ режиме младшие 10 разрядов OCR1A/OCR1B при записи пересылаются в ячейки временного хранения. Они фиксируются по достижении таймером/счетчиком1 значения TOP. Таким способом обеспечивается защита от появления уширенных ШИМ импульсов (ложных выбросов - glitches) при несинхронной записи OCR1A/OCR1B.

При чтении OCR1A или OCR1B, в промежутке времени между записью и фиксацией, будет считано содержимое ячейки временного хранения. Это означает, что более раннее







Что способствует осуществлению желаний? Стопроцентная, непоколебимая уверенность в своем...

ЧТО ПРОИСХОДИТ ВО ВЗРОСЛОЙ ЖИЗНИ? Если вы все еще «неправильно» связаны с матерью, вы избегаете отделения и независимого взрослого существования...

Что вызывает тренды на фондовых и товарных рынках Объяснение теории грузового поезда Первые 17 лет моих рыночных исследований сводились к попыткам вычис­лить, когда этот...

ЧТО И КАК ПИСАЛИ О МОДЕ В ЖУРНАЛАХ НАЧАЛА XX ВЕКА Первый номер журнала «Аполлон» за 1909 г. начинался, по сути, с программного заявления редакции журнала...





Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2024 zdamsam.ru Размещенные материалы защищены законодательством РФ.