Вход/Регистрация
Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С
вернуться

Пак Дэниэл Дж.

Шрифт:

• Бит разрешения работы модуля таймера TEN (регистр управления модулем таймера TSCR);

• Бит разрешения прерывания по переполнению счетчика временной базы TOI и биты выбора коэффициента деления программируемого делителя частоты на входе счетчика временной базы PR2:PR1:PR0 (регистр масок таймера TMSK2);

• Бит выбора режима работы канала IOSn (регистр режимов каналов захвата/сравнения TIOS). Если бит IOSn установлен в 1, то канал работает в режиме выходного сравнения. Если бит IOSn равен 0, то канал настроен на режим входного захвата;

• Биты выбора режима работы детектора события канала входного захвата EDGnB:EDGnA (регистры управления таймером TCTL3 и TCTL4);

• Бит события в канале CnF (регистр флагов таймера TFLG1);

• Бит разрешения прерывания по событию в канале CnI (регистр масок таймера TMSK1);

• Регистр данных канала TCn, в который автоматически записывается код счетчика временной базы в момент события входного захвата.

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

1. Разрешить работу модуля таймера;

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

3. Установить один из каналов в режим входного захвата по нарастающему фронту импульса;

4. Сохранить в памяти МК код счетчика временной базы в момент появления первого фронта импульса;

5. Сохранить в памяти МК код счетчика временной базы в момент появления второго фронта импульса;

6. Взять разность полученных кодов, которая будет равна периоду исследуемого сигнала. Воспользовавшись операцией деления, вычислить частоту исследуемого сигнала. На рис. 4.43 приведена блок схема рассмотренного алгоритма. Ниже приведен программный фрагмент (timer1.c), который реализует этот алгоритм. В программе применен метод программного опроса триггера события входного захвата C2F. Когда программа «обнаруживает» установленный в 1 триггер события первый раз, она копирует регистр данных канала в переменную rising_1, сбрасывает триггер и ожидает следующей установки триггера события. Когда триггер события установится второй раз, программа копирует регистр данных канала в переменную rising_2. Разность двух зафиксированных в регистре данных канала входного захвата значений позволит вычислить период, а затем и частоту исследуемого импульсного сигнала.

Рис. 4.43. Блок схема алгоритма измерения периода и частоты исследуемого сигнала

Отметим три момента в стиле написания исходного текста представленного программного фрагмента для измерения периода и частоты импульсного сигнала:

• Основная программа «main» содержит вызовы трех функций, каждая из которых выполняет отдельную смысловую задачу;

• Имена функций и переменных выбраны в соответствии с их смысловым назначением;

• Представленный исходный текст программы достаточно полно документирован посредством комментариев перед записью каждой функции.

/*-------------------------------------------------------------------*/

/* filename: timer1.c */

/* МAIN PROGRAМ: Эта программа измеряет период и частоту импульсного */

/* сигнала. Сигнал подключается на вход 2 подсистемы таймера (IC2). */

/*-------------------------------------------------------------------*/

/*подключаемые файлы*/

#include <912b32.h>

#include <stdio.h>

#include <math.h>

/*используемые функции*/

void timer_init(void);

void measure_wave(void);

void period_freq(void);

/*глобальные переменные*/

unsigned long int rising_1;

unsigned long int rising_2;

void main(void) {

 timer_init; /*инициализация таймера*/

 measure_wave; /*определение времени двух фронтов сигнала*/

 period_freq; /*вычисление периода и частоты*/

}

/*----------------------------------------------------------------------*/

/* Функция timer_init производит инициализацию модуля таймера */

  • Читать дальше
  • 1
  • ...
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: