Смекни!
smekni.com

Разработка микропроцессорной системы климат-контроля (стр. 5 из 6)

Выбор регистров осуществляется путем подачи сигнала управления от микроконтроллера на вывод RS: если RS = 0, то будет подключен регистр команд, а если RS = 1, то регистр данных. Вывод R/W – чтение - 1/запись - 0, а вывод Е (Enable) – для строб-сигнала положительной полярности (+5В) длительностью не менее 450 нс, в течение которого записываются передаваемые биты.

Рисунок 3.1 – Схема подключения ЖКИ к микроконтроллеру

Как правило, в микроконтроллерных системах управления для задания режимов функционирования ЖКИ используется порт Е (Е0, Е1 и Е2), питание и подсветка подключаются напрямую - +5В, а данные или команды подаются от любого свободного порта.

Регистр команд IR выполняет следующие функции: смещение курсора, гашение табло или установку адреса ин­дикатора. Регистр данных DR служит для промежуточного хранения дан­ных, которые затем с помощью внутренних операций автоматически передаются впамять отображаемых данных (DD — DisplayData) или в память знакогенерато­ра (CG — CharacterGenerator).

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

Считывание данных из памяти DD или CG выполняется через регистр данных DR. После того как микроконтроллер записывает некоторый адрес в регистр IR, байт данных, расположенный в памяти по этому адресу, с помощью внутренней операции переписывается в регистр DR. Процесс чтения завершается считыванием байта данных из этого регистра. Когда текущая операция чтения завершена, с помощью функции автоинкремента в регистр данных DR записывается байт данных, извлеченный из памяти по следующему адресу, который будет использован при очередном считывании.

Счетчик адреса, по сути, состоит из двух частей и содержит текущий адрес как в памяти DD-RAM, так и в памяти CG-RAM. После того как в регистр IR записана команда установки адреса DD-RAM или CG-RAM, этот адрес с помощью внутренней операции автоматически переносится в соответствующий счетчик. Когда запись в память DD/CG (или чтения из нее) завершена, соответствующий счетчик автомата инкрементируется.

В модуле HD44780 используется две разные памяти:

- DD-RAM- для хранения отображаемых данных;

- CG-RAM- для хранения битовых комбинаций, которые соответствуют матрице размером 5x8 или 5x10 (определяет форму символа).

Доступ как к одной, так и к другой памяти осуществляется по текущему адресу, хранимому в счетчике адреса.

Емкость памяти DD-RAM составляет 80 знаков, представленных в 8-разрядной ASCII-кодировке. Из них на двухстрочном табло могут быть одновременно отображены 16 символов в каждой строке, однако с помощью операции сдвига последующие символы также могут оказаться в отображаемой области (выделено жирным).

Таблица 3.2 – Двухстрочное табло ЖКИ

Позиция 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 39 40
Адрес DD-RAM 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 .. 26 27
Адрес DD-RAM 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 .. 66 67

Первая строка начинается с адреса 00Н, а вторая — с адреса 40Н. Память разбита на две половины по 40 байт каждая, причем между последним адре­сом первой строки и первым адресом второй строки есть разрыв в 24d байта.

После сдвига влево первая строка начинается с адреса $01, а вторая строка — с адреса $41, а после сдвига вправо первая строка начинается с адреса $27, а вто­рая строка — с адреса $67.

Знакогенератор — это память типа ROM, предназначенная для хранения би­товых комбинаций, соответствующих матрице размерами 5x8 или 5x10. В этой памяти можно хранить информацию о 208 символах (матрица 5x8).

В модуле HD44780 реализуются следующие функции:

- начальная инициализация: DL = 1 - 8-разрядный интерфейс, N = 1 -

двухстрочное табло, F = 0 - матрица 5x8;

- управление табло: D = 0 - табло отключено, С = 0 — курсор отключен,

В = 0 - мерцание отключено;

- очистка табло;

- режим ввода данных: I/D = 1 — инкремент на 1; S = 0 — нет сдвига тa6ло.

Блок – схема программы инициализации ЖКИ имеет вид, представленный на рисунке 3.2.

Рисунок 3.2 – Блок-схема инициализации ЖКИ

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

Таблица 3.3 - Система команд HD44780

Команда Код Описание

Время

выполнения

Очистка индикатораВозврат курсораУстановка режима вводаВкл/выкл индикатораСдвиг курсора илипозиции знакоместаФункциональная настройка Установка адреса CGRAMУстановка адреса DRAMСчитывание флагазанятости Запись данныхСчитывание данных

0000 0001

0000 0010

0000 0AS0

0000 1DCB

0001 SR00

001L NF00

01ХХХХХХ

10ХХ ХХХХ

В000 0000

Данные

Данные

