воскресенье, 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 кадров в секунду.

2 комментария:

  1. Спасибо за инфо.Я электронщик со стажем,но программист новичок.У меня плата ардуино нано(атмега126).Не смогли ли Вы сделать небольшую программку(исходник) вывода информации(текстовую)на дисплей 12864В V2.0? Буду очень признателен.

    ОтветитьУдалить
  2. день добрый. пытаюсь написать код для вывода графической информации, но пока только вижу мусор на экране. вроде все написано правильно и согласно даташит. Помогите найти ошибку.
    slavatw1979tw@gmail.com, вот моя почта. Давайте спишемся. Спасибо

    ОтветитьУдалить