xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web...

75
СОДЕРЖАНИЕ ВВЕДЕНИЕ 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ 1.1 Назначение устройства 1.2 Требования к реализации 2 ТЕХНИЧЕСКОЕ ПРЕДЛОЖЕНИЕ 2.1 Элементная база 2.2 Схема подключения 3. ЭСКИЗНЫЙ ПРОЕКТ 3.1 Описание ЖК дисплея HD44780 4 ТЕХНИЧЕСКИЙ ПРОЕКТ 4.1 Построение проекта 4.2 Описание интерфейса 4.3 Основные конструкции и процедуры, используемые для написания программы 5. РАБОЧИЙ ПРОЕКТ 5.1 Реализация и программирование ВЫВОДЫ ПЕРЕЧЕНЬ ССЫЛОК ПРИЛОЖЕНИЕ А. ПРОГРАММА РЕАЛИЗАЦИИ УСТРОЙСТВ

Transcript of xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web...

Page 1: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

СОДЕРЖАНИЕ

ВВЕДЕНИЕ

1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ

1.1 Назначение устройства

1.2 Требования к реализации

2 ТЕХНИЧЕСКОЕ ПРЕДЛОЖЕНИЕ

2.1 Элементная база

2.2 Схема подключения

3. ЭСКИЗНЫЙ ПРОЕКТ

3.1 Описание ЖК дисплея HD44780

4 ТЕХНИЧЕСКИЙ ПРОЕКТ

4.1 Построение проекта

4.2 Описание интерфейса

4.3 Основные конструкции и процедуры, используемые для написания

программы

5. РАБОЧИЙ ПРОЕКТ

5.1 Реализация и программирование

ВЫВОДЫ

ПЕРЕЧЕНЬ ССЫЛОК

ПРИЛОЖЕНИЕ А. ПРОГРАММА РЕАЛИЗАЦИИ УСТРОЙСТВ

Page 2: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

ВВЕДЕНИЕ

Современный этап развития научно-технического прогресса

характеризуется широким применением электроники и микроэлектроники во

всех сферах жизни и деятельности человека. Важную роль при этом сыграло

появление и быстрое совершенствование интегральных микросхем –

основной элементной базы современной электроники. Интегральные

микросхемы применяются в вычислительных машинах и комплексах, в

электронных устройствах автоматики, цифровых измерительных приборах,

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

приборах и оборудовании для научных исследований и т.д.

Микрокомпьютер, в отличие от других компонентов, не обладает

фиксированным набором функциональных характеристик. Его

характеристики определяются в процессе проектирования системы с

помощью программирования. Практически неограниченный диапазон

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

придает этому компоненту особое значение.

В данном курсовом проекте необходимо разработать цифровой

тахометр на базе микроконтроллер ATtiny2313. Цифровой тахометр должен

выполнять следующие действия:

1) Обеспечить измерение частоты вращения ротора двигателя, которая

может изменятся от 100 до 9000 об/мин.;

2) Допустимая погрешность измерения в заданном диапазоне не более

2%;

3) Импульсный датчик выбрасывает 10 импульсов на каждый оборот.

4) Быстродействие системы должно быть таково, чтобы время

измерения не превышало двух оборотов.

5) Измеренное число оборотов выводится на индикатор.

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

Page 3: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ

Техническое задание (ТЗ) на проектирование должно содержать

исчерпывающую и однозначную информацию о требованиях, предъявляемых

к проекту. Техническое задание обычно объемный документ, в котором на

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

системы. Несмотря на строгость и точность формулировок ТЗ не дает

однозначного описания объекта проектирования и не позволяет

непосредственно переходить от описания функционирования системы к ее

техническому воплощению.

1.1 Назначение устройства

Необходимо реализовать на микроконтроллере ATtiny2313

электронный тахометр.

Электронный тахометр — тахометр, в котором для отсчёта частоты

вращения коленчатого вала двигателей внутреннего сгорания, в текущее

время.

1.2 Требования к реализации

Сроки проектирования определяются сроками выполнения курсового

проекта, включая разработку документации. Проект считается законченным,

если проведено программирование микроконтроллера и результат

соответствует техническому заданию. Основные требования к

проектированию: использование свободно распространяемых

микроконтроллеров ATtiny2313, использование тестового подхода к

проверке исправности модели устройства. Способ проверки – физическое

тестирование основных этапов программы

Page 4: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

2 Техническое предложение

Техническое предложение является частью предварительного

проектирования. При этом:

- принимается решение об использовании микроконтроллера

ATtiny2313, как, во-первых, отвечающего современным требованиям к

элементной базе; во-вторых, имеющегося в наличии на момент разработки

проекта;

- оптимизация алгоритма программы для устройства будет проводиться

на этапе программирования микроконтроллера.

2.1 Элементная база

Рассматриваемый бесконтактный тахометр – это компактное

устройство на микроконтроллере Attiny 2313 производства компании Atmel,

позволяющее измерять высокие скорости вращения бесконтактным

способом. Для измерения используется ИК сенсор (оптопара, ИК светодиод и

ИК фотодиод в одном корпусе). Вывод данных осуществляется на

двухстрочный символьный ЖК дисплей на базе контроллера HD44780.

Рисунок 2.1 ЖК дисплей

Page 5: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

Функциональная спецификация фиксирует, что система должна

сделать и как она взаимодействует с окружением.

Функциональная спецификация включает два основных компонента:

1)список функций выполняемых системой;

2)описание интерфейса между системой и пользователем.

Список функций выполняемых системой и интерфейс между системой

и пользователем определяются требованиями, которые предъявляются к

проектируемой системе потребителем или пользователем, будущих

эксплуатировать устройство. Исходя из заданных данных на курсовой проект

можно выделить следующие основные функциональные действия, которые

должна выполнять проектируемая компьютерная система:

Обеспечить измерение частоты вращения ротора двигателя, которая

может изменятся от 100 до 9000 об/мин ;

Данную функцию можно реализовать с помощью ИК сенсора

(оптопара), представляющий собой миниатюрный компонент с ИК

светодиодом и фотодиодом в одном корпусе, посылает ИК излучение на

вращающийся механизм (вал, ротор двигателя), на котором должна быть

