Подключение модуля WP1602 по шине NI-15 к модулю NedoAVR-90.8535.


  1. Аппаратное подключение.

Ниже приведены два варианта схем подключения. Вариант 1 – по типу NI-15S и вариант 2-по типу NI-15.














Рис 1.1. Схема подключения по типу NI-15S. Запись в любой порт ввода-вывода приведет к записи в - регистр управления. Запись в любую ячейку памяти приведет к записи в - регистр данных. (см. ниже)


















Рис 1.2. Схема подключения по типу NI-15. Запись в порт ввода-вывода 0xFE (или с любым четным адресом) приведет к записи в - регистр управления. Запись в ячейку памяти 0xFE (или с любым четным адресом) приведет к записи в - регистр данных. (см. ниже)


Таблица 1.1. Соответствие сигналов WP1602 и NI-15S

N контакта WP1602A

N контакта NI-15

Сигнал NI-15

Сигнал WP1602A

1

1

GND

GND

2

15

Vcc=5v

Vcc=5v

3

15*

Vcc*=2..5v

Vo (яркость)

4

4

M_IO

RS

5

1

GND

RD_WR

6

6

_WR

E

7

7

D0

DB0

8

8

D1

DB1

9

9

D2

DB2

10

10

D3

DB3

11

11

D4

DB4

12

12

D5

DB5

13

13

D6

DB6

14

14

D7

DB7

    * - Сигнал Vo определяет яркость свечения индикатора. Может иметь уровень от 2 до 5 вольт. Можно просто замкнуть его на +5В – тогда яркость пикселей будет наибольшей.

  1. Программная модель.

    Программно модуль WP1602, подключенный любым из описанных выше способов представляет собой два адреса. Один адрес в пространстве адресов ввода вывода и один адрес (этот же) в пространстве адресов памяти шины NI-15. Условимся, что модуль WP1602 подключен таким образом, что дешифратор адреса вырабатывает разрешающий сигнал при адресе 0x00 на адресной шине.

    Если же это не так в вашем случае, то скорректируйте примеры для своего варианта, исправив адрес.

    С программной точки зрения индикатор WP1602 состоит из:

    - Памяти дисплейных данных DDRAM. Это озу, вывод в которое кода символа приводит к тому, что этот символ появляется в соответствующем месте дисплея.

    Память DDRAM не непрерывна. Адреса с 0x00 по 0x0F – соответствует верхней строке индикатора (16 символов). Адреса с 0x40 по 0x4F – соответствует нижней строке индикатора (16 символов). Остальное адресное пространство не занято в этом индикаторе, зарезервировано для других моделей.

    - Памяти знакогенератора.

    Память знакогенератора содержит образы символов, выводимых на экран. Состоит из двух частей – ОЗУ (CGRAM) и ПЗУ (CGROM).

    В CGRAM (размером 64 байта) пользователь может записать 8 своих символов, представляющих собой изображение размером 5х8 пикселов (5-ширина, 8-высота). Эти символы имеют коды от 0х00(0х08) до 0х07(0x0F). ОЗУ знакогенератора имеет в адресном пространстве две копии – c адреса 0х00 и с адреса 0х08. Таким образом символ с кодом 0х00 и символ с кодом 0х08 – это один и тот же символ, символ с кодом 0х01 и символ с кодом 0х09 – это тоже один и тот же символ, и т.д.

    ПЗУ знакогенератора содержит образы 240 символов в кодировке ASCII. Их коды - от 0x20 до 0xFF.

    - Регистра управления.

    Регистр служит для управления индикатором. Рассмотрим битовую раскладку его команд.

    D7

    D6

    D5

    D4

    D3

    D2

    D1

    D0


    0

    0

    0

    0

    0

    0

    0

    1

    Очистка экрана, обнуляет DDRAM. Курсор – в адрес 0

    0

    0

    0

    0

    0

    0

    1

    -

    HOME. Курсор – в адрес 0, память неизменна.

    0

    0

    0

    0

    0

    1

    I/D

    SH

    Направление движения курсора (I/D) и разрешение сдвига.

    0

    0

    0

    0

    1

    D

    C

    B

    Включить изображение (D=1), показывать курсор (С=1), курсор мигает (B=1)

    0

    0

    0

    1

    S/C

    R/L

    -

    -

    Движения курсора(S/C) и его направление (R/L) без изменения данных.

    0

    0

    1

    DL

    N

    F

    -

    -

    DL-ширина шины (1 - 8бит, 0 – 4бит),

    N-количество строк (0-1строка, 1-2строки),

    F-размер шрифта (0- 5х8, 1- 5х11)

    0

    1

    A5

    A4

    A3

    A2

    A1

    A0

    Установка адреса CGRAM. После выполнения этой команды запись в регистр данных приведет к записи в CGRAM по соответствующему адресу.

    1

    A6

    A5

    A4

    A3

    A2

    A1

    A0

    Установка адреса DDRAM. По сути – перемещение курсора в произвольное место. После выполнения этой команды запись в регистр данных приведет к записи в DDRAM по соответствующему адресу.

    - Регистра данных.

    При записи в этот регистр происходит запись в DDRAM или CGRAM, в зависимости от последней команды установки адреса. Сразу после инициализации происходит запись в регистр DDRAM, то есть печать символов.

    -Инициализационная последовательность.

    После включения питания на индикатор необходимо подать определенную инициализа ционную последовательность команд. Иначе индикатор не сможет корректно работать.

    Приведу эту последовательность. Обратите внимание, что необходимы таймауты между командами.

