Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Архитектура и система команд контроллера жки

Поиск

Рассмотрим вопросы аппаратного и программного сопряжения микрокон­троллеров AVR и символьных ЖКИ, построенных на базе контроллера HD44780 ( LCD – модуль ). Рассматриваемый ЖКИ при помощи 14–контакт­ного разъема (табл. 8) обменивается информацией с микроконтроллером AVR. Микроконтроллер посылает в ЖКИ команды (табл. 9) и ASCII–коды выводи­мых символов. В свою очередь, ЖКИ может посылать AVR–микроконтроллеру по его запросу информацию о своем состоянии и данные из своих внутренних блоков памяти.

Таблица 8. Описание выводов ЖКИ на базе HD44780

Название вывода Описание
  VSS (–) Питание. 0 V.
  VDD (+) Питание.+5V.
  V0 Напряжение смещения, управляющее контрастностью
  RS Вход. Высокий уровень – Данные; Низкий – Команды
  R/W Вход. Высокий–Чтение, Низкий–Запись
  E Вход. Строб, сопровождающий сигналы на шине «команды/данные»
7 – 14 DB0 – DB7 Шина «команды/данные»

Три вывода 14–контактного разъема предназначены для подачи питаю­щего напряжения и напряжения смещения, которое управляет контрастностью дисплея. На рис. 11показана рекомендуемая схема подключения этих выво­дов.

Из оставшихся 11 выводов 8 (DB0 – DB7) используются для организации мультиплексированной шины «команды / данные», и на 3 вывода (RS, R/W, E) AVR–микроконтроллер выставляет управляющие сигналы. На рис. 12 изображены временные диаграммы этих сигналов при записи команд / данных в контроллер ЖКИ.При помощи сигнала на линии RS микропроцессор сообщает контроллеру индикатора о том, что именно передается по шине: команда или данные. Cигнал на линии Е является стробом, сопровождающим сигналы на шине «команды / данные». Запись информации в ЖКИ происходит по спа- ду этого сигнала. Потенциал на управляющем выводе R/W Рис. 11. Схема питания

задает направление передачи данных: запись в RAM индикатора (R/W=0) или считывание оттуда (R/W=1).

Для случая, когда микроконтроллер имеет ограниченное количество линий ввода / вывода, предусмотрен второй вариант подключения ЖКИ с использованием 4–х разрядной шины «команды / данные». При этом каждый байт данных передается по линиям DB4 – DB7 последовательно двумя тетрадами, начиная со старшей. Контроллер ЖКИ после приема байта команды или байта данных требует некоторого времени табл. 9 для обработки полученной информации, в течение которого AVR–микроконтроллер не должен выполнять новых передач.


Рис. 12. Запись данных в ЖКИ

Для того, чтобы определить, когда контроллер ЖКИ закончит свои внутренние операции, AVR может опрашивать BUSY–флаг индикатора (команда «чтение busy–флага»). Второй, более простой способ заключается в том, что управляющий микроконтроллер просто выполняет временную задержку после каждой передачи информации.

Если во время цикла записи AVR–микроконтроллер передает в контрол­лер индикатора код команды, то этот код записывается в регистр команд кон­троллера ЖКИ, и команда сразу же начинает выполняться. Если AVR–микро­контроллер передает в контроллер ЖКИ данные, которые представляют собой ASCII–коды отображаемых символов, то они записываются в буфер данных (DDRAM), который обычно содержит 80 ячеек (рис. 13). При записи или считывании буфера данных обращение осуществляется к ячейке, на которую в данный момент указывает курсор.

Таблица 9. Система команд контроллера НD4478