небольшая отражающая наклейка.

Рисунок 2.2 Принцип без контактного получения данных

Несложность в управлении достигается минимизацией числа органов

управления и наглядным отображением измеряемой величины. Отображения

информации осуществляется при помощи четырех индикаторов, на которых

выводится значение измеряемой величины.

Page 6: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

Тахометр имеет три разряда индикации с пределом измерения от 60

мин-1 до 9000 мин-1. Погрешность измерения на пределе 1 секунда равна 30

мин-1, а на пределе 3 секунды – 10 мин-1. Нижний предел ограничен

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

индикацией. Из-за чего индикация разрядов становится прерывистой.

В статье-прототипе указана неверная формула [(2Nx3)/60] для

вычисления частоты вращения коленчатого вала. Поскольку за один оборот

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

подсчитываем за одну секунду 2N импульсов. Т.е. в два раза большее

количество, чем произошло оборотов (N). Чтобы получить значение

оборотов в минуту, необходимо умножить значение оборотов за секунду на

60 (Nsx60=Nm). Так как мы подсчитываем число импульсов не N, а 2N, то

умножать нужно уже не на 60, а на 30. А поскольку аппаратно мы

отбрасываем разряд единиц, то фактически делим значение оборотов на 10.

Из этого следует расчетная формула: Nm=2Nsx3 мин-1. Где Nm – значение

оборотов в минуту, 2Ns – число импульсов с прерывателя за одну секунду.

Если подсчитывать число импульсов за 3 секунды, то Nm=2Ns мин-1. Таким

образом, подсчитанное число импульсов за секунду достаточно умножить на

3 и перекодировать в двоично-десятичное, чтобы получить значение

оборотов в минуту без единиц. А на пределе 3-х секунд просто

перекодировать полученное значение. Показания индикатора равные 100

будут соответствовать значению 1000 мин-1.

Стоит отметить, что микроконтроллер, для решения поставленной

задачи по измерению оборотов, инициализирует два своих таймера: один

(Timer 0) настраивается в режим ШИМ для управления контрастностью,

другой (Timer 1) для подсчета количества оборотов.

Для решения задачи измерения напряжения питания без использования

каких-либо внешних компонентов, AVR микроконтроллер имеет очень

полезный встроенный узел, называемый внутренний Band Gap источник

опорного напряжения (Band Gap Reference Voltage). Выходное напряжение

Page 7: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

этого источника около 1.1 В, и оно остается неизменным при изменении

температуры и напряжения питания микроконтроллера. Это напряжение

может подаваться на вход АЦП, как и любое внешнее напряжение, с

единственным исключением, что делается это программно, без включения

дополнительных внешних компонентов.

Хотя данный узел не был разработан для нашей определенной цели, мы

будем использовать его в нашей задаче по измерению напряжения питания

микроконтроллера, а на основе полученных данных об уровне напряжения,

будем регулировать уровень контрастности дисплея.

ЖК индикатор подключен к микроконтроллеру по 4-битной шине.

Программа для микроконтроллера написана на Си в среде AVR Studio с

пользованием Си-компилятора WinAVR, исходный код снабжен подробными

комментариями, что позволяет пользователям вникнуть в алгоритм работы

микроконтроллера.

Основу проектируемого устройства составляет микроконтроллер

ATtiny2313, позволяющее измерять высокие скорости вращения

бесконтактным способом. Для измерения используется ИК сенсор (оптопара,

ИК светодиод и ИК фотодиод в одном корпусе). Вывод данных

осуществляется на двухстрочный символьный ЖК дисплей.

Общие характеристики микроконтроллера ATtiny2313:

- использует AVR® RISC архитектуру;

- AVR — это высокое быстродействие и специальная RISC-архитектура

с низким потреблением;

- 120 мощных инструкций, большинство из которых выполняется за

один машинный цикл;

- 32 восьмиразрядных регистра общего назначения;

- полностью статическая организация (минимальная частота может

быть равна 0);

- до 20 миллионов операций в секунду (MIPS/Sec) при тактовой частоте

20 МГц.

Page 8: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

Сохранение программ и данных при выключенном питании:

- 2 Кбайт встроенной программируемой Flash-памяти, до 10000 циклов

записи/стирания;

- 128 байт встроенной программируемой энергонезависимой памяти

данных (EEPROM);

- до 100000 циклов записи/стирания;

- 128 байт внутреннего ОЗУ (SRAM);

- Программируемые биты защиты от чтения и записи программной

памяти и EEPROM.

Периферийные устройства:

- один 8-разрядный таймер/счетчик с программируемым пред-

делителем и режимом совпадения;

- один 16-разрядный таймер/счетчик с программируемым пред-

делителем, режимом совпадения и режимом захвата;

- четыре канала ШИМ (PWM);

- встроенный аналоговый компаратор;

- программируемый сторожевой таймер и встроенный тактовый

генератор;

- универсальный последовательный интерфейс USI (Universal Serial

Interface);

- полнодуплексный USAR.T.

Особенности микроконтроллера:

- специальный вход debugWIRE для управления встроенной системой

отладки;

- внутрисистемный программируемый последовательный интерфейс

SPI;

- поддержка как внешних, так и внутренних источников прерываний;

- три режима низкого потребления (Idle, Power-down и Standby);

- встроенная система аппаратного сброса при включении питания:

- программируемая схема контроля снижения напряжения питания:

Page 9: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

- внутренний перестраиваемый тактовый генератор;

- цепи ввода—вывода и корпус;

- 18 программируемых линий ввода—вывода;

- три вида корпусов: PDIP — 20 контактов; SOIC — 20 контактов;

QFN/MLF — 20 контактных площадок.

Напряжения питания:

- 1,8 — 5,5 В (для ATtiny2313V);

- 2,7—5,5 В (для ATtiny2313).

Диапазон частот тактового генератора ATtiny2313V:

- 0—4 МГц при напряжении 1,8—5,5 В;

- 0—10 МГц при напряжении 2,7—5,5 В.

Диапазон частот тактового генератора ATtiny2313:

- 0—10 МГц при напряжении 2,7—5,5 В;

- 0—20 МГц при напряжении 4,5—5,5 В.

