Велокомпьютер на базе микроконтроллера

Автор работы: Пользователь скрыл имя, 13 Февраля 2015 в 00:47, курсовая работа

Краткое описание

Задачей нашего курсового проекта является построение велокомпьютера на базе микроконтроллера. Основными требования, предъявляемыми к такой системе являются:
1) функциональность;
2) точность измерения;
3) минимальные материальный затраты;
4) размер.
Целью курсового проекта является:
1) закрепить, углубить и систематизировать теоретические знания, полученные ранее при изучении общепрофессиональных и специальных схемотехнических дисциплин;
2) получить практические навыки самостоятельного решения комплекса задач, связанных с проектированием ЭВС с использованием микропроцессорных средств, путем выполнения самостоятельной творческой разработки по заданному индивидуальному заданию;
3) научить пользоваться специальной, справочной и другой нормативной-технической литературой, действующими стандартами;
4) подготовить студента к дипломному проектированию и последующей самостоятельной работе по специальности.

Содержание

Введение. Постановка задачи ………..…………………………...….... 5
1. Анализ задачи. ……………………………………………...…….…. 6
1.1 Список функций, выполняемых системой…………………..... 6
1.2 Описание интерфейса между системой и пользователем…….. 7
2. Предварительное проектирование системы…………….……...…. 9
2.1 Разбиение системы на модули ………………………………… 9
2.2 Построение структурной схемы аппаратной части
системы и её описание……………………………………….… 11
3. Проектирование аппаратных средств системы……...……………. 13
3.1 Выбор типа микроконтроллера…………………………..…….. 13
3.2 Разработка принципиальной схемы системы……….………… 17
3.3 Описание работы системы по принципиальной схеме……….. 24
4. Проектирование программного обеспечения...……......…………. 25
4.1 Разработка схемы работы системы на Си……………………… 25
4.2 Описание работы системы и программы……………………... 29
Заключение………………………………………………………........... 31
Список использованных источников………………………………..... 32
ПРИЛОЖЕНИЕ А. Код программы микроконтроллера
на Си….……………………………………..……. 33
ПРИЛОЖЕНИЕ Б. Код программы микроконтроллера
на ассемблере…………………………………….. 40

Прикрепленные файлы: 1 файл

Гончарик А.В. Курсач.docx

— 418.49 Кб (Скачать документ)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. ПРОЕКТИРОВАНИЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

 

4.1 Разработка схемы работы  системы на Си

 

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

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

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

- определить, что должен  делать модуль

- определить способы получения  модулем исходных данных

- определить необходимость  какой-либо предварительной обработки  введенных исходных данных

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

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

- определить необходимость  какой-либо постобработки выводимых  данных

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

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

Используя советы, которые были приведены ранее, составим блок схему нашей программы, которая изображена на рисунке 4.1:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рисунок 4.1 – Блок-схема алгоритма работы системы велокомпьютера

 

Далее необходимо написать код программы микроконтроллера, а также проверить работу системы. Для проверки работоспособности велокомпьютера будем использовать систему автоматического проектирования Proteus. Proteus VSM — пакет программ для автоматизированного проектирования (САПР) электронных схем. Разработка компании Labcenter Electronics (Великобритания).

Пакет представляет собой систему схемотехнического моделирования, базирующуюся на основе моделей электронных компонентов принятых в PSpice. Отличительной чертой пакета PROTEUS VSM является возможность моделирования работы программируемых устройств: микроконтроллеров, микропроцессоров и прочего. Библиотека компонентов содержит справочные данные. Дополнительно в пакет PROTEUS VSM входит система проектирования печатных плат. Пакет Proteus состоит из двух частей, двух подпрограмм: ISIS — программа синтеза и моделирования непосредственно электронных схем и ARES — программа разработки печатных плат. Вместе с программой устанавливается набор демонстрационных проектов для ознакомления.

Пакет является коммерческим. Бесплатная ознакомительная версия характеризуется полной функциональностью, но не имеет возможности сохранения файлов. Примечательной особенностью является то, что в ARES можно увидеть 3D-модель печатной платы, что позволяет разработчику оценить своё устройство ещё на стадии разработки.

Схема, собранная в системе САПР Proteus предоставлена на рисунке 4.2:


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рисунок 4.2 – Система «Велокомпьютер» в САПР PROTEUS

 

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

Код программы для микроконтроллера на языках программирования Си и Ассемблер можно увидеть в ПРИЛОЖЕНИИ А и в ПРИЛОЖЕНИИ Б соответственно.

 

4.2 Описание работы системы  и программы

 

