Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование встроенных приложений Keil uvision

.pdf
Скачиваний:
83
Добавлен:
06.01.2021
Размер:
4.29 Mб
Скачать

СПБГУАП группа 4736 / Индустрия 4.0

4.5.5. Заключение

Влабораторной работе рассмотрены принципы использования АЦП в составе МК К1986ВЕ92QI на базе отладочной платы МилКиТЭС.

Описан процесс подготовки МК к работе с модулем АЦП, приведены примеры инициализации АЦП, подготовки вспомогательных функций и портов ввода/вывода и алгоритм работы с блоком анализа границ измерений.

Следует отметить, что с помощью АЦП в составе МК К1986ВЕ92QI можно измерять сигналы с амплитудой не более +3.3В. В случае необходимости измерения сигналов с большей амплитудой можно применить делитель напряжения или, к примеру, воспользоваться усилительным каскадом на ОУ с коэффициентом усиления K < 1.

Студенту следует внимательно ознакомиться со всеми этапами настройки АЦП, разобраться в каждой операции проделанной

вкоде. В случае возникновения сложностей, необходимо самостоятельно изучить раздел посвященный АЦП в спецификации на МК К1986ВЕ92QI.

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

Для защиты лабораторной работы необходимо выполнить 10 задач из раздела 5.

109

СПБГУАП группа 4736 / Индустрия 4.0

4.5.6. Задачи для самостоятельной работы

1.Бегущий огонек. Включается 1 светодиод. При вращении потенциометра по часовой стрелке, выключается 1 и включается 2 светодиод и так далее. При вращении потенциометра против часовой стрелки, светодиоды зажигаются от 8 до 1.

2.Бегущие пиксели. 4 пикселя расположены каждый в разном углу. При вращении потенциометра они перерисовываются по часовой стрелке, в конце опять оказываются в углах. Против часовой – наоборот.

3.Квадрат. В центре дисплея отрисовывается квадрат, при вращении потенциометра по часовой стрелке квадрат увеличивается

вразмере, при вращении против часовой стрелки – уменьшается.

4.Пресс. Отрисовывается слой пикселей. С помощью потенциометра устанавливается, насколько далеко продвинется эта линия пикселей. По нажатию кнопки, пиксели перерисовывается на позицию, зависящую от положения потенциометра.

5.Светодиодный уровень. Линейка светодиодов показывает уровень положения потенциометра. Если, к примеру, положение потенциометра находится примерно в середине – включены 4 нижних светодиода. Если положение максимальное – включены все светодиоды.

6.Сигнализация. Необходимо подать сигнал пользователю при превышении границ измерений уровня 3.25 В.

7.Границы измерений. При нажатии пользователем на каждую из 6 кнопок устанавливается разные значения допустимых границ измерений АЦП. При этом на экране выводится информация о текущих допустимых значениях границ измерений в Вольтах. При их превышении необходимо оповестить пользователя.

Задачи 8 – 10 произвольные.

110

СПБГУАП группа 4736 / Индустрия 4.0

4.6. Основы работы с таймерами

Цель работы – освоение принципов работы таймеров общего назначения в составе МК К1986ВЕ92QI на базе отладочной платы МилКиТЭС.

Задачи:

1)Создать новый проект в среде Keil MDK-ARM;

2)Написать рабочий программный код с комментариями;

3)Проверить работоспособность программного кода;

4)Выполнить индивидуальные задания;

5)Написать отчёт о проделанной работе.

4.6.1. Введение

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

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

Система таймеров МК К1986ВЕ92QI содержит три таймера общего назначения и системный таймер. Каждый из трех таймеров микроконтроллера содержит 16-битный счетчик, 16-битный предделитель частоты. В рамках лабораторной работы сторожевые таймеры рассматриваться не будут.

111

СПБГУАП группа 4736 / Индустрия 4.0

4.6.2. Настройка таймера

Таймер 2 МК К1986ВЕ92QI используется для формирования временных задержек в библиотеке milkites_delay.h, остальные таймеры свободны, для реализации лабораторной работы будем использовать Таймер 1.

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

1) Разрешить тактирование блока Timer1 в регистрах PER_CLOCK и TIM_CLOCK контроллера тактовой частоты MDR_RST_CLK;

2) Задать коэффициент деления тактовой частоты HCLK для Timer1 в ре-

гистре TIM_CLOCK;

3) Настроить предделитель частоты тактирования счетчика в регистре

PSG блока MDR_TIMER1;

4) Настроить режим работы счетчика таймера в регистре CNTRL блока

MDR_TIMER1;

5) Определить основание счета счетчика в регистре ARR блока

MDR_TIMER1. Основание счета – это число тиков счетчика, при дости-

жении которого будет вызвано прерывание;

6) Задать начальное значение счетчика в регистре CNT блока

MDR_TIMER1;

