Меню

16 разрядный счетчик таймер



14. 16-битный таймер-счетчик

14.1. Отличительные особенности

  • 16-битный таймер-счетчик
  • Двойная буферизация регистра задания периода таймера
  • До 4 комбинируемых каналов захвата-сравнения (A, B, C и D)
  • Двойная буферизация всех каналов захвата-сравнения
  • Генерация прямоугольных импульсов:
    • Широтно-импульсная модуляция с однонаправленным счетом
    • Широтно-импульсная модуляция с двунаправленным счетом
    • Генерация частотных импульсов
  • Возможности входного захвата:
    • Шумоподавление на входе захвата
    • Захват частоты
    • Захват длительности импульсов
  • 32-битный захват
  • Генерация прерываний/событий по переполнению и ошибкам таймера
  • Каждый канал захвата-сравнения может генерировать одно прерывание/событие по совпадению или захвату
  • Поддержка DMA
  • Блок расширения разрешающей способности Hi-Res
    • Увеличивает разрешающую способность генерации импульсов на 2 бита (в 4 раза)
  • Блок расширения возможностей генерации импульсов AWeX
    • 4 блока генерации паузы неперекрытия (DT) с отдельными настройками для верхнего и нижнего уровней
    • Управляемая по событиям защита от повреждения
    • Одноканальная работа с несколькими выходами
    • Образцовый генератор

МК XMEGA содержат несколько высококачественных и очень гибких 16-битных таймеров-счетчиков (TC). К их основным предназначениям относятся: строгая привязка ко времени выполнения программы, генерация частоты и прямоугольных импульсов, управление событиями и измерение временных характеристик цифровых сигналов. Для реализации более сложных и специализированных генераторов импульсов предусмотрена возможность совместной работы таймеров-счетчиков с блоками расширения разрешающей способности (Hi-Res) и расширения возможностей генерации импульсов (AWeX).

Функциональная схема 16-битного таймер-счетчика с отображением его расширений и других связанных с ним УВВ (выделены заливкой серым цветом) показана на рисунке 14.1.


Рисунок 14.1. 16-битный таймер-счетчик и связанные с ним УВВ

Таймер-счетчик состоит из базового счетчика и нескольких каналов сравнения или захвата (CC-каналов). Базовый счетчик может использоваться для счета импульсов синхронизации или событий. Предусмотрена возможность задания направления и периода счета. CC-каналы могут использоваться совместно с базовым счетчиком для реализации функций управления по условию совпадения счетчика с заданным значением, для генерации импульсов (частота или ШИМ) или для измерения параметров импульсного сигнала.

Функции захвата и сравнения нельзя выполнять одновременно, т.е. таймер-счетчик не может одновременно выполнять и генерацию, и захват импульсов. Когда CC-канал используется для выполнения операций сравнения, его называют каналом сравнения. Если же CC-канал используется для захвата, то его называют каналом захвата.

Таймер-счетчик может быть в двух исполнениях: таймер-счетчик 0, который содержит четыре CC-канала, и таймер-счетчик 1 с двумя CC-каналами. Таким образом, упоминаемые далее регистры и биты регистров CC-каналов 3 и 4 имеются только у таймера-счетчика 0.

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

Некоторые из таймеров-счетчиков имеют расширения. Блок расширения могут использоваться только этими таймерами. Блок расширения возможностей генерации импульсов (блок AWeX) может использоваться для генерации паузы неперекрытия, образцовой генерации и защиты от повреждения. Блок AWeX доступен только у таймера-счетчика 0.

Выходы генерации импульсов таймера-счетчика перед тем как попасть в ПВВ, при необходимости, могут быть пропущены через блок расширения разрешающей способности (Hi-Res). Данный блок, синхронизирующийся частотой, которая в четыре раза выше частоты синхронизации УВВ, позволяет в четыре раза увеличить разрешающую способность таймера. Блок Hi-Res имеется у всех таймеров-счетчиков.

Читайте также:  Передача показаний электросчетчика мосэнергосбыт юридического лица

Ниже приведены определения, которые интенсивно используются в описании таймера-счетчика:

Таблица 14.1. Определения таймера/счетчика

Наименование Описание
BOTTOM Счетчик достиг нижней границы счета, когда он становится равным нулю.
MAX Счетчик достиг максимального значения, когда все его биты равны единице
TOP Счетчик достиг верхней границы счета, когда он становится равным наибольшему значению счетной последовательности. Значение TOP может быть равно периоду (PER) или значению регистра сравнения канала А (CCA). Это зависит от настройки режима генерации импульсов.
UPDATE Таймер-счетчик сигнализирует об обновлении, когда он достигает значения BOTTOM или TOP, в зависимости от выбранного режима генерации импульсов.

В тех случаях, когда таймер-счетчик синхронизируется внутренними источниками его называют таймером, а когда внешними (событиями) — счетчиком.

Источник

Схема

Логика программы

Структура проекта

Проект состоит из 4-ех программных модулей.
bcd.c – содержит функцию для перевода 16-ти разрядных двоичных чисел в двоично-десятичные. На ней мы останавливаться не будем.
timer.c – содержит функцию инициализации таймера Т1, обработчик прерывания по событию захват и функцию возвращающую содержимое буфера.
lcd_lib.c – библиотека для работы с символьным дисплеем.
main.c — основная программа.

Рассмотрим содержимое модуля timer.c

Инициализация таймера/счетчика Т1

