Разработка цифрового тахометра на базе микроконтроллер ATtiny2313

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

?е описываются функциональные возможности дисплея

 

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

 

ЖК на базе контроллеров HD44780 являются эффективным средством отображения различной информации и могут с успехом применяться даже в любительских разработках. Наличие многих режимов вывода (скроллирование, курсоры, определяемые пользователем символы) позволяет разрабатывать удобные интерфейсы управления и устройства индикации.

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

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

Схема включения:RB2 - LCD RS

PIC RB3 - LCD ERB4 - LCD B4RB5 - LCD B5RB6 - LCD B6RB7 - LCD B7

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

/*-------------начало примера-------------*/

.

.

.lcd_data;

/* вывод старшей тетрады байта данных */out_nibble() {{_lcd_data ; байт данных должен быть в W

bcf PORTB, 4_lcd_data, 4PORTB, 4PORTB, 5_lcd_data, 5PORTB, 5PORTB, 6_lcd_data, 6PORTB, 6PORTB, 7_lcd_data, 7

bsf PORTB, 7

}

}

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

только для инициализации ЖКИ) */wr_cmd(char cmd) {

asm {PORTB, 2 ; RS - down, пишем в IRparam00_wr_cmd_out_nibblePORTB, 3 ; E - upPORTB, 3 ; E - down

call _delay

}

}

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

void wr_cmd4(char cmd) {{PORTB, 2 ; RS - down, пишем в IRparam00_wr_cmd4_out_nibblePORTB, 3 ; E - upPORTB, 3 ; E - down_delayparam00_wr_cmd4, W ; меняем тетрады байта_out_nibblePORTB, 3 ; E - upPORTB, 3 ; E - down_delay

}

}

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

void wr_data4(char data) {{PORTB, 2 ; RS - up, пишем в DRparam00_wr_data4_out_nibblePORTB, 3 ; E - upPORTB, 3 ; E - down_delayparam00_wr_data4, W ; меняем тетрады байта_out_nibblePORTB, 3 ; E - upPORTB, 3 ; E - down_delay

}

}

/* задержка */delay() {_ms(1);

}

.

.

.

/*-------------окончание примера-------------*/

В приведенных примерах не отслеживается флаг занятости (busy flag) контроллера HD44780, взамен этого процедуры вывода на ЖКИ имеют задержки; на это следует обратить внимание. Ниже приводится фрагмент программы на С, выводящую фрагмент знакогенератора на экран ЖКИ формата 2 строки по 16 символов.

/*-------------начало примера-------------*/

.

.

.i, ch;

/* инициализация ЖКИ в 8-ми битном режиме

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

delay_ms(5);_cmd(0x28);();_cmd(0x28);();

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

wr_cmd4(0x28);_cmd4(0x0c);

wr_cmd4(0x06);= 0x20;_cmd4(0x80); /* переход на первую строку экрана */

for (i=0; i<16; i++) {_data4(ch); /* выводим символы */

ch++;

}_cmd4(0xc0); /* переход на вторую строку экрана */

for (i=0; i<16; i++) {_data4(ch); /* выводим символы */

ch++;

}

.

.

.

/*-------------окончание примера-------------*/

 

4 Технический проект

 

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

Выполняются следующие работы:

  • составление и описание блоков на языке программирования;
  • определяются межблоковые связи;
  • описание констант и переменных;
  • отладка проекта (пошаговое тестирование основных блоков программы в процессе написания и исправление некорректной работы);

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

 

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

 

Осуществив все выше изложенные этапы проектирования и проанализировав эскизный проект, мы переходим к следующей стадии проектирования - технический проект, а именно к описанию проекта для ввода в микроконтроллер Attine 2313.

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

 

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

 

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

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

 

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

 

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

#define byBladeCnt 2

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

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

#include

#include

BOOLEAN btTimeUpdate; // = 1, когда нужно обновить время на дисплееwTime; // Время, которое показывает секундомер (в десятых секунды)btTimerOn; // TRUE - таймер запущен, FALSE - остановленbyTcnt; // счетчик десятых секундbyDisplayRefreshCnt; //ShowDisplayData(void); // Вывод экранного буфераPrepareRpmData(WORD wRpm);btDisplayUpdate; // = TRUE, если пришло время обновить дисплейbyDisplay[4]; // буфер данных, для вывода на экранwLockedRpm;

// Массив знакогенератораbyCharacter[12] = {0xFA, //0

0x82, //1

xB9, //2

xAB,//3

xC3, //4

x6B, //5

x7B, //6

xA2, //7

xFB, //8

xEB, //9

x00, //blank

0x01 //-

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

//BOOLEAN btRpmUpdate; // = 1, когда измеряно новое значение оборотовwTimerOvfCnt; // Счетчик переполнений таймера (нужен для

// увеличения разрядностиwFlashCnt; // Счетчик срабатываний датчика прохождения допастиbtFirstLowRateFlash; // FALSE - если отсчет периода еще не начался

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

Листинг 4.2 - Обновление дисплея

void RefreshDisplay(void)

{

#asm("cli");(btDisplayUpdate)

{= wRpm;= FALSE;

}

#asm("sei");(wLockedRpm);();

}