Ток потребления в активном режиме:

- 1 МГц, 1,8 В: 230 мкА;

- 32 кГц, 1,8 В: 20 мкА (с внутренним генератором).

Ток потребления в режиме низкого потребления:

- не более 0,1 мкА при напряжении 1,8 В.

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

цикл с использованием многоуровневой конвейерной обработки. В тот

момент, когда очередная команда выполняется, следующая команда

считывается из программной памяти. Такая концепция позволяет выполнять

по одной команде за один такт системного генератора. Программный сегмент

памяти физически представляет собой встроенную перепрограммируемую

Flash-память.

регистров быстрого содержит 32 восьмиразрядных общего

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

(ОЛУ) большинство операций за один .

Page 10: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

Файл регистров доступа содержит 32 регистра назначения, доступ к

осуществляется за один системного генератора. Это арифметико-

логическому (ОЛУ) осуществлять своих операций за такт.

Типичная АЛУ выполняется образом: из регистрового читаются два

операнда, операция. Результат опять же в регистров. Все эти три действия

за один цикл генератора.

Рис 2.1 Блок микроконтроллера

Page 11: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

AVR имеет большой инструкции для работы с 32 общего назначения.

Все 32 непосредственно с арифметико-логическим устройством (), которое

позволяет одну команду для разных за один такт генератора. Такая

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

микроконтроллеров, по CISC-технологии.

Особенности ATtiny2313

Микросхема 2313 имеет особенности:

- 2 Кбайт программируемой Flash-памяти ;

- 128 байт EEPROM;

- 128 SRAM ();

- 18 линий ввода—вывода ();

- 32 рабочих регистра;

- интерфейс для внутрисхемной ;

- два многофункциональных с функцией совпадения;

- внешних и внутренних ;

- последовательный программируемый ;

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

- программируемый таймер с внутренним ;

- три программно режима энергосбережения. В Idle происходит

центрального процессора, системы работать. Выход из режима возможен

как по прерыванию, так и по внутреннему. , при переполнении .

Чтобы максимально работу и сделать параллельное выполнение

операций, AVR используют Гарвардскую . Такая архитектура отдельную

память и шину как для программы, так и для данных.

команда из памяти выполняется за один цикл с многоуровневой

конвейерной . В тот момент, когда команда выполняется, команда из

программной памяти. концепция позволяет по одной команде за такт

генератора. Программный памяти физически собой встроенную Flash-

память.

Page 12: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

из этих регистров-указателей также использоваться в указателя

адреса , размещенных в программ (Flash-памяти). Эти составные 16-

разрядные именуются X, У и Z.

Микроконтроллер 2313 поддерживается программными средствами и

средствами разработки, как компиляторы C, макроассемблеры,

отладчики/симуляторы, эмуляторы и ознакомительные .

2.2 Схема подключения

примененных компонентов о в схеме:

IC1 Attiny 2313

Q1, Q2 BCW66G

C1, C210 нФ

C4, C533 пФ

X1Кварцевый резонатор 20 МГц

R1, R2, R7470 Ом

R31 кОм

R41.5 кОм

R51 МОм

R6110 Ом

R870 Ом

LED3

IR1Оптопара TCND

B1Кнопка

B2 питания

JP1Разъем программирования

JP2Разъем

Page 13: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

Рис 2.3 Принципиальная схема

Page 14: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

2.3 Алгоритм и реализации

Для программирования Attiny 2313 использовать языки , ассемблер, C.

Для солнечного трекера был язык C.

Алгоритм данного устройства на рисунке 2.3.

Ри 2.4 - Алгоритм работы устройства

Page 15: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

3 ЭСКИЗНЫЙ

На данном этапе функциональные дисплея

3.1 Описание ЖК HD44780

ЖК на базе HD44780 являются средством различной информации и с

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

(скроллирование, , определяемые пользователем ) позволяет разрабатывать

интерфейсы и устройства индикации.

4-х битного режима даёт возможность минимум микроконтроллера.

Довольно информации по этим можно найти в , поэтому пример

ассемблерных , вставленных в код на С, для 4-х битного , как

представляющий наибольший для разработчиков.

включения:

PIC RB2 - LCD RS

PIC RB3 - LCD E

PIC RB4 - LCD B4

PIC RB5 - LCD B5

PIC RB6 - LCD B6

PIC RB7 - LCD B7

Помимо : LCD R/W - заземлить, LCD B0...LCD B3 - к плюсу питания

резисторы.

/*------------- примера-------------*/

.

.

.

char ;

/* вывод старшей байта данных */

out_nibble() {

Page 16: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

asm {

_lcd_data ; байт должен быть в W

bcf , 4

btfsc _lcd_data, 4

bsf , 4

bcf PORTB, 5

_lcd_data, 5

bsf PORTB, 5

bcf , 6

btfsc _lcd_data, 6

bsf , 6

bcf PORTB, 7

btfsc _, 7

bsf PORTB, 7

}

}

/* байта в 8-ми режиме (требуется

для инициализации ЖКИ) */

wr_cmd(char ) {

asm {

bcf PORTB, 2 ; RS - down, в IR

movfw param00_wr_cmd

_out_nibble

bsf PORTB, 3 ; E - up

bcf , 3 ; E - down

_delay

}

}

/* вывод команды на ЖКИ */

void cmd) {

Page 17: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

asm {

bcf PORTB, 2 ; RS - , пишем в IR

param00_wr_cmd4

call _

bsf PORTB, 3 ; E - up

bcf PORTB, 3 ; E -

call _delay

param00_wr_cmd4, W ; тетрады байта

_out_nibble

bsf PORTB, 3 ; E - up

bcf , 3 ; E - down

call _

}

}

/* вывод данных на ЖКИ */

void data) {

asm {

bsf PORTB, 2 ; RS - up, в DR

movfw param00_wr_data4

_out_nibble

bsf , 3 ; E - up

bcf PORTB, 3 ; E - down

_delay

swapf 4, W ; меняем тетрады

call _

bsf PORTB, 3 ; E - up

bcf PORTB, 3 ; E -

call _delay

}

}

Page 18: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

/* */

void delay() {

(1);

}

.

.

.

/*-------------окончание -------------*/

