Найти в Дзене

Орион-128. Интерфейс I2C. Работа с индикатором фирмы Winstar.

Всех приветствую! В прошлый раз мы пробовали работать с интерфейсом I2C и микросхемой с энергонезависимой памятью серии AT24Cxx. Статья по этой ссылке Сегодня мы поработаем с ЖКИ индикатором фирмы Winstar по интерфейсу I2C. Для этого нам потребуется сам индикатор и плата-переходник на интерфейс I2C. Индикатор я взял Winstar 2004. Всё это подключаем по прежней схеме из статьи про EEPROM AT24Cxx: только вместо модуля памяти подулючаем переходник PCF8674. Вот так выглядит подключение к Ориону. Теперь попробуем что-нибудь напрограммировать и заставить наш индикатор что-то отобразить. Для этого воспользуемся прежней библиотекой от ПЗУ AT24C04, которую мы написали в прошлый раз (статья здесь https://dzen.ru/a/Z--Yn627eXMYb9II) и немного её модифицируем. Требования: OC DSDOS, ASSM 2.7, редактор ED, библиотека 24С16.L Итак, берём библиотеку 24С16.L и модифицируем её. Для начала выкинем все процедуры чтения данных. Здесь они нам не понадобятся. Вместо них напишем процедуру инициализации диспле

Всех приветствую!

В прошлый раз мы пробовали работать с интерфейсом I2C и микросхемой с энергонезависимой памятью серии AT24Cxx. Статья по этой ссылке

Сегодня мы поработаем с ЖКИ индикатором фирмы Winstar по интерфейсу I2C. Для этого нам потребуется сам индикатор и плата-переходник на интерфейс I2C.

Переходник I2C
Переходник I2C

Индикатор я взял Winstar 2004. Всё это подключаем по прежней схеме из статьи про EEPROM AT24Cxx:

-2

только вместо модуля памяти подулючаем переходник PCF8674. Вот так выглядит подключение к Ориону.

-3

Теперь попробуем что-нибудь напрограммировать и заставить наш индикатор что-то отобразить. Для этого воспользуемся прежней библиотекой от ПЗУ AT24C04, которую мы написали в прошлый раз (статья здесь https://dzen.ru/a/Z--Yn627eXMYb9II) и немного её модифицируем.

Требования: OC DSDOS, ASSM 2.7, редактор ED, библиотека 24С16.L

Итак, берём библиотеку 24С16.L и модифицируем её. Для начала выкинем все процедуры чтения данных. Здесь они нам не понадобятся. Вместо них напишем процедуру инициализации дисплея, а также две процедуры для записи в дисплей команд и данных.

Выглядят они так:

;инициализация порта и индикатора
;
INIT_LCD:
MVI A,93h
STA PT_I2C
MVI A,0C0h
STA PT_SDA_IN
;
XRA A
CALL WRITE_LCD
CALL DELAY_100us
MVI A,20h
CALL WRITE_LCD
MVI A,24h
CALL WRITE_LCD
MVI A,20h
CALL WRITE_LCD
CALL DELAY_100us
MVI A,28h
CALL LCD_COM
MVI A,8
CALL LCD_COM
MVI A,1
CALL LCD_COM
CALL DELAY_100us
MVI A,6
CALL LCD_COM
MVI A,0Ch
CALL LCD_COM
RET

;
;отправка данных в индикатор
;
WRITE_LCD:
;вх. [A] данные;
PUSH PSW
PUSH PSW
CALL I2C_START
LDA CHIP_ADDRESS
MOV B,A
LDA SELECT_ADDRESS
RAL
ADD B
MOV C,A ;адрес устройства
CALL I2C_TRANSMIT
ORA A
JNZ I2C_ERROR
POP PSW ;достаем данные из стека
MOV C,A
CALL I2C_TRANSMIT
ORA A
JNZ I2C_ERROR
CALL I2C_STOP
POP PSW
RET

;
;посыл команды в индикатор;
LCD_COM
:
;вх. [A] команда;
PUSH PSW
ANI 0F0h
ANI 0FEh
ORI 4
CALL WRITE_LCD
ANI 0FBh
CALL WRITE_LCD
CALL DELAY_100us
POP PSW
ANI 0Fh
RAL
RAL
RAL
RAL
ANI 0FEh
ORI 4
CALL WRITE_LCD
ANI 0FBh
CALL WRITE_LCD
RET

;
;посыл данных в индикатор
;
LCD_DATA:
;вх. [A] данные
;
PUSH PSW
ANI 0F0h
ORI 1
ORI 4
CALL WRITE_LCD
ANI 0FBh
CALL WRITE_LCD
CALL DELAY_100us
POP PSW
ANI 0Fh
RAL
RAL
RAL
RAL
ORI 1
ORI 4
CALL WRITE_LCD
ANI 0FBh
CALL WRITE_LCD
RET

После всего этого сохраняем исходный текст и транслируем его.
Запустим нашу программу и видим вот такое приветствие:

-4

Помимо простого вывода сообщения на экран, внутри демки имеются процедуры установки курсора в требуемую позицию, выбора типа курсора, а также процедуры очистки и гашения дисплея.

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

В данной статье я просто хотел продемонстрировать работу c индикатором по шине I2C.

Конечно, серьёзно применять такой индикатор на Орионе не приходится. Трудно даже представить, какой упоротости должно быть внешнее устройство, чтобы требовать для отображения каких-то данных на таком дисплее при наличии монитора у компьютера 🤔

Теперь о небольшой доработке переходника I2C PCF8574. Вот его схема:

-5

Дело в том, что такой переходник может управлять подсветкой индикатора выводом 7 (P3) и если использовать прилагаемые подпрограммы, то дисплей будет гаснуть каждый раз при попытках им управлять. Чтобы это исключить, необходимо закоротить коллектор и эмиттер транзистора Q1. Проще всего это сделать, пробросив перемычку от контакта J2.16 индикатора до контакта земли разъёма I2C J1.4.

Саму программу для ознакомления можно скачать по ссылке https://disk.yandex.ru/d/58P1ibl25mJ1ZQ

До новых встреч!