aidar_i писал(а): 01 сен 2025, 06:11
Эта библиотека не используется в контроллере Анатолия.
Используется библиотека MCP23008.h
Ниже код из блока:
<DO1> = MCP23008_<INS.UUID>.digitalRead(0);
<DO2> = MCP23008_<INS.UUID>.digitalRead(1);
<DO3> = MCP23008_<INS.UUID>.digitalRead(2);
<DO4> = MCP23008_<INS.UUID>.digitalRead(3);
MCP23008_<INS.UUID>.digitalWrite(4, <DI1>);
MCP23008_<INS.UUID>.digitalWrite(5, <DI2>);
MCP23008_<INS.UUID>.digitalWrite(6, <DI3>);
MCP23008_<INS.UUID>.digitalWrite(7, <DI4>);
------------------------------------------
1.В каждом цикле читаются четырьмя отдельными транзакциями входы.
Используя методы FLProg можно читать одной транзакцией все входы - это примерно в 5-6 раз быстрее.
И это не главная проблема.
Интерфейс i2c не быстрый, вызывать транзакции в каждом цикле это "убивать" быстродействие процессора сразу - не имеет значение 8мгц или 1гГц, быстродействие будет примерно одно и тоже.
Разумнее было опрашивать периодически, например 1 раз в 50мс. Так сделано в Kincony A16 FLProg.
2.Еслидействительно нужен быстрый опрос. У MCP23008 есть выход вызывающий прерывания при изменении входов. Но для этого надо было выделить пин, развести плату с учетом этого пина... Но и это решает проблему быстродействия входов ограниченно, для быстрых входов правильнее использовать отдельные пины контроллера
3.В каждом цикле записываются четыре выхода.
Используя методы FLProg можно писать одной транзакцией все входы - это примерно в 5-6 раз быстрее.
И здесь это не главная проблема.
Ни к чему использовать медленный i2c в каждом цикле - можно писать по изменению, или как иногда по изменению + периодически (например 1 раз в 2сек). Библиотеки FLProg поддерживают эти методы.
4.В FLProg уже много лет используется своя библиотека MCP23017. Там два регистра A и B.
Использование одного регистра A соответствует чипу MCP23008.
5.MCP23008/MCP23017 - достаточно сложный с большими возможностями чип. И не дешевый.
Но в конкретной конструкции они не используются. Также как и вход Reset.
В конкретной конструкции достаточен был дешевый и проверенный чип PCF8574. Он используется в Kincony A16.
На него и библиотека FLProg есть. Но чип настолько прост, что можно работать с ним и напрямую через функции i2c.
-----------------------
6.Любопытен устойчивый метод отрицания библиотек FLProg.
Внешние библиотеки с GitHub используются, а библиотеки FLProg игнорируются.
Это один из осмысленных методов развития и поддержки FLProg?
А ведь библиотеки FLProg учитываю особенности используемых контроллеров и тщательно исследуются на предмет быстродействия.
С применением современных логических анализаторов и методов заложенных в FLProg.
----------------------
7.Вновь повторю уже высказанное:
"Бездумное создание пользовательских блоков без понимания особенностей интерфейсов, чипов и архитектуры программного обеспечения FLProg может приводить к иллюзиям положительных результатов".
Отрицательные последствия проявляются не сразу, а по мере усложнения проектов.
Отдельно лампочками поморгать от переключателей - для этого данный блок вполне пригоден, в сложных проектах будет "тормозить".
-----------------------
С уважением, ecoins.