В приведенных примерах не флаг занятости ( flag) контроллера 44780,

взамен процедуры вывода на ЖКИ задержки; на это следует внимание.

Ниже фрагмент на С, выводящую фрагмент на экран ЖКИ формата 2 по 16

символов.

/*-------------начало -------------*/

.

.

.

char i, ch;

/* ЖКИ в 8-ми битном

(рекомендуется производителем) */

28);

delay_ms(5);

wr_cmd(0x28);

();

wr_cmd(0x28);

();

/* инициализация ЖКИ в 4-х битном */

wr_cmd4(0x28);

wr_cmd4(0x0c);

06);

ch = 0x20;

Page 19: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

wr_cmd4(0x80); /* на первую экрана */

for (i=0; <16; i++) {

wr_data4(ch); /* символы */

ch++;

}

0); /* переход на строку экрана */

for (=0; i<16; i++) {

); /* выводим символы */

++;

}

.

.

.

/*-------------окончание -------------*/

Page 20: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

4 ТЕХНИЧЕСКИЙ ПРОЕКТ

На данном происходит описание и функций языка , выбор проекта и

принципов моделей и т.д.

Выполняются работы:

составление и блоков на программирования;

определяются связи;

описание и переменных;

отладка (пошаговое основных блоков в процессе написания и

некорректной работы);

подробно все вышеперечисленные этапы.

4.1 проекта

Осуществив все изложенные этапы и проанализировав проект, мы

переходим к стадии проектирования – проект, а именно к проекта для в

микроконтроллер Attine

При описании моделей на программирования большое следует

конструкциям языка. Так использовать конструкции, воспринимаются

программой микроконтроллера, а оптимизировать конструкции для

наименьших аппаратных . Данный процесс трудоемкий и совершенного

знания и программы проводящей микроконтроллера.

Page 21: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

4.2 Описание

Принципы модели включает написания языкового . Спецификация

составляется на всю , состоящую из блоков в соответствие со этапами.

Необходимо анализ требуемых параметров и , а также определить их

тип и значения.

4.3 Основные и процедуры, используемые для программы

4.1 - Создание макроса

# byBladeCnt 2

#define 0x01 //0x00 - для 4MHz, 001 - для кварца 8MHz...

# UpCount 4 // +1 = количество (0,1S) до обновления

# <tiny2313.h>

# <delay.h>

BOOLEAN ; // = 1, когда нужно время на дисплее

wTime; // , которое показывает (в десятых секунды)

btTimerOn; // TRUE - запущен, - остановлен

BYTE ; // счетчик десятых

BYTE byDisplayRefreshCnt; //

ShowDisplayData(void); // экранного буфера

PrepareRpmData(WORD wRpm);

btDisplayUpdate; // = TRUE, пришло обновить дисплей

byDisplay[4]; // буфер , для вывода на экран

wLockedRpm;

// знакогенератора

BYTE [12] = {0xFA, //0

0x82, //1

09, //2

0xAB,//3

Page 22: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

0xC3, //4

0, //5

0x7B, //6

02, //7

0xFB, //8

0xEB, //9

000, //blank

0x01 //-

};

wRpm; // Скорость ротора ()

//BOOLEAN btRpmUpdate; // = 1, измеряно новое оборотов

WORD ; // Счетчик таймера (нужен для

// разрядности

WORD ; // Счетчик срабатываний прохождения

BOOLEAN btFirstLowRateFlash; // - если отсчет еще не начался

// (датчик ни не сработал)

4.2 – Обновление дисплея

RefreshDisplay(void)

{

#");

if (btDisplayUpdate)

{

wLockedRpm = ;

btDisplayUpdate = ;

}

#asm("sei");

PrepareRpmData(wLockedRpm);

();

}

Листинг 4.3 - Преобразование мотора

Page 23: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

void wRpm)

{

i;

WORD R;

R = wRpm;

[3] = wRpm % 10;

wRpm /= 10;

if ([3] > 4) //округляем

{

wRpm++;

R += 10;

}

[3] = 0;

// Первые 4 - обороты двигателя

=0; i<3; i++)

{

byDisplay[2-i] = % 10;

wRpm /= 10;

}

if (R < 10)

{

byDisplay[0] = 10;

[1] = 10;

byDisplay[2] = 10;

exit;

}

if ((R >= 10) & (R <100))

{

[0] = 10;

byDisplay[1] = 10;

Page 24: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

goto ;

}

if ((R >= 100) & (R <1000))

{

[0] = 10;

goto ;

}

exit:

}

Листинг 4.4 экранного буфера на .

void ShowDisplayData(void)

{

# Cathode

= byCharacter[byDisplay[0]];

PORTD.5 = 0;

);

PORTD.5 = 1;

PORTB = [1]];

PORTD.1 = 0;

delay_us(LED_delay);

.1 = 1;

PORTB = [2]];

PORTD.0 = 0;

delay_us(LED_delay);

.0 = 1;

PORTB = byCharacter[byDisplay[3]];

.4 = 0;

delay_us(LED_delay);

PORTD.4 = 1;

#

Page 25: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

#ifdef

PORTB = ~byCharacter[byDisplay[0]];

.5 = 1;

delay_us(LED_delay);

PORTD.5 = 0;

= ~byCharacter[byDisplay[1]];

PORTD.1 = 1;

);

PORTD.1 = 0;

= ~byCharacter[byDisplay[2]];

PORTD.0 = 1;

);

PORTD.0 = 0;

PORTB = ~[3]];

PORTD.4 = 1;

delay_us(LED_delay);

.4 = 0;

#endif

if (! .6)

{

delay_us(Light_delay);

}

}

Лисинг 4.5 - прерываний от OC1 (для импульсов 0.1 сек)

[TIM1_COMPA] SYSTEM_TICK_interrupt(void)

{

// Вычисляем следующего срабатывания

OCR1A += CNT_100_MS;

// 3 в секунду дисплей,

// независимо от .

Page 26: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

if( ++byDisplayRefreshCnt == UpCount )

{

= 0;

btDisplayUpdate = TRUE;

}

// секундомер - инкрементируем его показания

if( )

{

if (++byTcnt == 10)

{

byTcnt = 0;

if( ++ == 60000)

wTime = 0;

}

}

}

