Промышленные

Как использовать таймеры в микроконтроллерах dsPic

Автор: Peter Berry
Дата создания: 11 Июль 2021
Дата обновления: 9 Май 2024
Anonim
Прерывания от таймер-счетчика ATmega8 | Микроконтроллеры с нуля #15
Видео: Прерывания от таймер-счетчика ATmega8 | Микроконтроллеры с нуля #15

Содержание

Автор завершил свой последний год инженерного проекта с микроконтроллерами dsPic, получив обширное представление об этих устройствах.

Модуль таймера является важным периферийным устройством внутри микроконтроллера dsPic и может использоваться в различных приложениях.

В этом руководстве будут использоваться готовые примеры кода на языке C, закодированные в MplabX IDE и протестированные на микроконтроллере Microchip dsPic30f4011, чтобы провести вас через процесс инициализации и настройки таймеров для ваших приложений dsPic.

Введение в модуль таймера в устройствах dsPic30f и dsPic33f

Модуль таймера в устройствах серии dsPic30f содержит всего пять 16-битных таймеров, а именно:

  • Таймеры с 1 по 5.

Точно так же устройство серии dspic33f содержит до девяти 16-битных таймеров, а именно:


  • Таймеры с 1 по 9.

Каждый из этих таймеров сгруппирован по трем типам: тип A, тип B и тип C, в зависимости от их особых характеристик.

Обзор специальных характеристик таймеров типа A, B и C.
* В Типе - B синхронизация выполняется после деления с помощью устройства предварительного масштабирования, а в Типе - C синхронизация выполняется до разделения с помощью устройства предварительного масштабирования.
* * Для таймеров dspic30f 2/4 может быть p

Наберите "АТип - БТип - C

Может работать от маломощного генератора 32 кГц.

Может быть объединен с таймером Type-C для формирования 32-битного таймера. * *

Может быть объединен с таймером типа B для формирования 32-битного таймера. * *

Может работать в асинхронном режиме с внешним источником.

-

Имеет возможность запускать аналого-цифровое преобразование.

Внешний источник часов может быть синхронизирован с внутренними часами

Внешний источник часов всегда синхронизируется с внутренними часами. *


Внешний источник часов всегда синхронизируется с внутренними часами. *

Режимы работы таймера в устройствах dsPic30f и dsPic33f

Помимо того, что каждый таймер сгруппирован по типу A, B или C, он может работать в четырех различных режимах:

  1. Режим таймера
  2. Режим закрытого таймера
  3. Режим синхронного счетчика
  4. Режим асинхронного счетчика

Сводка режимов работы таймера.

Режим таймераРежим закрытого таймераРежим синхронного счетчикаРежим асинхронного счетчика

Увеличивается на единицу при каждом нарастающем фронте входного тактового сигнала.

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

Увеличивается на единицу при каждом нарастающем фронте входного тактового сигнала.

Увеличивается на единицу при каждом нарастающем фронте входного тактового сигнала.

Внутренние часы используются

Внутренние часы используются


Внешние часы используются на выводе TxCK

Внешние часы используются на выводе TxCK

_

_

Часы внешнего и внутреннего устройства синхронизированы

Внешние и внутренние часы устройства не синхронизированы

Прерывание генерируется при совпадении периода

Прерывание генерируется по заднему фронту вывода TxCK.

Прерывание генерируется при совпадении периода

Прерывание генерируется при совпадении периода

Пример кода для инициализации таймера для dsPic30f и dsPic33f

недействительным init_Timer (недействительным) {T1CONbits.TON = 1; // Активируем модуль таймера T1CONbits.TCKPS = 0; // Выбираем предделитель входных часов как 1: 1 T1CONbits.TGATE = 0; // Отключить режим накопления времени затвора T1CONbits.TCS = 0; // Выбираем внутренние часы как источник тактовых импульсов таймера T1CONbits.TSYNC = 0; // Внешний источник синхронизации остается несинхронизированным PR1 = 0xFFFF; }

Общая процедура инициализации таймера в микроконтроллере dsPic30f и dsPic33f

При инициализации таймера для любого приложения можно следовать следующей общей процедуре:

  1. Решите, какой таймер использовать.
  2. Решите, требуется ли 16-битный таймер или 32-битный таймер.
  3. Определите режим работы таймера.
  4. Установите предварительный масштабатор часов.
  5. Решите, требуется ли прерывание по таймеру или какой-либо другой триггер специального события.

1) Какой таймер использовать

Каждый из таймеров может быть включен битом TON в регистре TxCON, где «x» - это номер таймера, который должен быть включен.

В нашем примере кода мы включили Таймер 1, установив бит TON в регистре T1CON на 1.

2) 16-битный таймер или 32-битный таймер?

Таймеры Type-B и Type-C могут быть объединены для работы как один 32-битный таймер. В сочетании, конфигурация таймера типа B будет преобладать над таймером типа C.

  • В устройстве dsPic30f таймеры 2 и 3 могут быть объединены в один 32-битный таймер.
  • Устройства dsPic33f имеют более одной пары 32-битных таймеров, где таймеры 2/3, 4/5, 6/7 и 8/9 также могут образовывать пары 32-битных таймеров.

Для этого бит T32 в регистре TxCON таймера типа B должен быть установлен в 1.

