
- •Введение
- •1. Техническое задание
- •Назначение устройства
- •Требования к реализации
- •2 Техническое предложение
- •2.1 Элементная база
- •2.2 Схема подключения
- •3 Эскизный проект
- •3.1 Описание жк дисплея hd44780
- •Построение проекта
- •Описание интерфейса
- •Основные конструкции и процедуры, используемые для написания программы
- •Рабочий проект
- •Реализация и программирование
- •Контекстное меню окна Workspace. Щелчок правой кнопкой мыши в окне Workspace отображает контекстное меню, которое дает удобный доступ к таким командам.
- •Меню Source Code Control. Меню Source Code Control доступно из меню Project и из контекстного меню в окне Workspace.
- •Состояния Source Code Control. Каждый иcходный, управляемый кодом, файл может быть в одном из нескольких состояний.
2.2 Схема подключения
Список примененных компонентов обозначение в схеме:
IC1 Микроконтроллер Attiny 2313
Q1, Q2 Транзистор BCW66G
C1, C2 10 нФ
C4, C5 33 пФ
X1 Кварцевый резонатор 20 МГц
R1, R2, R7 470 Ом
R3 1 кОм
R4 1.5 кОм
R5 1 МОм
R6 110 Ом
R8 70 Ом
LED3 Светодиод
IR1 Оптопара TCND-5000
B1 Кнопка
B2 Выключатель питания
JP1 Разъем внутрисхемного программирования
JP2 Разъем расширения
Рис 2.3 Принципиальная схема устройства
2.3 Алгоритм и варианты реализации
Для программирования микроконтроллера Attiny 2313 можно использовать языки программирования, ассемблер, C. Для реализации солнечного трекера был выбран язык C.
Алгоритм работы данного устройства представлен на рисунке 2.3.
Рисунок 2.4 - Алгоритм работы работы устройства
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 lcd_data;
/* вывод старшей тетрады байта данных */
void out_nibble() {
asm {
movwf _lcd_data ; байт данных должен быть в W
bcf PORTB, 4
btfsc _lcd_data, 4
bsf PORTB, 4
bcf PORTB, 5
btfsc _lcd_data, 5
bsf PORTB, 5
bcf PORTB, 6
btfsc _lcd_data, 6
bsf PORTB, 6
bcf PORTB, 7
btfsc _lcd_data, 7
bsf PORTB, 7
}
}
/* вывод байта в 8-ми битном режиме (требуется
только для инициализации ЖКИ) */
void wr_cmd(char cmd) {
asm {
bcf PORTB, 2 ; RS - down, пишем в IR
movfw param00_wr_cmd
call _out_nibble
bsf PORTB, 3 ; E - up
bcf PORTB, 3 ; E - down
call _delay
}
}
/* вывод байта команды на ЖКИ */
void wr_cmd4(char cmd) {
asm {
bcf PORTB, 2 ; RS - down, пишем в IR
movfw param00_wr_cmd4
call _out_nibble
bsf PORTB, 3 ; E - up
bcf PORTB, 3 ; E - down
call _delay
swapf param00_wr_cmd4, W ; меняем тетрады байта
call _out_nibble
bsf PORTB, 3 ; E - up
bcf PORTB, 3 ; E - down
call _delay
}
}
/* вывод байта данных на ЖКИ */
void wr_data4(char data) {
asm {
bsf PORTB, 2 ; RS - up, пишем в DR
movfw param00_wr_data4
call _out_nibble
bsf PORTB, 3 ; E - up
bcf PORTB, 3 ; E - down
call _delay
swapf param00_wr_data4, W ; меняем тетрады байта
call _out_nibble
bsf PORTB, 3 ; E - up
bcf PORTB, 3 ; E - down
call _delay
}
}
/* задержка */
void delay() {
delay_ms(1);
}
.
.
.
/*-------------окончание примера-------------*/
В приведенных примерах не отслеживается флаг занятости (busy flag) контроллера HD44780, взамен этого процедуры вывода на ЖКИ имеют задержки; на это следует обратить внимание. Ниже приводится фрагмент программы на С, выводящую фрагмент знакогенератора на экран ЖКИ формата 2 строки по 16 символов.
/*-------------начало примера-------------*/
.
.
.
char i, ch;
/* инициализация ЖКИ в 8-ми битном режиме
(рекомендуется производителем) */
wr_cmd(0x28);
delay_ms(5);
wr_cmd(0x28);
delay();
wr_cmd(0x28);
delay();
/* инициализация ЖКИ в 4-х битном режиме */
wr_cmd4(0x28);
wr_cmd4(0x0c);
wr_cmd4(0x06);
ch = 0x20;
wr_cmd4(0x80); /* переход на первую строку экрана */
for (i=0; i<16; i++) {
wr_data4(ch); /* выводим символы */
ch++;
}
wr_cmd4(0xc0); /* переход на вторую строку экрана */
for (i=0; i<16; i++) {
wr_data4(ch); /* выводим символы */
ch++;
}
.
.
.
/*-------------окончание примера-------------*/
4 Технический проект
На данном этапе происходит описание и моделирование функций языка программирования, выбор организации проекта и принципов построения моделей и т.д.
Выполняются следующие работы:
составление и описание блоков на языке программирования;
определяются межблоковые связи;
описание констант и переменных;
отладка проекта (пошаговое тестирование основных блоков программы в процессе написания и исправление некорректной работы);
Далее подробно описаны все вышеперечисленные этапы.