В начале программы МК происходит подключение библиотек векторов прерываний, дисплея, задержки. Происходит задание необходимых переменных. После перечисленных действий в подпрограмме настройки записи и чтения в/из ПЗУ (ПРИЛОЖЕНИЕ А) происходит настройка процессов записи и чтения ПЗУ, в процессе которой МК производится запись основных параметров в данную память. Если они уже были записаны ранее, то МК сразу переходит в основной цикл программы, в котором он будет находиться постоянно, пока не придет запрос на прерывание. Пока МК находится в основном цикле программы, в подпрограмме настройки условий прерываний происходит настройка внутреннего прерывания по сравнению таймера/счетчика 0 и внешнего по отношению к МК прерывания по приходу событию на вывод INT1 МК, а также в подпрограмме настройки диаметра колеса производится выбор диаметра с дальнейшей записью это значения в ПЗУ. Все это время таймер/счётчик 0 ведёт счёт до специально заданного числа. Время счёта до данного числа составляет одну секунду реального времени. После того, как таймер/счётчик 0 досчитает до данного числа, произойдёт событие сравнения, по которому будет произведён запрос на прерывание. В подпрограмме обработки прерывания по сравнению таймера/счетчика 0 производится подсчет количества прерываний, что будет соответствовать количеству секунд реального времени. Также в обработчике делается подсчет минут и часов в соответствии с подсчитанным количеством секунд. Таймер/счетчик 1 ведет счет до тех пор, пока не произойдет прерывание по событию на выводе INT1 МК. Как только оно происходит, МК переходит в подпрограмму обработки прерывания по событию на выводе INT1, в которой определяется первое ли это прерывание. Если оно оказывается первым, происходит обнуление регистра счета таймера/счетчика 1 без расчетов функции скорости. Обнуление происходит по той причине, что первое насчитанное число счетчиком 1 не будет соответствовать времени полного оборота колеса. Все дальнейшие подсчеты таймером/счетчиком 1 используются для расчета скорости движения велосипеда с последующим обнулением регистра счета. После обработки первого либо второго прерывания происходит переход МК к подпрограмме опроса кнопок. Опросив кнопки МК начинает выполнять соответствующую подпрограмму. Это могут быть подпрограмма настройки диаметра колеса, либо подпрограмма расчета и вывода на дисплей скорости, пройденного пути, потраченных калорий либо вывод значения таймера. Если МК осуществляет переход к подпрограмме настройки радиуса колеса, то происходит очистка в ПЗУ всех расчетов и измерений, а затем обновляется значение записанного диаметра колеса. После этого все измерения и расчеты производятся заново. Если же МК переходит к выполнению подпрограммы расчета и вывода на дисплей скорости, пройденного пути, потраченных калорий либо вывод значения таймера, то в каждой из них соответственно осуществляется подсчет требуемой функции с последующей записью результата в ПЗУ и выводом на дисплей.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ЗАКЛЮЧЕНИЕ

 

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

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

 

1) Atmel [Электронный ресурс]. – Спецификация МК ATmega 8, 8L. –Режим доступа: http://www.atmel.com/Images/Atmel-2486-8-bit-AVR-microcontroller-ATmega8_L_datasheet.pdf

2) Datasheetlib [Электронный ресурс]. – Спецификация LM016L. –    Режим доступа: http://www.datasheetlib.com/datasheet/692161/lm016l_renesas-technology.html.

3) Lib.chipdip [Электронный ресурс]. – Спецификация МКА10110А. –   Режим доступа: http://lib.chipdip.ru/250/DOC000250842.pdf.

4) Интеграл [Электронный ресурс]. – Спецификация IZ9261-50. –   Режим доступа: http://www.vishay.com/docs/81011/tsal6400.pdf.

5) Википедия [Электронный ресурс]. – Информация о герконе. –    Режим доступа: https://ru.wikipedia.org/wiki/Геркон.

6) ВелоСтиль [Электронный ресурс]. – Информация о велокомпьютерах. – Режим доступа: http://www.velostyle.ru/blogs/6/287/-.

5) Википедия [Электронный ресурс]. – Информация о велосипедном колесе. –    Режим доступа: https://ru.wikipedia.org/wiki/Велосипедное_колесо.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ПРИЛОЖЕНИЕ А

Код программы микроконтроллера на Си

//==============

//шапка для mega8, задание задержки и адресов векторов прерываний, //подключение библиотеки дисплея

//=============

#define F_CPU 4000000UL

#include  <avr/io.h> 

#include  <stdio.h>

#include  <util/delay.h>

#include  <avr/interrupt.h>

#include  "LCD.h" 

 

//==============

// Подпрограмма задания переменных

//==============

int msec = 0;

int sec =  0;

int min =  0;

int hour = 0;  