4.6 - Обработка от управляющих импульсов

[EXT_INT0] void )

{

long lTmp;

&= ~0x40;

)

{

// Первый импульс, счетчик периода и

// импульсов

wTimerOvfCnt = 0;

= 0;

TCNT0 = 0;

= 0x02;

TCCR0B = 003; // FCK / 64 ( 62.5 KHz )

Page 27: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

TCNT0 = 0;

TIMSK |= 002; // Разрешаем прерывания от 0

btFirstLowRateFlash = ;

}

else

{

wFlashCnt++;

// , не пора ли закончить

if( wTimerOvfCnt > TIMER_OVF_ENOUGHT )

{

= 0; // Останавливаем 0

GIMSK &= 0x40; // прерывания от INT0

&= ~0x02; // Запрещаем от TMR0

& 0x02)

wTimerOvfCnt++; // возможность переполнения

= (62500L * 60L * (long)wFlashCnt);

/= ((wTimerOvfCnt << 8) + 0);

lTmp /= byBladeCnt;

= lTmp;

// Перезапускаем

btFirstLowRateFlash = TRUE;

= 0;

TCNT0 = 0;

= 0x03; // FCK / 64 ( 62.5 KHz )

TCNT0 = 0;

= 0x02;

TIMSK |= 002; // Разрешаем прерывания от 0

// GIFR = 040;

}

}

Page 28: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

EIFR = 0x40;

|= 0x40;

}

Листинг 4.6 - [TIM0_OVF] void )

{

wTimerOvfCnt++;

// импульсов не было долго, то показываем

// 0 и запускаем измерение

if( wTimerOvfCnt > )

{

wRpm = 0;

btFirstLowRateFlash = ;

wTimerOvfCnt = 0;

}

}

Листинг 4.7 функция. Инициализация модулей. вызова рабочих

void main()

{

// Crystal Oscillator factor:

# optsize-

CLKPR=0x80;

; //0x00 - для кварца4 , 0x01 - для кварца8 ...

#ifdef __

#pragma optsize+

#

#asm("cli");

MCUCR = 000; // Запрещаем SLEEP, прерывания не важны.

// В принципе, можно и не делать.

= 0x00; // Запрещаем прерывания

= 0xFF; // Очищаем прерываний

Page 29: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

TIMSK = 000; // Запрещаем прерывания от

TIFR = 0; // Очищаем флаги

//Разряд DDRx - направление передачи (0 - вход, 1 - ).

//Разряд PORTx - вывод определен (DDRx = 1), то:

// если 1 - то на выводе лог. 1

// если установлена 0 - то на устанавливается лог. 0

// если определен входом ( = 0), то PORTx - состояние

подтягивающего (при PORTx = 1 подключен)

//Разряд - доступен для чтения и содержит значение вывода

PORTA=0b00000011;

DDRA= 000000011;

PORTB=0b00000000;

= 0b11111111;

#ifdef

PORTD=0b01111111;

DDRD= 000110011;

#endif

#ifdef

PORTD=0b01001100;

= 0b00110011;

#endif

// модули

//time------------------------------------

= FALSE;

wTime = 0;

= 0;

byDisplayRefreshCnt = 0;

= FALSE;

TCNT1 = 0;

= 0x00; // Отключаем выводом OC1 и PWM

Page 30: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

TCCR1B = 003; // На таймер FCK через делитель на 64,

// отключен, никакого нет

OCR1A = TCNT1 + ;

TIFR |= 040; // Сбрасываем флаг от Output-Compare

TIMSK |= 040; // Разрешаем прерывание от

//time------------------------------------

//-------------------------------------

btFirstLowRateFlash = TRUE;

= 0;

// Разрешаем прервание 1

EIFR = 0x40;

|= 0x40;

= 0x02; // Настраиваем 0 на спад, остальные не важны.

// Таймер сразу, проверять

// отсутствие

wTimerOvfCnt = 0;

TCNT0 = 0;

= 0x03; // FCK / 64 ( 62.5 KHz )

TCNT0 = 0;

|= 0x02; // прерывания от TMR0

//-------------------------------------

#asm("sei");

// StartLowRateRpm();

)

{

RefreshDisplay();

}

}

Page 31: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

5. РАБОЧИЙ

Рабочий включает в себя устройства и физическое .

5.1Реализация и программирование

среда IAR Workbench IDE содержит: оболочку для управления ами

проекта; текстовый исходного программы; кросс-компилятор; ,

программатор; автоматический программного ; терминал для с

последовательным интерфейсом (USART).

Полученный в компиляции исходного программы на С исполняемый

модуль ( прошивки) может непосредственно записан в па программ .

Рисунок 5.1 – Главное IAR Embedded Workbench IDE

Page 32: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

5.1 – Описание пунктов

Меню

FileВ меню представлены команды для новых файлов и проекта, ,

печать и выход из IAR Workbench IDE.

Edit Edit содержит редактирования и в окнах редактора, и

отключения контрольных в C-SPY.

ViewКоманды View для того, чтобы окна и выбрать для

необходимые инструментальные .

Project Project содержит для того, чтобы файлы к проекту, группы, и

инструментальные средства IAR в проекте.

Tools

Tools - пользовательское-конфигурируемое , к которому Вы

добавить инструментальные для использования с IAR

Embedded IDE.Windo

w

С помощью в меню вы можете управлять окнами IAR

Embedded IDE и изменять их расположение экрана.

Меню Help справку о IAR Embedded IDE.

Toolbar. Инструментальная , представленная в Вид, обеспечивает

доступ к часто используемым IAR.

Описание любой можно , наведя на нее курсор . Когда команда не ,

соответствующая кнопка будет , и нельзя щелкнуть на нее.

На 1.16 показано меню , соответствующее каждой из панели:

4.2 – Панель инструментов

Page 33: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

Bar. Строка состояния активного окна, из меню Вид, состояние IAR.

В процессе , строка состояния текущую линию и столбца, курсор,

Caps , Num Lock, и состояние .

Окно рабочей . Окно , доступное из меню , показывает название

рабочей области и представление , групп и файлов, в рабочую область.