Описание команды Код RS,R/W, DB7–DB0 Время (fosc=250кГц)
Очистить дисплей и установить курсор в нулевую позицию 0 0 0 0 0 0 0 0 0 1 82 мкс до 1.64 мс
Установить курсор в нулевую позицию (адрес 0). Установить дисплей относительно буфера DDRAM в начальную позицию. Содержимое DDRAM при этом не меняется. 0 0 0 0 0 0 0 0 1 * 40 мкс до 1.6 мс
Установить направление сдвига курсора вправо (I/D=1) или влево (I/D=0) при записи/чтении очередного кода в DDRAM. Разрешить (S=1) сдвиг дисплея вместе со сдвигом курсора. 0 0 0 0 0 0 0 0 I/D S 40 мкс
Включить(D=1)/выключить(D=0) дисплей. Зажечь(C=1)/погасить(C=0) курсор. Изображение курсора сделать мигающим (B=1). 0 0 0 0 0 0 1 D C B 40 мкс
Переместить курсор (S/C=0) или сдвинуть дисплей (S/C=1) вправо (R/L=1) или влево(R/L=0). 0 0 0 0 0 1 S/C R/L * * 40 мкс
Установить разрядность шины данных 4 бита (DL=0) или 8 бит (DL=1), количество строк дисплея – одна (N=0) или две (N=1), шрифт – 5х7 точек (F=0) или 5х10 точек (F=1). 0 0 0 0 1 DL N F * * 40 мкс
Установка адреса CGRAM. После этой команды данные будут записываться/считываться в/из CGRAM. 0 0 0 1.. ACG .. 40 мкс
Установка адреса DDRAM 0 0 1.. ADD .. 40 мкс
Чтение состояния busy–флага (BF) и счетчика адреса 0 1 BF.. AC.. 1 мкс
Запись данных в DDRAM или CGRAM. 1 0 Данные 40 мкс
Чтение данных из DDRAM или CGRAM. 1 1 Данные 40 мкс

 

Примечание:
DDRAM– Display data RAM – ОЗУ ASCII–кодов, отображаемых символов
CGRAM–Сharacter generator RAM – ОЗУ знакогенератора


Рис. 13. Отображение на дисплее символов, ASCII–коды которых записаны в DDRAM
(а – однострочный ЖКИ, б – двухстрочный ЖКИ)

Буфер данных имеет больше ячеек, чем число знакомест дисплея. Смещая окно индикатора относительно буфера данных (см. систему команд), можно отображать на дисплее различные области буфера. У индикаторов с двумя строками первые 40 ячеек буфера данных, обычно, отображаются на верхней строке дисплея, а вторые 40 ячеек – на нижней строке. Сдвиг окна дисплея относительно буфера данных для верхней и нижней строк происходит синхронно. Курсор будет виден на индикаторе только в том случае, если он попал в зону видимости дисплея (и если предварительно была подана команда – отображать курсор).

Кроме DDRAM, контроллер ЖКИ содержит еще один блок памяти – знакогенератор. Его «прошивка», то есть соответствие ASCII–кодов начертанию символов, обычно имеется в описании индикатора. Знакогенератор состоит из двух частей. Основная его часть представляет собой ПЗУ (CGROM) и ее, следовательно, нельзя изменить. Вторая часть, в которой задаются начертания символов для первых 16–ти кодов таблицы знакогенератора, представляет собой перепрограммируемое ОЗУ(CGRAM). Имеется возможность задать начертание 8 символов, соответствующих кодам 0(8), 1(9), 2(10)... 7(15). Для каждого из восьми перепрограммируемых символов в CGRAM отводится по 8 ячеек памяти, каждая из которых соответствует одной строке точек в изображении символа. Таким образом, перепрограммируемая часть знакогенератора содержит 64 байта памяти (8х8). Пример кодирования CGRAM для одной буквы приведен на рис. 14.
На рис. 15 и рис. 17 приведены две возможные схемы сопряжения ЖКИ и AVR–микроконтроллера. В пер Рис. 14: Пример вой схеме (рис. 5) ЖКИ подключается к AVR как блок кодирования символа внешней памяти данных.

Узел формирования стробирующего сигнала E здесь выполнен так же, как и на фирменных платах STK200, STK300 и использует сигнал записи WR AVR–микроконтроллера и старший разряд адреса A15. Таким образом, информация на индикатор поступает при выполнении AVR–микроконтроллером команды записи данных во внешнюю память с любым адресом, имеющим A15=1.

На рис. 16 представлена временная диаграмма записи данных во внешнюю память AVR–микроконтроллера.

Сравнивая ее с диаграммой сигналов записи данных в контроллер ЖКИ (рис. 12), не трудно заметить, что сигналы E и WR имеют разную полярность. Различаются также временные соотношения этих сигналов с сигналами на шине данных. Поэтому узел формирования сигнала E на рис. 15 имеет дополнительный инвертор и дифференцирующую цепочку, укорачивающую импульс записи.

В качестве сигнала выбора регистра RS в рассматриваемой схеме используется еще один разряд адреса – A14. Таким образом, операции записи в контроллер ЖКИ команд или данных отличаются между собой только адресом. Например, данные можно записывать по адресу $C000, а команды – по адресу $8000.

