Автор работы: Пользователь скрыл имя, 25 Декабря 2011 в 15:25, курсовая работа
Используя средства языка программирования необходимо создать цифровой тахометр на основе микроконтроллера ATtiny 2313 семейства AVR. Должны выполняться действия: измерение оборотов двигателя, вывод значений оборотов на светодиодный индикатор, возможность уменьшения яркости индикатора при включении габаритных огней.
1 Теоретическая часть 3
1.1 Аннотация 3
1.2 Постановка задачи 3
1.3 Общие сведения о микроконтроллерах AVR 3
1.4 Описание ATtiny2313 3
1.5 Основные параметры ATtiny2313 4
1.6 Блок-схема ATtiny2313 6
1.7 Расположение выводов ATtiny2313 7
1.8 Программирование микроконтроллера с использованием программы на языке С 8
2 Конструкторская часть 9
2.1 Общие сведения.Функциональное назначение используемых программ 9
2.2 Реальзация 10
2.3 Схема принципиальная 10
2.4 Вызов и загрузка 11
3 Заключение 11
4 Быблиографический список 11
Для выполнения курсовой работы были использованы следующие программные средства: компилятор языка С для микроконтроллеров AVR (CodeVisionAVR), генератор начального кода программы CodeWizard AVR с необходимой конфигурацией периферии МК (AVR Studio).
CodeVision AVR представляет собой кросс-компилятор языка С, графическую оболочку и автоматический генератор шаблонов программ, ориентированные на работу с семейством микроконтроллеров AVR фирмы Atmel.
Программа представляет собой 32-разрядное приложение для работы в операционных системах Windows 95, 98, Me, NT4.0, 2000, XP.
Кросс-компилятор включает в себя практически все элементы, соответствующие стандарту ANSI. Кроме того, в компилятор включены дополнительные возможности, ориентированные на использование архитектурных особенностей микроконтроллеров AVR и встроенных систем в целом.
Объектные файлы COFF позволяют осуществлять отладку программ с просмотром содержимого переменных. Для этого следует применять свободно распространяемый фирмой Atmel (www.atmel.com) отладчик AVR Studio.
Для отладки систем, использующих последовательную передачу данных, в графической оболочке имеется встроенная программа Terminal.
Кроме стандартных библиотек языка С, компилятор имеет библиотеки для работы с:
ЖКИ индикаторами со встроенным контроллером;
шиной I2C фирмы Philips;
датчиком температуры LM75 фирмы National Semiconductor;
часами реального времени PC8536 и PC8583 фирмы Philips, DS1302 и DS1307 фирмы Dallas Semiconductor;
однопроводным протоколом фирмы Dallas Semiconductor;
датчиками температуры DS1820 и DS1822 фирмы Dallas Semiconductor;
датчиком температуры/термостатом DS1621 фирмы Dallas Semiconductor;
памятью EEPROM DS2430 и DS2433 фирмы Dallas Semiconductor;
шиной SPI;
управлением режимами пониженного потребления энергии;
временными задержками;
преобразованием кодов Грэя.
В CodeVision AVR имеется автоматический генератор шаблонов программ, который позволяет в течение считанных минут получить готовый код для следующих функций:
настройка доступа к внешней памяти;
определение источника прерывания Reset;
инициализация портов ввода/вывода;
инициализация внешних прерываний;
инициализация таймеров/счетчиков;
инициализация сторожевого таймера;
инициализация UART;
инициализация аналогового компаратора;
инициализация встроенного АЦП;
инициализация интерфейса SPI;
инициализация поддерживаемых библиотеками CodeVision AVR микросхем, работающих с однопроводным интерфейсом и шиной I2C;
инициализация модуля ЖКИ со встроенным контроллером.
Кроме того, среда CodeVision AVR включает в себя программное обеспечение для работы с различными AVR-программаторами. После компиляции исходной программы на языке С полученный код может быть сразу записан в память программ микроконтроллера.
Микроконтроллер:
ATtiny2313 – 1шт;
Индикатор:
С-564 – 1шт;
Стабилизатор:
78L05 – 1шт;
Пьезокварц:
8MHz – 1шт;
Транзисторы:
BC847 – 2шт;
Диоды и стабилитроны:
1N4148 – 1шт;
5,1V – 1шт;
Конденсаторы:
22pF – 2шт;
2,2nF – 1шт;
10nF – 1шт;
0,1mkF – 2шт;
10mkF – 2шт;
Резисторы:
330 Ом – 8шт;
1 кОм – 1шт;
10 кОм – 3шт;
220 кОм – 1шт.
Ток потребления светодиодного индикатора С-564 составляет порядка 0,015А, исходя из закона Ома нам потребуются резисторы R сопротивлением R=U/I=5В/0,015А=330 Ом.
Скомпилированная программа представляет собой файл типа cof, который прошиваем на микроконтроллер ATtiny2313 семейства AVR.
Соединяем компоненты рабочей модели прибора, получаем сигнал с катушки зажигания, считываем обороты двигателя.
3 Заключение
В
ходе выполнения курсовой
работы я приобрел навыки
разработки схемы. Написания
программы. Освоил начальные
знания работы в среде
CodeVision AVR,Sprint Layout, также
ознакомился с принципами
программирования и
прошивки микроконтроллера.
4
Библиографический
список:
Код программы
#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 //1- две катушки, 2 - одна катушка, 4 - мотоцикл...
#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, если пришло время обновить дисплей
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;
btDisplayUpdate = FALSE;
}
#asm("sei");
PrepareRpmData(wLockedRpm);
ShowDisplayData();
}
/************************
Преобразование скорости мотора и количества лопастей
в данные экранного буфера
Вход: wRpm - обороты ротора, byBladeCnt - количество лопастей
Выход: -
\************************
void PrepareRpmData(WORD wRpm)
{
BYTE i;
WORD R;
R = wRpm;
byDisplay[3] = wRpm % 10;
wRpm /= 10;
if (byDisplay[3] > 4) //округляем