5.3 – Окно рабочей

В раскрывающемся вверху окна выбрать конфигурацию текущего

проекта ( или Release).

меню окна . Щелчок правой мыши в окне отображает меню, которое

удобный доступ к командам.

Описание контекстного окна Workspace в таблице 1.4.

Page 34: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

Таблица 5.2 – меню окна

Команда Описание

Options

диалоговое окно, где установить параметры для из

используемых в выбранном элементе рабочей

области. можно установить во проекте, в файлов,

или в отдельном

MakeСобирает, , и связывает текущие в соответствии с

изменениями в проекте.Компилирует или транслирует файл. Можно файл в

окне или окно , содержащего файл, необходимо

компилировать.

AllПовторно и повторно связывает все в выбранной

конфигурации.

Удаляет промежуточные .

Stop Останавливает текущую .

Add>Add Files диалоговое окно, в можно файлы к проекту.

GroupОткрывает окно, в котором добавить группы к

проекту.

Удаляет выбранные из окна Workspace.

Code Открывает подменю с для управления исходным

File Properties стандартное окно File для выбранного файла.

Set as Устанавливает активным проект в краткого обзора.

Source Code . Меню Source Control из меню Project и из меню в окне .

Таблица 5.3 - Меню Code

Команда меню

Check In

(регистрация)

диалоговое окно In Files, где зарегистрировать

выбранные

Любые изменения, сделаны в файлах, сохранены в .

Page 35: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

Эта команда допускается, в настоящее время файлы

отобраны в рабочей .

Check Out

(проверка)

выбранный файл или .

Это означает, что можно местную файла(ов), который

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

регистрации

Check out (отмена )

Отобранные файлы к последней заархивированной .

Любые (замены), сделанные в , будут потеряны. Эта

доступна после команды . Get Latest Version выбранные файлы заархивированной версией.

Показывает в SCC различия между версией и новой

версией. History информацию о проверки выбранного .

Properties Отображает о выбранном файле

Обновляет для всех файлов, являются частью . Эта

команда всегда для всех под SCC. Add Project To

Source

Открывает диалоговое , которое позволяет

подключение выбранным IAR проектом и SCC.

Remove Project

Source Control подключение выбранными IAR проектом и SCC.

Состояния Source Control. Каждый иc, управляемый , файл может в

одном из нескольких .

Таблица 5.4 - Состояния Code .

SCC состояние Описание

INCLUDEPICTURE

"../../Documents

%20and

%20Settings/ADMIN/

. Файл доступен для

Page 36: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

Application

%20Data/Microsoft/

Documents%20and

%20Settings/

Administrator/

Application

%20Data/Microsoft/

Documents%20and

%20Settings/

Administrator/

Application

%20Data/Microsoft/

Word/iardoc/

HelpAVRIDE1/

images/

SCC_StatusOpen.jpg"

\* MERGEFORMAT

INCLUDEPICTURE

"../../Documents

%20and

%20Settings/ADMIN/

Application

%20Data/Microsoft/

Documents%20and

%20Settings/

Administrator/

Application

%20Data/Microsoft/

Documents%20and

Проверенный. Файл для редактирования и был .

Page 37: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

%20Settings/

Administrator/

Application

%20Data/Microsoft/

Word/iardoc/

HelpAVRIDE1/

images/

SCC_StatusModified.j

pg" \*

MERGEFORMAT INCLUDEPICTURE

"../../Documents

%20and

%20Settings/ADMIN/

Application

%20Data/Microsoft/

Documents%20and

%20Settings/

Administrator/

Application

%20Data/Microsoft/

Documents%20and

%20Settings/

Administrator/

Application

%20Data/Microsoft/

Word/iardoc/

HelpAVRIDE1/

images/

SCC_StatusLocked.jp

. Во многих системах SCC это , что файл защищен от .

Page 38: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

g" \*

MERGEFORMAT

(серый замок) INCLUDEPICTURE

"../../Documents

%20and

%20Settings/ADMIN/

Application

%20Data/Microsoft/

Documents%20and

%20Settings/

Administrator/

Application

%20Data/Microsoft/

Documents%20and

%20Settings/

Administrator/

Application

%20Data/Microsoft/

Word/iardoc/

HelpAVRIDE1/

images/

SCC_CheckedInOutof

Date.jpg" \*

MERGEFORMAT

(серый )

Зарегистрированный. Есть версия, доступная в .

INCLUDEPICTURE

"../../Documents

%20and

%20Settings/ADMIN/

Во системах SCC это , что нельзя проверить .

Page 39: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

Application

%20Data/Microsoft/

Documents%20and

%20Settings/

Administrator/

Application

%20Data/Microsoft/

Documents%20and

%20Settings/

Administrator/

Application

%20Data/Microsoft/

Word/iardoc/

HelpAVRIDE1/

images/

SCC_CheckedOutToO

ther.jpg" \*

MERGEFORMAT

(красный замок) INCLUDEPICTURE

"../../Documents

%20and

%20Settings/ADMIN/

Application

%20Data/Microsoft/

Documents%20and

%20Settings/

Administrator/

Application

%20Data/Microsoft/

новая версия, в архиве. Во системах SCC это

означает, что проверить файл.

Page 40: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

Documents%20and

%20Settings/

Administrator/

Application

%20Data/Microsoft/

Word/iardoc/

HelpAVRIDE1/

images/

SCC_CheckedOutToO

therOutofDate.jpg" \*

MERGEFORMAT

(красный замок)

Page 41: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

цифровой тахометр

Данный проект позволил детально ознакомится с типа AVR Attiny В

процессе проекта были навыки проектирования, и внедрение проекта в

модель.

В выполнения комплексного проекта был описан создания и

программно устройства часов на основе Attiny 2313.

результаты показывают, что работоспособна и к использованию.

Конечным проведенной работы, структурная и принципиальная

цифрового , а также сборка устройства и проверка его на .

Page 42: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

ПЕРЕЧЕНЬ ССЫЛОК

1. указания к работам по курсу “ во встроенных системах для студентов

всех / Составители О.Г., Крук О.Я., Семенец В.В. – , 2005. – 105 с.