Вывод R/W ЖКИ в предлагаемой схеме непосредственно присоединен к линии «земля», тем самым задается единственно возможное направление передачи информации от AVR–микроконтроллера на ЖКИ. При этом потеря возможности опрашивать BUSY–флаг и считывать данные из блоков памяти контроллера ЖКИ окупается экономией одного управляющего вывода AVR.

 

Рис. 15. Включение ЖКИ как блока внешней памяти

На рис. 17 изображена схема подключения ЖКИ, которую можно использовать для AVR–микроконтроллеров, не имеющих возможности подключения внешней памяти данных. В этой схеме управляющие сигналы E и RS формируются программно на обычных линиях ввода/вывода AVR. В приведенном примере шина данных состоит из 4 разрядов. Каждый байт данных при этом, как упоминалось выше, передается за две последовательные посылки, начиная со старшей тетрады.


Рис. 16. Запись данных во внешнюю память AVR–микроконтроллера

Рис. 17. Подключение ЖКИ при помощи 6 цифровых выводов

Простейшими составными «кирпичиками» драйвера ЖКИ могут быть подпрограммы, представленные в файле Lab2.asm:

LCD_SETUP – подпрограмма инициализации и установки LCD модуля;

LCD_HELLO – подпрограмма вывода на LCD модуль сообщения «HELLO»;

LCD_CMD – подпрограмма вывода в LCD модуль команды;

LCD_DATA – подпрограмма вывода в LCD модуль данных;

LCD_CURSOR – подпрограмма установки курсора в LCD.

Используется 4 битовая схема подключения LCD модуля к микроконтроллеру. Подпрограмма «WAIT_2M» осуществляет задержку 2.3 мсек с тактовой частотой микроконтроллера 1 МГц;

В файле Lab_2.prj используется строка с LCD модулем:

X[inst_name] LCD(chars lines oscil_freq) RS RW E D7 D6 D5 D4 D3 D2 D1 D0

В следуэщей редакции:

Xdisp LCD(24 2 250K) PD2 PB0 PD3 PD7 PD6 PD5 PD4 nc3 nc2 nc1 nc0,

где Disp – имя LCD модуля;

nc3 nc2 nc1 nc0 – выводы D3 D2 D1 D0 LCD модуля не используются (применена схема с 4 битовым подключением к микроконтроллеру)

24 2 250K – параметры LCD модуля (число символов, число строк, частота)

PD2 – RS PB0 – RW PD3 – E/

Задание к лабораторной работе

 

Изучить программу Lab2.asm и файл проекта Lab_2.prj. Отладить программу в среде VMLab, подключив необходимую периферию к микроконтроллеру AVR – интерфейс UART и LCD модуль (дисплей). На рис.18 представлены результаты моделирования программы в среде VMLab.

Рис. 18. Результаты моделирования программы Lab2.asm в среде VMLab.

 

Файл Lab_2.prj

.MICRO "ATmega16"; ATmega16 with 16 of external RAM

.PROGRAM "Lab2.asm"

.TARGET "Lab2.hex"

.TRACE; Activate micro trace

.POWER VDD=5 VSS=0; Power nodes

.CLOCK 1meg; Micro clock

.STORE 250m; Trace (micro+signals) storage time

Xterm TTY(4800 8) PD0 PD1; place terminal

Xdisp LCD(24 2 250K) PD2 PB0 PD3 PD7 PD6 PD5 PD4 nc3 nc2 nc1 nc0

.plot v(pd0) v(pd1)

 

 

Файл Lab2.asm

.include "m16def.inc"

.EQU OE = 0b001000; bit 3 Port D

.EQU RS = 0b0001004; bit 2 Port D

.DEF TEMP = R16; temporary working register

.DEF PARAM = R17; Parameter transfer register

.DEF DELAY = R10;

.DEF DELAY1 = R11; To generate long delays

.DEF DELAY2 = R12;

; Reset and interrupt vectors

CSEG

ORG 0x00

START:

Rjmp RESET; Reset vector

Org URXCaddr

rjmp uart_rx

Org UDREaddr

Reti

Org UTXCaddr

Reti

; Device initialization

RESET:

Ldi temp, high(RAMEND); инициализация памяти стека

Out SPH, temp

Ldi temp, low(RAMEND)



Поделиться:


Последнее изменение этой страницы: 2016-08-12; просмотров: 411; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 13.58.45.238 (0.007 с.)