Ждать >15мс.

Записать в регистр управления 0x30. Ждать >5мс.

Записать в регистр управления 0x30. Ждать >2мс.

Записать в регистр управления 0x30. Ждать >2мс.

Записать в регистр управления 0x38. Ждать >2мс.

Записать в регистр управления 0x08. Ждать >2мс.

Записать в регистр управления 0x01. Ждать >2мс.

Записать в регистр управления 0x04. Ждать >2мс.


    После приведения этих действий индикатор готов к работе. Любая запись в регистр данных приведет к появлению символов на экране.

  1. Поддержка индикатора WP1602 в NedoPC-90.AVROS.

    Для того, чтобы у пользователя не болела голова о различных второстепенных моментах (типа инициализационной последовательности) в NedoPC-90.AVROS был добавлен модуль поддержки индикатора WP1602. Программно модуль состоит из трех файлов. ../hl/wp1602_ni15.h (описание прототипов функций), ../hl/wp1602_ni15.c (описание функций) и ../system/res_wp1602_ni15.h (конфигурация и ресурсы WP1602).

    Для того, чтобы заставить индикатор работать, необходимо:

    - открываем файл ../system/res_wp1602_ni15.h. Проверяем, что там присутствует строка

      #define WP1602_NI15_ENABLED

    и эта строка не закомментирована.

    Если вам нужен мигающий курсор после инициализации, проверьте, что есть строка

      #define WP1602_NI15_BLINK_CURSOR

    и она не закомментирована. Если же вам нужен немигающий курсор – то эта строка должна отсутствовать (или быть закоментированной), а вместо нее надо написать:

      #define WP1602_NI15_SHOW_CURSOR

    Проверьте, что в строке

      #define WP1602_NI15_ADR 0x00

    вместо 0x00 стоит правильный адрес (важно при подключении по второму варианту, при подключении по первому варианту адрес может быть любым.

    Строки

      #define WP1602_NI15_COLS 0x10 /* Количество символов в строке */

      #define WP1602_NI15_ROWS 0x02 /* Количество строк */

      #define WP1602_NI15_BPR 0x40 /* Количество байт на одну строку */

    не должны изменяться для индикатора WP1602.

    Если вы все сделали правильно, то после включения вы увидите курсор (если конечно есть строки WP1602_NI15_BLINK_CURSOR или #define WP1602_NI15_SHOW_CURSOR) в верхнем левом углу индикатора.

    В файле ../hl/wp1602_ni15.h описаны следующие пользовательские процедуры:

      void wp1602_ni15_clear(); // Очистка экрана

      void wp1602_ni15_showc(char blink); // Показывает курсор. Если blink=1, то курсор мигающий. Если же

      // blink=0, то курсор не мигающий

      void wp1602_ni15_curat(unsigned char x, unsigned char y); // Устанавливает курсор в позицию х строки y. //Нумерация начинается с 0.

      void wp1602_ni15_outc(unsigned char ch); // Выводит байт данных ch в регистр данных. В зависимости от

      //предыдущих команд, запись происходит в DDRAM или

      //CGRAM. Не рекомендуется применять непосредственно

      //пользователю. Или (если применяете) – знайте, что делаете.

      void wp1602_ni15_outsram(unsigned char* ram_ch); // Выводит строку символов из памяти данных на

      // экран. ram_ch – указатель на строку в памяти

      // данных.

      void wp1602_ni15_outsrom(unsigned char* rom_ch); // Выводит строку символов из памяти программ на

      // экран. rom_ch – указатель на строку в памяти

      // программ.

      void wp1602_ni15_setchar(unsigned char charnum, unsigned char* bitmap); // Устанавливает символ,

      // определяемый пользователем. charnum - номер символа (0x07-0x0F для индикатора WP1602), bitmap

      // указатель на массив из 8 байт в памяти данных, содержащий изображение символа. Значащими

      // являются только младшие 5 бит каждого байта (символ имеет размер 5х8). Первый байт соответствует

      // верхней строке символа. Младший бит каждого байта – соответствует правому пикселу

      // соответствующей строки символа.

      void wp1602_ni15_setchar_rom(unsigned char charnum, unsigned char* rombitmap); // то же самое, что и

      // предыдущая функция, только массив, содержащий образ символа лежит в памяти программ.


Этих процедур вполне достаточно для полноценной работы с индикатором. Здесь нет процедур вывода чисел, нет (и не будет) поддержки шрифтов 5х11 и еще некоторых функций.