void TIM_Init( void )
<
TIMSK = (1
volatile unsigned int
tachBuf = 0; //буфер

#pragma vector=TIMER1_CAPT_vect
__interrupt void Timer1Capt( void )
<
TCNT1 = 0; //обнуляем счетный регистр
tachBuf = ICR1; //сохраняем значение регистра захвата в буфере
>

volatile unsigned int tachBuf = 0;
unsigned long tachFltr = 0;
unsigned char count = 0;

//прерывание по событию захват
#pragma vector=TIMER1_CAPT_vect
__interrupt void Timer1Capt( void )
<
TCNT1 = 0;

//накапливаем 8 измерений и вычисляем среднее арифметическое
tachFltr += ICR1;
count++;
if (count == 8)
<
tachBuf = ( unsigned int )(tachFltr >> 3);
tachFltr = 0;
count = 0;
>
>

Функция, возвращающая содержимое буфера

__monitor unsigned int TIM_GetTachBuf( void )
<
unsigned int tmp = tachBuf;
tachBuf = 0;
return tmp;
>

Основная программа

//****************************************************
// Author(s). Pashgan http://ChipEnable.Ru
// Target(s). ATMega8535
// Compiler. IAR 5.11A
// Description.: Таймер Т1. Прерывание по событию захват.
// Простой частотомер на AVR
// Data. 13.02.10
//*****************************************************
#include
#include
#include «lcd_lib.h»
#include «bcd.h»
#include «timer.h»

int main( void )
<
unsigned int tachValue;

PORTD = 0xff;
DDRD = 0x00;

__enable_interrupt ();
while (1) <
__delay_cycles (1000000);

//берем “захваченное” значение и выводим его на lcd
tachValue = TIM_GetTachBuf();
LCD_Goto(0,1);
BCD_5IntLcd(tachValue);

//вычисляем значение частоты и выводим его на lcd
tachValue = ( unsigned int ) (8000000UL/tachValue);
LCD_Goto(0,0);
BCD_5IntLcd(tachValue);
>
return 0;
>

tachValue = ( unsigned int ) (8000000UL/tachValue);

UL – указание компилятору, что тип констаныт unsigned long. Конечно, он и сам может догадаться, но это не будет лишним.
(unsigned int) – указание компилятору преобразовать результат вычисления к типу unsigned int.

Погрешность

20 __interrupt void Timer1Capt(void)
\ Timer1Capt:
21 <
\ 00000000 93AA ST -Y, R26
\ 00000002 939A ST -Y, R25
\ 00000004 938A ST -Y, R24
\ 00000006 93FA ST -Y, R31
\ 00000008 93EA ST -Y, R30
\ 0000000A 934A ST -Y, R20
\ 0000000C 933A ST -Y, R19
\ 0000000E 932A ST -Y, R18
\ 00000010 931A ST -Y, R17
\ 00000012 930A ST -Y, R16
\ 00000014 B74F IN R20, 0x3F
22 TCNT1 = 0;
\ 00000016 E000 LDI R16, 0
\ 00000018 BD0D OUT 0x2D, R16
\ 0000001A BD0C OUT 0x2C, R16
.

Читайте также:  Какая разрядность у электрического счетчика

34 тактам и это время мы не учитываем при расчете частоты.

Исправим этот момент.

volatile unsigned int tachBuf = 0;
unsigned long tachFltr = 0;
unsigned char count = 0;
#define ERROR 34

//прерывание по событию захват
#pragma vector=TIMER1_CAPT_vect
__interrupt void Timer1Capt( void )
<
TCNT1 = 0;

tachFltr += (ICR1 + ERROR);
count++;
if (count == 8)
<
tachBuf = ( unsigned int )(tachFltr >> 3);
tachFltr = 0;
count = 0;
>
>

Прошиваем микроконтроллер и снова проверяем частотомер. Ого, намного лучше.

Файлы

Если честно, я так и сделал. Но это нисколько не обесценивает вышеизложенного объяснения.

Источник

Atmega128. 16-разрядные таймеры-счетчики 1 и 3

16-разрядные таймеры-счетчики 1 и 3

16-разрядные таймеры-счетчики предназначены для точного задания временных интервалов, генерации прямоугольных импульсов и измерения временных характеристик импульсных сигналов.

Основные отличительные особенности:

  • 16-разрядные счетчики (в т.ч. возможность организации 16-разр. ШИМ)
  • Три раздельных блока сравнения
  • Двойная буферизация регистров порога сравнения (OCR)
  • Один блок захвата
  • Подавитель шума на входе блока захвата
  • Режим сброса таймера при совпадении с порогом сравнения (автоматическая перезагрузка)
  • Широтно-импульсная модуляция без генерации ложных импульсов при записи нового порога сравнения в OCR (двойная буферизация) и фазовая коррекция
  • Переменный период ШИМ
  • Частотный генератор
  • Счетчик внешних событий
  • 10 самостоятельных источников прерываний (TOV1, OCF1A, OCF1B, OCF1C, ICF1, TOV3, OCF3A, OCF3B, OCF3C и ICF3)

Ограничения на режим совместимости с ATmega103

Обратите внимание, что в режиме совместимости с ATmega103 доступен только один 16-разр. таймер-счетчик (таймер-счетчик 1). Кроме того, в режиме совместимости с ATmega103 таймер-счетчик 1 имеет только два регистра порогов сравнения (OCR1A и OCR1B).

Введение

В виду идентичности таймеров 1 и 3 в данном разделе используется общая форма записи. Так индекс “n” заменяет номер таймера-счетчика (1 или 3), а “x” заменяет наименование канала сравнения (A,B или C). Однако при программировании необходимо использовать фактические номера и наименования. Например, для записи нового состояния таймера-счетчика 1 в программе необходимо указывать TCNT1.

Укрупненная функциональная схема 16-разр. таймера-счетчика показана на рисунке 46. Если требуется конкретизировать расположение того или иного вывода см. “Расположение выводов”. Регистры ввода-вывода, а также биты или линии ввода-вывода, к которым организован доступ от ЦПУ, выделены жирной линией. Описание регистров, расположение и назначение бит данных таймеров представлены в параграфе “Описание регистров 16-разр. таймеров-счетчиков”.


Рисунок 46- Функциональная схема 16-разр. таймера-счетчика

Прим.: Расположение и назначение выводов таймеров-счетчиков 1 и 3 см. на рисунке 1, таблице 30 и таблице 39.

Регистры

Регистр таймера-счетчика (TCNTn), регистры порогов сравнения (OCRnA/B/C), a также регистр захвата (ICRn) являются 16-разрядными регистрами. В связи с этим, во время доступа к этим регистрам должна быть соблюдена специальная процедура (см. Доступ к 16-разр. регистрам). Регистры управления таймером (TCCRnA/B/C) являются 8-разр. регистрами, поэтому, доступ к ним со стороны ЦПУ не связан с какими-либо ограничениями. Все сигналы запросов на прерывание представлены в регистре флагов прерываний таймеров (TIFR) и регистре флагов расширенных прерываний (ETIFR). Все прерывания индивидуально маскируются регистром макси прерываний таймеров (TIMSK) и регистром маски расширенных прерываний (ETIMSK). Регистры (E)TIFR и (E)TIMSK не представлены на функциональной схеме, т.к. они совместно используются другими таймерами микроконтроллера.

Читайте также:  Счетчик сэт 380в 5а

Таймер-счетчик может тактироваться внутренне через предделитель или внешне тактовым источником, подключенным к выводу Tn. Блок выбора тактового источника позволяет выбрать тактовый источник и фронт, по которому будет изменяться состояние таймера-счетчика. Если тактовый источник не задан, то таймер-счетчик находится в неактивном состоянии. Сигнал на выходе блока выбора тактового источника является тактовым сигналом таймера (clkTn).

Значение регистров порогов сравнения (OCRnA/B/C) непрерывно сравнивается со значением счетчика. Результат сравнения может использоваться для генерации прямоугольных импульсов с ШИМ или с переменной частотой на выходах OCnA/B/C. См. также “Блоки сравнения”. В случае определения совпадения значений сравниваемых регистров устанавливается соответствующий флаг прерываний (OCFnA/B/C), который в свою очередь может служить источником прерывания.

Регистр захвата позволяет запомнить состояние таймера-счетчика при возникновении заданного внешнего события (фронт внешнего сигнала) на входе захвата фронта ICPn или на выводах аналогового компаратора (см. “Аналоговый компаратор”). На входе захвата фронта предусмотрена схема цифровой фильтрации (подавитель шума) для снижения риска срабатывания схемы захвата от помехи. Верхний предел или максимальное значение таймера-счетчика в зависимости от режима работы таймера могут определяться значением в OCRnA, ICRn или иметь фиксированные значения. Если OCRnA задает верхний предел счета в режиме ШИМ, то он не может использоваться для генерации ШИМ-сигналов. Однако верхний предел в этом случае имеет двойную буферизацию, тем самым допуская изменение его значения в произвольный момент времени. Если верхний предел счета является постоянным значением, то альтернативно можно использовать регистр ICRn, освобождая регистр OCRnA для функции широтно-импульсной модуляции.

Определения

Некоторые определения и их сокращенные наименования, которые интенсивно используются в этом разделе, представлены в таблице 57.

Таблица 57 – Определения

НП (нижний предел) Счетчик достигает нулевого значения (0х0000)
МАКС (максимальное значение) Счетчик достигает максимального значения 0xFFFF (десятич. 65535)
ВП (верхний предел) Счетчик достигает верхнего предела счета (вершина счета). В качестве вершины счета могут выступать фиксированные значения 0x00FF, 0x01FF, 0x03FF или содержимое регистров OCRnA или ICRn.

Совместимость

По сравнению с предыдущими версиями 16-разр. таймеров-счетчиков данные таймеры доработаны и улучшены.

Совместимость этих таймеров соблюдается по следующим позициям:

  • Адреса всех регистров, связанных с 16-разр. таймером-счетчиком, в т.ч. регистры прерываний таймеров.
  • Расположение бит внутри всех регистров 16-разр. таймеров, в т.ч. регистры прерываний таймеров
  • Векторы прерываний

У следующих управляющих бит изменены наименования, но сохранено назначение и расположение в регистре:

  • PWMn0 заменен на WGMn0.
  • PWMn1 заменен на WGMn1.
  • CTCn заменен на WGMn2.

Ниже приведены регистры, которые были добавлены к 16-разр. таймеру-счетчику:

  • Регистр управления таймером-счетчиком С (TCCRnC).
  • Регистр С порога сравнения, OCRnCH и OCRnCL (или OCRnC).

Следующие биты добавлены в регистры управления 16-разр. таймером-счетчиком:

Источник