2.В. А. Гулиус, В. Г. , В. П. Степанов, В. Ю. Цуканов. “ автоматизированного

специализированных микропроцессорных ”: Учебное пособие – : ХНУРЭ,

2001. – 228 с.

3. Н. В., Коряк С. Ф., В. Г.. “Основы построения ЭВМ и систем”. Под общ.

ред. В. Г. Лободы. – : ООО «Компания СМИТ», – 148 с.

4.Проектирование устройств на микропроцессорах: . пособие /В. Г. Лобода,

В. В. , В. Б. Таранов. – К.: УМК ВО, 1988. – 128 с.

5. указания к курсовому проекту / : В.Г. Лобода, А.С. Шкиль, Л.К. .- Харков,

ХНУРЭ – 8с.

6. Arduino programming notebook /Brian W.Adams

7. Wikipedia.org

Page 43: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

ПРИЛОЖЕНИЕ А. Программа реализации устройств

#define TRUE (!FALSE)

#define FALSE 0

#define BYTE unsigned char

#define WORD unsigned short int

#define BOOLEAN char

#define TIMER_OVF_ENOUGHT 49

#define NO_PULSES_INTERVAL 200

#define LED_delay 250

#define Light_delay 2500

//#define Anode

#define Cathode

#define CNT_100_MS 6250

#define byBladeCnt 2

#define Prescaler 0x01 //0x00 - для кварца 4MHz, 0x01 - для кварца

8MHz...

#define UpCount 4 // +1 = количество пропусков (0,1S) до обновления

#include <tiny2313.h>

#include <delay.h>

BOOLEAN btTimeUpdate; // = 1, когда нужно обновить время на

дисплее

WORD wTime;

BOOLEAN btTimerOn; // TRUE - таймер запущен, FALSE - остановлен

BYTE byTcnt;

BYTE byDisplayRefreshCnt; //

void ShowDisplayData(void); // Вывод экранного буфера

void PrepareRpmData(WORD wRpm);

BOOLEAN btDisplayUpdate; // = TRUE, если пришло время обновить

дисплей

Page 44: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

BYTE byDisplay[4]; // буфер данных, для вывода на экран

WORD wLockedRpm;

// Массив знакогенератора

BYTE byCharacter[12] = {0xFA, //0

0x82, //1

0xB9, //2

0xAB, //3

0xC3, //4

0x6B, //5

0x7B, //6

0xA2, //7

0xFB, //8

0xEB, //9

0x00, //blank

0x01 //-

};

WORD wRpm; // Скорость вращения (об/мин)

//BOOLEAN btRpmUpdate; // = 1, когда измеряно новое значение

оборотов

WORD wTimerOvfCnt; // Счетчик переполнений таймера (нужен для

// увеличения разрядности

WORD wFlashCnt;

BOOLEAN btFirstLowRateFlash; // FALSE - если отсчет периода еще не

начался

void RefreshDisplay(void)

{

#asm("cli");

if (btDisplayUpdate)

{

wLockedRpm = wRpm;

Page 45: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

btDisplayUpdate = FALSE;

}

#asm("sei");

PrepareRpmData(wLockedRpm);

ShowDisplayData();

}

/

******************************************************************

******\

Преобразование скорости мотора в данные экранного буфера

\

******************************************************************

******/

void PrepareRpmData(WORD wRpm)

{

BYTE i;

WORD R;

R = wRpm;

byDisplay[3] = wRpm % 10;

wRpm /= 10;

if (byDisplay[3] > 4) //округляем

{

wRpm++;

R += 10;

}

byDisplay[3] = 0;

// Первые 4 цифр - обороты двигателя

for(i=0; i<3; i++)

{

byDisplay[2-i] = wRpm % 10;

Page 46: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

wRpm /= 10;

}

if (R < 10)

{

byDisplay[0] = 10;

byDisplay[1] = 10;

byDisplay[2] = 10;

goto exit;

}

if ((R >= 10) & (R <100))

{

byDisplay[0] = 10;

byDisplay[1] = 10;

goto exit;

}

if ((R >= 100) & (R <1000))

{

byDisplay[0] = 10;

goto exit;

}

exit:

}

/

******************************************************************

******\

Вывод экранного буфера на дисплей.

Вход: -

Выход: -

Page 47: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

\

******************************************************************

******/

void ShowDisplayData(void)

{

#ifdef Cathode

PORTB = byCharacter[byDisplay[0]];

PORTD.5 = 0;

delay_us(LED_delay);

PORTD.5 = 1;

PORTB = byCharacter[byDisplay[1]];

PORTD.1 = 0;

delay_us(LED_delay);

PORTD.1 = 1;

PORTB = byCharacter[byDisplay[2]];

PORTD.0 = 0;

delay_us(LED_delay);

PORTD.0 = 1;

PORTB = byCharacter[byDisplay[3]];

PORTD.4 = 0;

delay_us(LED_delay);

PORTD.4 = 1;

#endif

#ifdef Anode

PORTB = ~byCharacter[byDisplay[0]];

PORTD.5 = 1;

delay_us(LED_delay);

PORTD.5 = 0;

PORTB = ~byCharacter[byDisplay[1]];

PORTD.1 = 1;

Page 48: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

delay_us(LED_delay);

PORTD.1 = 0;

PORTB = ~byCharacter[byDisplay[2]];

PORTD.0 = 1;

delay_us(LED_delay);

PORTD.0 = 0;

PORTB = ~byCharacter[byDisplay[3]];

PORTD.4 = 1;

delay_us(LED_delay);

PORTD.4 = 0;

#endif

if (! PIND.6)

{

delay_us(Light_delay);

}

}

/

******************************************************************

********\

Обработка прерываний от OC1 (для отсчета импульсов 0.1 сек)

Вход: -

Выход: -

\

******************************************************************

********/

interrupt [TIM1_COMPA] void SYSTEM_TICK_interrupt(void)

{

// Вычисляем оммент следующего срабатывания таймера

OCR1A += CNT_100_MS;

Page 49: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

// 3 раза в секунду перерисовываем дисплей,

// независимо от обстоятельств.

if( ++byDisplayRefreshCnt == UpCount )

{

byDisplayRefreshCnt = 0;

btDisplayUpdate = TRUE;

}

// Если секундомер запущен - инкрементируем его показания

if( btTimerOn )

{

if (++byTcnt == 10)

{

byTcnt = 0;

if( ++wTime == 60000)

wTime = 0;

}

}

}