Очищает индикатор и возвращает курсор в исходное положениеВозвращает курсор в исходное положениеУстанавливает направление перемещения (А = 1 приращение) и сдвига (S = 1 сдвиг) курсораВключает/выключает индикатор (D = 1 вкл) (С = 1 курсор включен) (В = 1 курсор мигает)Устанавливает перемещение курсора и сдвиг позиции знакоместа (S =1 сдвиг позиции) (S = 0 R= 1 перемещения курсора вправоПрограммирование знакоместа (L = 1 восемь разрядов, L = 0 четыре), (N - 1 две строки) (F = 1 мат­рица 5x10 точек, F = 0 матрица 5x7 точек)Устанавливает адрес ОЗУ генератора символов (CG)Устанавливает адрес ОЗУ LCDСчитывает флаг занятости (В = 1 занят)Записывает данные на LCD или в ОЗУ генератора символовСчитывает данные с LCD илиОЗУ генератора символов

1,64 мс

1,б4 мс

40 мкс

40 мкс

40 мкс

40 мкс

40 мкс

40 мкс

0

40 мкс40 мкс

Ниже приводится программа управления ЖКИ: инициализация, затем опрос занятости и сброс на первую строку дисплея слова «PRIVET.», пользуясь DD-RAM и слова «Привет!» с помощью символов CG-RAM.

include <p!6f377.h>

include <lmO321.h>

; ===================================

; Переменные управления индикатором

; ===================================

;

LCD_DATAEQUPORTB

LCD_ DATA TRIS EQU TRISB

LCD_CNTL EQU PORTЕ

E EQU 1

RRW EQU 0

RS EQU 2

TEMPI1 EQU 0x0 30

; =========================================

; Начало кода

; =========================================

ORG RESET_V

nор

RESET GOTO START

; =========================================

; Начало исполняемого кода с адреса 100h

; =========================================

ORG 100h

START

CLRF STATUS

CLRF PORTB

CLRF FORTE

BSF STATUS, RPO

CLRF TRISB

CLRF TRISE

BCF STATUS, RPO

; ==========================================

; Инициализацияиндикатора

; ==========================================

CLRF LCD_CNTL

DISPLAY_INIT

MOVLW 0x038 ; Выбираем 8-ми битный интерфейс

MOVWF LCD_DATA

BSF LCD_CNTL, E

BCF LCD_CNTL, E

LCD_DELAY

MOVLW LCD_INIT_DELAY

MOVWF MSD

CLRF LSD
CLRF LSD
LOOP 2

DECFSZ LSD, F ; Delay time = MSD * ((3 * 256) + 3) * Тсу

GOTO LOOP2

DECFSZ MSD,F
END_LCD_DELAY

GOTO LOOP2
CMD_SEQ

MOVLW 0x38

MOVWF LCD_DATA

BSF LCD_CNTL, E

BCF LCD_CNTL, E

MOVLW DISP_ON

CALL SEND_CMD

MOVLW CLR_DISP

CALL SEND_CMD

MOVLW ENTRY_INC

CALL SEND_CMD

MOVLW DD_RAM_ADDR

CALL SEND_CMD

; ====================================

; Начало работы

; ====================================

CALL FUNCTION

GOTO START

FUNCTION

MOVLW 'P'

CALL SEND_CHAR

MOVLW 'R’

CALL SEND_CHAR

MOVLW 'I'

CALL SEND_CHAR

MOVLW 'V'

CALL SEND_CHAR

MOVLW 'E’

CALL SEND_CHAR

MOVLW 'T’

CALL SEND_CHAR

MOVLW '.’

CALL SEND_CHAR

MOVLW B'11000000'

CALL SEND_CMD

MOVLW h'A8'

CALL SEND_CHAR

MOVLW h'50’

CALL SEND_CHAR

MOVLW h'A5’

CALL SEND_CHAR

MOVLW h'4 2'

CALL SEND_CHAR

MOVLW h'45'

CALL SEND_CHAR

MOVLW h'54 '

CALL SEND_CHAR

MOVLW h'21'

RETURN

; =====================================

; Подпрограмма вывода символа на экран ЖКИ

; =====================================

SEND_CHAR

MOVWF CHAR

CALL BUSY_CHECK

MOVF CHAR, W

MOVWF LCD_DATA

BCF LCD_CNTL, RRW

BSF LCD_CNTL, RS

BSF LCD_CNTL, E

BCF LCD_CNTL, E

RETURN

; ===================================

; Подпрограмма передачи команды на ЖКИ

; ===================================

SEND_CMD

MOVWF CHAR

CALL BUSY_CHECK

MOVF CHAR, W

MOVWF LCD_DATA

BCF LCD_CNTL, RRW

BCF LCD_CNTL, RS

BSF LCD_CNTL, E

BCF LCD_CNTL,E
RETURN

; ===================================================

; Подпрограмма ожидания разрешения от ЖКИ на передачу

; символа или команды

; ==================================================

BUSY_CHECK

BSFSTATUS,RPO

MOYLW 0xFF

MOVWF LCD_DATA_TRIS

BCF STATUS, RPO

BCF LCD_CNTL, RS

BSF LCD_CNTL, RRW

BSF LCD_CNTL, E

BCF LCD_CNTL, E

MOVF LCD_DATA, W

MOVWF TEMPI

BCF TEMPI, 7

BTFSC TEMPI, 7

GOTO BUSY_CHECK

BCF LCD_CNTL, RRW

BSF STATUS, RPO

MOVLW 0x00

MOVWF LCD_DATA_TRIS

BCF STATUS, RPO

RETURN

end

3.2 Программа управления термодатчиком и двигателем

Согласно заданным условиям эксплуатации проектируемой системы температура в теплице должна поддерживаться пределах 20 - 30 градусов. Алгоритм программы управляющего микроконтроллера, реализующий контроль температуры в заданных пределах путем естественной вентиляции и нагрева: открытие окон происходит при превышении температуры и закрытие при понижении температуры, показан на рисунке 3.3.

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

Блок-схема алгоритма управления термодатчиком DS 1820, описанного в параграфе 2.3. имеет вид, показанный на рисунке 3.4.