7) Разрешить генерировать прерывание по переполнению счетчика

Timer1;

8)Разрешить прерывания глобально;

9)Настроить обработчик прерывания от Таймера 1;

10)Запустить Таймер 1.

Произведем расчет настроек таймера для получения прерывания каждую секунду. МК К1986ВЕ92QI в составе отладочной платы МилКиТЭС тактируется от встроенного генератора HSI (high speed internal) с частотой 8 МГц.

112

СПБГУАП группа 4736 / Индустрия 4.0

Коэффициент предварительного делителя частоты Таймера 1 равен единице по умолчанию, изменять его мы не будем, поэтому частота тактирования Таймера 1 TIM1_CLK = 8 МГц, при этом период одного тика TIM1_CLK будет равен 1 / TIM1_CLK = 125 нс.

Согласно формуле определения частоты тактирования тайме-

ров из спецификации, CLK = TIM_CLK / (PSG + 1).

Записав число 7999 в регистр PSG Timer1, получаем период тика счетчика Таймера 1 равным 1 мс:

8 МГц / 8000 = 1 кГц, T = 1 / 1000 Гц = 1 мс.

Для получения прерывания от Таймера 1 каждую секунду с текущими настройками следует задать основание счета таймера в регистре ARR = 999 (1 мс * 1000 = 1 с).

Таким образом получается, что время выполнения 1000 тиков Таймера 1 с описанными настройками будут длиться 1 секунду. На листинге 12 показан пример настройки Таймера 1 на генерирование прерывания каждую секунду.

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

*/

void Timer1_init(void)

{// настройка Т1 на генерирование прерывания каждую секунду

MDR_RST_CLK->TIM_CLOCK |= (1<< 24); // вкл. тактирование Таймера 1

// режим счета – вверх,начальное значение – число из регистра CNT

MDR_TIMER1->CNTRL = 0x00000000;

MDR_TIMER1->PSG =

7999;

// предделитель частоты

MDR_TIMER1->ARR =

999;

// основание счета = CNT + 1 = 1000

MDR_TIMER1->CNT =

0;

// начальное значение счетчика

MDR_TIMER1->IE =

2;

// разрешение генерир. прерывание при CNT=ARR

}

 

 

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

 

*/

Листинг 12. Подпрограмма инициализации Таймера 1

Теперь необходимо настроить обработчик прерывания от Таймера 1. Имя функции обработчика прерывания от Таймера 1 строго определено в файле “startup_MDR32F9Qx.s”, содержащем таблицу векторов прерываний МК (рис. 45).

113

СПБГУАП группа 4736 / Индустрия 4.0

Рис. 45. Фрагмент таблицы векторов прерываний МК К1986ВЕ92QI

Для удобства подсчета секунд объявим глобальную переменную sec_counter типа uint16. Обработчик прерывания от Таймера 1 выполняет инкремент счетчика секунд, сброс счетчика таймера и статуса прерывания (листинг 13).

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

*/

void Timer1_IRQHandler(void)

 

{ // обработчик прерывания от Т1

 

sec_counter++;

// инкремент счетчика секунд

MDR_TIMER1->CNT = 0;

// сброс счетчика таймера

MDR_TIMER1->STATUS = 0;

// сброс статуса прерывания

 

NVIC_ClearPendingIRQ(Timer1_IRQn); // сброс статуса прерывания

}

 

/*

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

Листинг 13. Подпрограмма обработчика прерывания от Таймера 1

Завершающим этапом настройки Таймера 1 будет создание функции запускающей Таймер 1.

Для запуска Таймера 1 следует записать “1” в первый бит ре-

гистра MDR_TIMER1->CNTRL:

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

*/

void Timer1_start(void)

 

{

 

MDR_TIMER1->CNTRL = 1; // команда запуска Таймера 1

 

}

 

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

*/

На этом подготовительная часть работы закончена, на листинге 14 показана программа подсчета секунд с использованием Таймера 1. Результат выполнения программы показан на рис. 46.

114

СПБГУАП группа 4736 / Индустрия 4.0

4.6.3. Пример использования таймера

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

 

*/

#include "MDR32Fx.h"

 

// подключение библиотеки МК

#define F_CPU 8000000

 

// указание тактовой частоты МК

#include "milkites_delay.h"

// подключение библиотеки задержек

#include "milkites_display.h" // подключение библиотеки дисплея

#define LCD_led_en

MDR_PORTE->RXTX |= (1<<2) // вкл. подсветки

#define LCD_led_dis

MDR_PORTE->RXTX &= ~(1<<2) // выкл. подсветки

/*======================== Функции Таймера1 ======================= */