/

******************************************************************

********\

Обработка прерываний от управляющих импульсов

Вход: -

Выход: -

\

******************************************************************

********/

interrupt [EXT_INT0] void RPM_PULSE_interrupt(void)

{

Page 50: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

long lTmp;

GIMSK &= ~0x40;

if(btFirstLowRateFlash)

{

// Первый импульс, сбрасываем счетчик периода и

// счетчик импульсов

wTimerOvfCnt = 0;

wFlashCnt = 0;

TCNT0 = 0;

TIFR = 0x02;

TCCR0B = 0x03; // FCK / 64 ( 62.5 KHz )

TCNT0 = 0;

TIMSK |= 0x02; // Разрешаем прерывания от TMR0

btFirstLowRateFlash = FALSE;

}

else

{

wFlashCnt++;

// Проверяем, не пора ли закончить измерения

if( wTimerOvfCnt > TIMER_OVF_ENOUGHT )

{

TCCR0B = 0; // Останавливаем TMR0

GIMSK &= 0x40; // Запрещаем прерывания от INT0

TIMSK &= ~0x02; // Запрещаем прерывания от TMR0

if(TIFR & 0x02)

wTimerOvfCnt++; // Учитываем возможность переполнения

lTmp = (62500L * 60L * (long)wFlashCnt);

lTmp /= ((wTimerOvfCnt << 8) + TCNT0);

lTmp /= byBladeCnt;

wRpm = lTmp;

Page 51: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

// Перезапускаем измерения

btFirstLowRateFlash = TRUE;

wTimerOvfCnt = 0;

TCNT0 = 0;

TCCR0B = 0x03; // FCK / 64 ( 62.5 KHz )

TCNT0 = 0;

TIFR = 0x02;

TIMSK |= 0x02; // Разрешаем прерывания от TMR0

// GIFR = 0x40;

}

}

EIFR = 0x40;

GIMSK |= 0x40;

}

/

******************************************************************

********\

Обработка переполнений TMR0 (добавляем к счетчику еще 8 разрядов)

Вход: -

Выход: -

\

******************************************************************

********/

interrupt [TIM0_OVF] void TIMER0_interrupt(void)

{

wTimerOvfCnt++;

// Если импульсов не было слишком долго, то показываем

// 0 оборотов и запускаем измерение заново

if( wTimerOvfCnt > NO_PULSES_INTERVAL )

{

Page 52: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

wRpm = 0;

btFirstLowRateFlash = TRUE;

wTimerOvfCnt = 0;

}

}

/

******************************************************************

********\

Головная функция. Инициализация всех модулей. Цикл вызова рабочих

подпрограмм.

Вход: -

Выход: -

\

******************************************************************

********/

void main(void)

{

// Crystal Oscillator division factor:

#pragma optsize-

CLKPR=0x80;

CLKPR=Prescaler; //0x00 - для кварца 4MHz, 0x01 - для кварца 8MHz...

#ifdef _OPTIMIZE_SIZE_

#pragma optsize+

#endif

#asm("cli");

MCUCR = 0x00; // Запрещаем SLEEP, режимы прерывания пока не

важны.

// В принципе, этого можно и не делать.

GIMSK = 0x00; // Запрещаем внешние прерывания

EIFR = 0xFF; // Очищаем флаги прерываний

Page 53: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

TIMSK = 0x00; // Запрещаем прерывания от таймеров

TIFR = 0xFF; // Очищаем флаги прерываний

//Разряд DDRx - определяет направление передачи данных (0 - вход, 1 -

выход).

//Разряд PORTx - если вывод определен выходом (DDRx = 1), то:

// если установлена 1 - то на выводе устанавливается лог. 1

// если установлена 0 - то на выводе устанавливается лог. 0

// если вывод определен входом (DDRx = 0), то PORTx - определяет

состояние подтягивающего резистора (при PORTx = 1 резистор подключен)

//Разряд PINx - доступен только для чтения и содержит физическое

значение вывода порта

PORTA=0b00000011;

DDRA= 0b00000011;

PORTB=0b00000000;

DDRB= 0b11111111;

#ifdef Cathode

PORTD=0b01111111;

DDRD= 0b00110011;

#endif

#ifdef Anode

PORTD=0b01001100;

DDRD= 0b00110011;

#endif

// Инициализируем модули

//time------------------------------------

btTimerOn = FALSE;

wTime = 0;

byTcnt = 0;

byDisplayRefreshCnt = 0;

btTimeUpdate = FALSE;

Page 54: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

TCNT1 = 0;

TCCR1A = 0x00; // Отключаем управление выводом OC1 и PWM

TCCR1B = 0x03; // На таймер подается FCK через делитель на 64,

// шумодав отключен, никакого сброса нет

OCR1A = TCNT1 + CNT_100_MS;

TIFR |= 0x40; // Сбрасываем флаг прерываний от Output-Compare

TIMSK |= 0x40; // Разрешаем прерывание от Output-Compare

//time------------------------------------

//rmp-------------------------------------

btFirstLowRateFlash = TRUE;

wRpm = 0;

// Разрешаем прервание INT1

EIFR = 0x40;

GIMSK |= 0x40;

MCUCR = 0x02; // Настраиваем INT0 на спад, остальные биты не

важны.

// Таймер запускаем сразу, чтобы проверять

// отсутствие сигнала

wTimerOvfCnt = 0;

TCNT0 = 0;

TCCR0B = 0x03; // FCK / 64 ( 62.5 KHz )

TCNT0 = 0;

TIMSK |= 0x02; // Разрешаем прерывания от TMR0

//rmp-------------------------------------

#asm("sei");

// StartLowRateRpm();

while(TRUE)

{

RefreshDisplay();

}

Page 55: xn--d1aux.xn--p1aihttps://дцо.рф/wp-content/uploads/2019/04/na_mikrokont…  · Web viewВВЕДЕНИЕ. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 1.1. Назначение

}

Размещено на Allbest.ru