Ответ на вопрос пользователя.
--------------------------------------------------
Блок MCP23017 активно используем и он в отличии от стандартного "не тормозит".
Прикрепленный блок содержит более подробное описание и по нему проще будет освоить его использование:
		БЛОК ВВОДА-ВЫВОДА mcp23017/mcp23s17
1.	Блок содержит два 8-разрядных регистра A и B, каждый из которых может настроен на вывод или ввод.
2.	Настройка режимов работы регистров А и В:
	R -ввод с инверсией и подтяжкой входов к +Vcc.	Выполняется при каждом обращении к регистру. 
	r  - ввод. 											Выполняется при каждом обращении к регистру. 
	w - вывод.											Выполняется при каждом обращении к регистру. 
	W -вывод с записью по изменению.				Выполняется при инициализации(1 раз) и при каждом
														изменении значения регистра. 
	Использование режим W существенно разгружает шину i2c, и соответственно проект меньше "тормозит".
3.	Обмен с регистрами  осуществляется через шину i2c по адресу=adr или через SPI через пин cs=adr.
3.	Если входное значение адреса устройств=adr <0, устройство не используется. 
4.	Для i2c:	Обычно mcp23017 выпускаются с базовым адресом 0x20 (32 десятичный). 
	           		Это адрес по умолчанию установлен в библиотеке как "базовый адрес".
				Пространство адресов может меняться входами a0,a1,a2 mcp23017 - всего восемь адресов.
				Для удобства возможно применение значение аdr в диапазоне 0-7, он будет преобразован в 32/38. 
5.	Алгоритм поиска устройства на шине i2c. Период опроса в режиме поиска устройства постепенно 
	увеличивается со 100 мс до 2 сек с шагом 100 мс. После обнаружения устройства оно инициируется и
	работа с ним выполняется в периодом опроса, определенный параметром пользователя 
	ПЕРИОД ОБНОВЛЕНИЯ В ТИКАХ 10_МС	пока не будет обнаружено устройство. 
6.	Обмен с регистрами выполняется с периодом = ПЕРИОД ОБНОВЛЕНИЯ В ТИКАХ 10_МС. 
	Например, если значение этого параметра =5(установлен по умолчанию), период=10 х 5=50 мс.
7.	Если ПЕРИОД ОБНОВЛЕНИЯ В ТИКАХ 10_МС=0, то обмен с регистрами выполняется 
	при каждом обращении к блоку.
8.	Вход EN разрешает работу блока. Через этот вход можно также управлять периодом обмена с устройством.
	В этом случае удобнее установить ПЕРИОД ОБНОВЛЕНИЯ В ТИКАХ 10_МС=0.
9.	Если требуется управление через побитовое управление или побитовое чтение, можно применить стандартные
	блоки FLProg из меню "Операции с битами": Bits->Byte, Byte->Bits.
10.	Параметр пользователя ИНТЕРФЕЙС ПОДКЛЮЧЕНИЯ может принимать два значения (по умолчанию 'i'):
	'i' - интерфейс i2c (используется чип mcp230170);
	's' - интерфейс SPI (используется чип mcp23s170);
11. Параметр пользователя ИНИЦИАЛИЗИРОВАТЬ ИНТЕРФЕЙСЫ может принимать два значения (по умолчанию 'Y'):
	'Y' - инициируется используемые интерфейсы функциями Wire.begin() или SPI.begin();
	'N' - инициализация не выполняется. В этом случае считается, что интерфейсы уже инициализированы.
		Опция может быть полезна при использовании контроллеров с настраиваемым пинами интерфейсов,
		например ESP8266.
		Примечание: со временем этот параметр будет устранен из параметров пользователя.
-----------------------------------------------------------------------------------------------------------------------------------
ecoins@mail.ru 12.07.19;  21.07.19; 28.10.19. new 07.04.2020, 01.06.20.
00_mcp23x17_вводвывод_регистров_A,B_(CODE).ubi
--------------------
Если у Вас возникают трудности, сделайте автономно работающий фрагмент проекта на стандартном блоке FLProg,
а мы доработаем под блок ecoins.
У вас нет необходимых прав для просмотра вложений в этом сообщении.