* x должен быть только таймером типа B.

TxCON.T32 *Конфигурация таймера

1

Связан с другой парой таймеров.

0

Будет работать как независимый 16-битный таймер.

3) Режим работы таймера

Режим работы таймера можно выбрать в соответствии со следующей таблицей.

Выбор режима работы таймера.
* Бит TSYNC доступен только в таймере Type-A, Type-B / C синхронизируются по умолчанию.

Имя битаБитовое значениеВыбран режим

TxCON.TCS

0

Режим таймера

TxCON.TGATE, TxCON.TCS

1, 0

Режим закрытого таймера

TxCON.TCS, TxCON.TSYNC *

1, 1

Режим синхронного счетчика

TxCON.TSYNC

0

Режим асинхронного счетчика

4) Часы-предделитель

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

Его можно выбрать с помощью следующей таблицы.

* x - номер таймера.

TxCON.TCKPS *Значение предделителя

3

1 : 256

2

1 : 64

1

1 : 8

0

1 : 1

5) Инициализировать прерывание по таймеру

Каждый таймер можно запрограммировать на запуск прерывания.

  1. Сравните соответствие между значением регистра счетчика таймера (TMRx) и регистра периода (PRx).
  2. Обнаружение спадающего фронта в режиме накопления стробированного времени.

Это прерывание может быть инициализировано в микроконтроллерах dsPic с помощью следующих регистров и битов.

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

Имя битаРегистр и идентификация битовЗначение

Бит управления разрешением прерывания

IEC0 / 1.TxIE

1 = включить 0 = отключить

Бит состояния флага прерывания

IFS0 / 1.TxIF

Этот бит необходимо сбрасывать программно после каждого срабатывания прерывания.

Бит управления приоритетом прерывания

IPC0 / 1 / 5.TxIP

6 - 0 в зависимости от приоритета

Этот пример кода можно использовать для инициализации процедуры обслуживания прерывания для таймера 1. (Выберите функцию инициализации таймера сверху и вызовите соответствующие функции в main ().)

Для получения подробной информации о прерываниях см.

Пример кода для инициализации прерывания в контроллерах dsPic30f и dsPic33f

void Interrupt_Init (void) {IEC0bits.T1IE = 1; IPC0bits.T1IP = 6; } void __attribute __ ((interrupt, auto_psv)) _T1Interrupt (void) {// Ваш код здесь IFS0bits.T1IF = 0; }

Полный пример кода для инициализации и тестирования таймера и прерывания от таймера для dsPic30f и dsPic33f

[Проверено автором: 22.09.2018]

Следующий код можно использовать для инициализации и тестирования Таймера 1 в «Режиме таймера» работы. Это сделано путем включения двух приведенных выше фрагментов кода.

Этот код будет генерировать прерывание, когда когда-либо произойдет сравнение между значением регистра PR1 и регистров TMR1.

  • Прерывание запрограммировано на мигание светодиода в течение 10 миллисекунд.
  • Значение регистра PR1: 0x8FF4 был установлен таким образом, что сравнение выполняется каждые 20 миллисекунд.

Таким образом, светодиод должен гореть 10 миллисекунд (пока программный счетчик остается в режиме прерывания) и выключаться еще 10 миллисекунд, когда программный счетчик выходит из прерывания. Время выключения контролируется Таймером 1.

#define FCY 1842500 #include xc.h> #include delay.h> #include libpic30.h> #include p30F4011.h> _FOSC (CSW_FSCM_OFF & FRC); // Fosc = 7,37 МГц, внутренний быстрый RC-генератор void init_Timer (void) {T1CONbits.TON = 1; // Активируем модуль таймера T1CONbits.TCKPS = 0; // Выбираем предделитель входных часов как 1: 1 T1CONbits.TGATE = 0; // Отключить режим накопления времени затвора T1CONbits.TCS = 0; // Выбираем внутренние часы как источник тактовых импульсов таймера T1CONbits.TSYNC = 0; // Внешний источник синхронизации остается несинхронизированным PR1 = 0x8FF4; } void Interrupt_Init (void) {IEC0bits.T1IE = 1; IPC0bits.T1IP = 6; } void __attribute __ ((прерывание, auto_psv)) _T1Interrupt (void) {_LATD0 = 1; __delay_ms (10); _LATD0 = 0; IFS0bits.T1IF = 0; } void main (недействительно) {init_Timer (); Interrupt_Init (); в то время как (1) {}}

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

Публикации

Интересное

Как сделать ваш компьютер быстрее с помощью RAID 0 и твердотельных жестких дисков
Компьютеры

Как сделать ваш компьютер быстрее с помощью RAID 0 и твердотельных жестких дисков

Мне всегда было интересно выяснить, как лучше всего ускорить работу моего компьютера.Независимо от того, какой у вас компьютер, наступит время, когда ваш компьютер будет казаться медленным и нуждаться...
Обзор игрового корпуса Corsair Carbide 400C Mid-Tower для игр
Компьютеры

Обзор игрового корпуса Corsair Carbide 400C Mid-Tower для игр

Я всего лишь мелкий парень, работающий на обычной работе помощником врача. Моя страсть - создавать ПК и тестировать / проверять аппаратное обеспечение ПК.Сегодня я представляю вам свой обзор корпуса C...