Разработка цифрового тахометра на базе микроконтроллер 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);();
}