int temp2 = 0;

int Period = 0; 

int qdist = 0;

float D = 0.;  //////////диаметр колеса

float SPEED = 0.; /////////скорость

 

//=============

//Подпрограмма настройки записи и чтения в/из ПЗУ

//=============

void EEPROM_write(unsigned int uiAddress, float ucData)

{

while(EECR & (1<<EEWE));

EEAR = uiAddress;

EEDR = ucData;

EECR |= (1<<EEMWE);

EECR |= (1<<EEWE);

}

 

float EEPROM_read(unsigned int uiAddress)

{

while(EECR & (1<<EEWE));

EEAR = uiAddress;

EECR |= (1<<EERE);

return EEDR;

}

 

//=============

//Подпрограмма обработки прерывания по сравнению таймера/счетчика 0

//=============

ISR(TIMER0_OVF_vect)

{

++msec;

if(msec == 15)

{ ++sec;msec = 0;}

if(sec == 60)

{ ++min;sec = 0;}

if(min == 60)

{ ++hour;min = 0;}

}

 

//=============

//Подпрограмма обработки прерывания по событию на выводе INT1

//=============

ISR(INT1_vect)   

{

if(temp2==0)

{

TCNT1=0;  //обнуляем регистр TCNT1 (счетчик).Запускаем таймер.

temp2=1;

}

if(temp2==1)

{

Period=TCNT1;                //записываем значение (счетчик)

SPEED=(3.14*D*36)/(0.16*Period);

++qdist;  

Period=0;

TCNT1=0;  //обнуляем регистр TCNT1 (счетчик).Запускаем таймер.

}

}

//==============

//Основной цикл программы

//==============

int main (void)

{

unsigned char str16[16];

char  freq = 0;  //////////////////частота вращения колеса

char  temp = 0;

char  s4et = 0;

float distance = 0.;

float i = 0.;

i = EEPROM_read(2);

float qdistance = 0.;

float cal = 0.;

 

//===========

//Подпрограмма настройки условий прерываний

//===========

GICR=0b10000000;    // прерывание на int1

TCCR1B=0b00000011; // clk/64

MCUCR=0b00001100;   // прерывание первого таймера

LCDinit();   // инициализация дисплея

TIMSK=0b00000001; // таймер 0,прерывание по переполнению.

TCCR0=0b00000101; // clk/1024

sei(); 

 

//===========

//Подпрограмма настройки диаметра колеса

//===========

if((D=EEPROM_read(1)) == 0)  

{

MENU: 

s4et = temp = 0;

LCDclear();

while(1)

{

LCDstring("Choose D:",0,0);  // выбор в дюймах,1 см = 2,56 дюйма.

LCDstring("duim",3,1);  

temp = PINC & 0b00011100;

 

_delay_ms(800);

 

if(temp==0x08)       // если нажата кнопка +1

++s4et;

if(temp==0x04)       // если нажата кнопка -1

--s4et;

 

if(s4et==0)

LCDstring("19",0,1);  ////// 48,64 см

if(s4et==1)

LCDstring("24",0,1);  ////// 61,64 см

if(s4et==2)

LCDstring("26",0,1);  ////// 66,56 см

if(s4et==3)

LCDstring("28",0,1);  ////// 71,68 см

if(s4et!=0 && s4et!=1 && s4et!=2 && s4et!=3) 

s4et=0;

 

if(s4et==0 && temp==0x10)

{D =  48.64;goto metka;}

if(s4et==1 && temp==0x10)

{D =  61.64;goto metka;}

if(s4et==2 && temp==0x10)

{D =  66.56;goto metka;}

if(s4et==3 && temp==0x10)

{D =  71.68;goto metka;}

EEPROM_write(1,D);  // запись в ПЗУ

}

}

 

metka:

s4et = temp = 0;

while(1)

{

temp = PINC & 0b00011101;

_delay_ms(800);    /////задержка,во избежание дребезга.

 

//==============

//Подпрограмма опроса  кнопок

//==============

if(temp==0x08 || temp==0x09)   /////кнопка 2 (вправо).

++s4et;

if(temp==0x04 || temp==0x05)   /////кнопка 1 (влево).

--s4et;

if(temp==0x10 || temp==0x11)      /////кнопка 3 (меню,выбор).

goto MENU;

 

//=============

//Подпрограмма расчета  и вывода на дисплей скорости

//=============

if(s4et==0)

{

LCDclear();

LCDstring("Speed",0,0);

LCDstring("km/h",6,1);  

sprintf(str16,"%.2f",SPEED);

    LCDstring(str16,0,1);

SPEED=0.;

}

 

Информация о работе Велокомпьютер на базе микроконтроллера