воскресенье, 8 декабря 2013 г.

LCD 12864 на контроллере ST7920. Параллельный режим (8 бит)

Наверное самый распространенный режим подключения дисплеев, но в том случае, когда у МК есть соответствующее количество свободных ног. А именно 10-12, в зависимости от нужд.
Если нет необходимости читать данные из дисплея, и сбрасывать его, то можно использовать только 10 выводов.
Рассматривать пожалуй начнем с параметров сигналов, поступающих на дисплей. Контроллер дисплея воспринимает напряжение сигнала от 2.7 до 5.5 В, что позволяет использовать его практически с любыми микроконтроллерами.
Рисунок 1 - Тайминг записи команд/данных ST7920
Рисунок 2 - Тайминг чтения данных ST7920
На рисунке 1 и 2, а также в таблице 1 можно увидеть какие данные предъявляются ко входным сигналам по времени при условии, что дисплей питается напряжением 4.5 В и более.

Таблица 1 - Тайминг записи/чтения команд/данных ST7920
Обозначение
Параметр
Минимальное значение
Tas
Время установки адреса
10 нс
Tah, Th
Задержка перед изменением адреса/данных для нового цикла записи/чтения
20 нс
Tpw
Ширина импульса разрешения чтения/записи
140 нс
Tdsw
Время установки данных на МК
40 нс
Tddr
Время установки данных на ST7920

Tc
Длина цикла импульса разрешения чтения/записи
1200 нс

Обработка каждой команды длится в среднем около 72 мкс - это данные, взятые из даташита. На деле же оказалось что каждая команда выполнялась всего за 32-33 мкс. При этом удалось получить частоту обновления графики на дисплее примерно 25 кадров в секунду, а это очень даже неплохой результат. Дальнейшее увеличение частоты обновления приводит к проскальзыванию различных артефактов.

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

Таблица 2 - Команды управления  ST7920 в режиме вывода графики 8 bit
Команда
Код команды
Значение параметров
Описание
Stand by
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
0
0
1
Не имеет параметров
Режим пониженного энергопотребления
Extended function set
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
1
1
x
1
G
x
G:0 дисплей выключен
G:1 дисплей включен
Управление индикацией

Тут все предельно просто, всего две команды, использующиеся для вывода графической информации, одна из которых необходима для инициализации дисплея (Extended function set).
Команды в дисплей записываются при низком уровне сигнала на входах RS и R/W дисплея.

Следующие команды - это команды установки адреса памяти дисплея, в которую будет осуществлена запись самой графической информации. И тут хотелось бы рассказать поподробнее.  Информация на дисплей выводится 16-битными словами, а память дисплея организована не 8x64 таких слова, а 16x32. Тоесть первая строка состоит из 256 бит (16 слов).

Рисунок 3 - Представление графической информации в памяти ST7920

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

Таблица 3 - Команды установки адреса графической памяти  ST7920 в режиме вывода графики 8 bit
Команда
Код команды
Значение параметров
Описание
Set graphic ram addr.
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
1
0
0
0
AC3
AC2
AC1
AC0
AC3:AC0 - адрес
Горизонтальный адрес
Set graphic ram addr.
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
1
AC6
AC5
AC4
AC3
AC2
AC1
AC0
AC6:AC0 - адрес
Вертикальный адрес

Таблица 4 - Запись графической информации в  ST7920 в режиме вывода графики 8 bit
Команда
Код команды
Значение параметров
Описание
Data high byte
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
D15
D14
D13
D12
D11
D10
D9
D8
D15-D8 - данные
Старший байт выводимой графики
Data low byte
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
D7
D6
D5
D4
D3
D2
D1
D0
D7-D0 - данные
Младший байт выводимой графики

Все команды в дисплей записываются при низком уровне сигнала на входах RS и R/W дисплея, а данные при высоком уровне RS и низком R/W.

Обозначив все необходимые команды, можно перейти непосредственно к алгоритму работы с дисплеем. И первое, что необходимо сделать - это проинициализировать дисплей. Это делается управляющей командой  Extended function set спустя минимум 40 мс после включения питания. После этого дисплей готов к работе. Если Вы увидели на нем кучу графического мусора, не стоит пугаться, дисплей не умер! Весь это мусор всего лишь произвольные значения в памяти ST7920, а его появление говорит о том, что инициализация прошла успешно и дисплей готов принимать дальнейшие указания.

Теперь можно приступать к выводу графической информации, и тут у нас два варианта:
  • Первый - запись слов в произвольном порядке. Сначала записываем вертикальный адрес, затем горизонтальный, потом старший байт графики и младший байт графики. Такой алгоритм достаточно медленный, но позволяет редактировать лишь необходимые части изображения на дисплее
  • Второй вариант - это запись слов построчно ( 1 строка - 16 слов (об этом я упоминал ранее)). При этом нам необходимо указать лишь начальный адрес нужной строки, а затем по-порядку записывать слова графической информации. Именно при использовании этого способа можно достичь скорости обновления графики на дисплее около 25 кадров в секунду.