Читайте также:
|
|
Используется цифровой способ измерения периода импульсов: подсчет числа временных импульсов с эталонным периодом за время длительности измеряемого периода. При измерении периода импульсов с помощью таймера Т1 в режиме захвата требуются минимальные программные ресурсы, поэтому этот способ является предпочтительнее других. Таймер Т1 должен быть настроен в режим захвата с помощью регистра TCCR1B и на выполнение функции таймера. Значение коэффициента деления входного делителя частоты выберем равным 8. При частоте тактового генератора 16мГц на вход таймера будут поступать импульсы с периодом 0,5мкс. Так период импульсов может быть определен как разность между соседними фронтами или срезами, то соответственно выбирается тип входа захвата (фронт или срез).
Рисунок 63
После включения таймера он начинает счет времени в единицах 0,5мкс. В режиме захвата фронтом измеряемого импульса содержимое таймера (время первого фронта tf1) аппаратно помещается из таймера в регистр захвата ICR1 и вызывается функция обработки прерывания по захвату (предварительно прерывания по захвату разрешены), в которой необходимо значение tf1 из ICR1 поместить в переменную tf1. Таймер продолжает счет времени и в момент второго фронта tf2 фиксируется его время наступления в том же регистре захвата и опять вызывается функция прерывания по захвату. Теперь в ней необходимо значение tf2 из ICR1 поместить в переменную tf2 и вычислить период как разность Т= tf2 – tf1.
Так как функция прерывания вызывается два раза и, каждый раз выполняются в ней различные действия, то необходимо идентифицировать эти входы. Это может быть осуществлено проверкой значения некоторой переменной в начале подпрограммы обработки прерываний. Исходное значение этой переменной нулевое. Тогда при проверке, если ее значение равно нулю, то это первый вход в подпрограмму. Следовательно, нужно сохранить содержимое ICR1, установить значение переменной в единицу и произвести выход из функции обработки прерываний. Если значение переменной равно единице (зафиксировано время второго фронта), то необходимо сбросить таймер Т1, выполнить вычитание для получения значения периода снова установить значение переменной равное нулю, если требуется непрерывное измерение.
Значение периода после вычитания получится в единицах по 0,5мкс. Для перевода значения периода в микросекунды необходимо разделить полученное значение на 2.
Для измерения длительности положительного импульса необходимо при первом входе в подпрограмму прерывания по захвату перенастроить вход захвата ICP на захват по срезу импульса.
Ниже приведен текст программы с функцией: измерение периода импульсов c использованием режима захвата таймера Т1, сравнение измеренного значения с установленным и формирование звукового сигнала, если измеренное значение больше установленного.
# include <mega16.h>
sfrw = 0x26; //В файле mega16 нет имени полного регистра
//объявление имени 16разрядного регистра, 0х26-адрес ICR1.
unsigned int tf1, tf2,T; // Объявление переменных (16 разрядные беззнаковые)
unsigned char n; //n - идентификатор фронт1 / фронт2 импульса
main ()
{
OCR0 =32; // Значение соответствующее периоду звукового сигнала
# asm ("sei")
TIMSK = 0x20; //Разрешение прерываний по захвату
TCCR1B = 0x42; //Захват по фронту, коэффициент деления 2
TCCR1A = 0;
DDRB.3 = 1; //Для вывода звуковых импульсов с помощью Т0
while (1); // Работает (измеряет) таймер Т1.
}
interrupt [ TIM1_CAPT ]
void meas (void) //Функция прерывания при захвате. Время фронтов в ICR1
{
if (n = = 0) //Если ноль, то захват был по первому фронту
{
tf1 = ICR1 / 2; //Фиксация времени фронта в переменной и сразу
// в микросекундах
n = 1; // По второму фронту будет выполняться ветвь еlse
}
Еlse
{
n = 0; //Для следующего измерения
tf2 = ICR1 >> 1; //Фиксация времени второго фронта в микросекундах
T = tsr - tfr; //Измеренный период в микросекундах
if (Т >200) TCCR0 = 0x1D; // Если Т >200мкс, то включить звук
TCCR0 = 0; // Иначе выключить звук
}
TCNT1 = 0; // Для измерения следующего периода
}
Дата добавления: 2015-07-20; просмотров: 121 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Особенности схемы дисплея в учебной системе управления. | | | Обработка клавиатуры |