void Timer1_init(){

// инициализация

void Timer1_IRQHandler(void){ //

обработчик прерывания

void Timer1_start(void){

// запуск

uint16_t sec_counter = 0;

//

переменная-счетчик секунд

/*================================================================= */

int main()

{

MDR_RST_CLK->PER_CLOCK = 0xffffffff; // вкл. тактирования периферии МК

MDR_PORTE->OE

= 0xff37; // биты 7,6,3 PORTE - входы (кнопки), др. -

выходы

 

 

 

MDR_PORTE->FUNC

=

0x0000; // функция - порт, основная функция

MDR_PORTE->PWR

=

0xff37;

// макс. быстрый фронт

MDR_PORTE->ANALOG =

0xffff;

// режим работы порта - цифровой ввод/вывод

delay_init(); LCD_init(); LCD_clear(); LCD_led_en;

Timer1_init(); NVIC_EnableIRQ(Timer1_IRQn); __enable_irq(); Timer1_start();

while (1)

{

//инициализация системы задержек

//инициализация дисплея

//очистка дисплея

//вкл. подсветки дисплея

//инициализация Таймера 1

//разрешение прерывания от Таймера 1

//глобальное разрешение прерываний

//запуск Таймера 1

LCD_set_cursor(0);

// установка курсора дисплея

LCD_print_text("счетчик секунд: "); // вывод текста на дисплей

LCD_print_num(sec_counter);

// вывод переменной на дисплей

if (sec_counter > 60000) sec_counter = 0; // проверка и сброс счетчика

} // while

 

} // main

 

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

*/

Листинг 14. Рабочий код программы счетчика секунд на основе Таймера 1

115

СПБГУАП группа 4736 / Индустрия 4.0

Рис. 46. Результат выполнения программы счетчика секунд на основе Таймера 1

4.6.4. Заключение

В лабораторной работе рассмотрены принципы использования таймеров в составе МК К1986ВЕ92QI на базе отладочной платы МилКиТЭС.

Система таймеров МК позволяет строить оптимизированные, быстродействующие программы, являясь мощнейшим аппаратным модулем МК. Зачастую вообще невозможно решить ту или иную задачу, не применяя таймер.

Необходимо запомнить, что временные характеристики таймеров напрямую зависят от качества системы тактирования МК. При построении систем на МК, требующих точных временных характеристик, рекомендуется использовать внешние устройства генерирования тактовых сигналов (генераторы, резонаторы), имеющие лучше показатели по сравнению с встроенными источниками тактовых импульсов МК.

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

Для защиты лабораторной работы необходимо выполнить 10 задач из раздела 5.

116

СПБГУАП группа 4736 / Индустрия 4.0

4.6.5. Задачи для самостоятельной работы

Выполнить с помощью таймеров

1.Измерения интервалов времени. Необходимо измерять и выводить на дисплей временные интервалы между нажатиями двух кнопок – кнопки старта и остановки таймера. Интервал счета – 100 мс.

2.Перегружаемый таймер. При нажатии на любую из 5 кнопок должна изменяться дискретность счета таймера. Ход работы программы отображать на дисплее.

3.Таймер для печи СВЧ. Разработать программу для управления печью СВЧ, имеющую возможность установки времени подогревания пищи. Для реализации использовать режим обратного счета таймера (см. спецификацию на МК).

4.Цифровые часы. Предусмотреть возможность установки начального времени, остановки и настройки часов.

5.Светофор. Разработать программу управления светофором

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

6.Синусоида. Последовательно вывести график синусоиды на дисплей. Период добавления новых точек – 188 мс.

7.Парабола. Последовательно вывести график параболы на дисплей. Период добавления новых точек – 223 мс.

Задачи 8 – 10 произвольные.

117

СПБГУАП группа 4736 / Индустрия 4.0

4.7. Изучение работы универсального асинхронного приемопередатчика (UART)

Цель работы – освоение принципов работы универсального асинхронного приемопередатчика (UART) в составе МК К1986ВЕ92QI на базе отладочной платы МилКиТЭС.

Задачи:

1)Создать новый проект в среде Keil MDK-ARM;

2)Написать рабочий программный код с комментариями;

3)Проверить работоспособность программного кода;

4)Выполнить индивидуальные задания;

5)Написать отчёт о проделанной работе.

4.7.1. Введение

Universal Asynchronous Receiver/Transmitter (UART) – универ-

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

Для передачи данных на ПК часто используются преобразователи интерфейсов. UART МК с помощью специальных устройств может быть преобразован в интерфейсы Ethernet, USB, RS485 и т.д.

МК К1986ВЕ92QI оснащен двумя модулями UART – UART1 и UART2 соответственно. Отладочная плата МилКиТЭС содержит преобразователь интерфейсов USB-UART на основе микросхемы FT230XS [6]. Микросхема представляет собой преобразователь интерфейса UART в виртуальный USB COM-порт. Это значит, что при подключении FT230XS к ПК через USB в системе появится виртуальный COM-порт, но работать с ним можно как с реальным (при условии, что установлен драйвер).

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

118