Разработки ecoins

Библиотеки для разных контроллеров

ecoins
Полковник
Сообщения: 2932
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Разработки ecoins

#601

Сообщение ecoins » 26.05.2020{, 23:39}

tolochko писал(а):
26.05.2020{, 23:17}
Мне главное чтобы счетчики не тормозили недели 3 еще есть пока границы не открыли
буду пробавать разные варианты
Успехов.
P.S. Сами дисплеи подключать постоянно не обязательно - они могут подключаться/отключаться в "горячем" режиме.

ecoins
Полковник
Сообщения: 2932
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Разработки ecoins

#602

Сообщение ecoins » 29.05.2020{, 21:30}

НУЖНА КОНСУЛЬТАЦИЯ, ПОМОЩЬ, НАВОДКА по шине 1-Wire (вопрос тем, кто в теме).
----------------------------
Добрался наконец до библиотеки 1-Wire - OneWire.h.
Она используется в FLProg, Arduino IDE.
Там есть что поправить (в т.ч. и по задержкам по времени), да и библиотеки с одним наименованием попадаются разные.
Первое желание при знакомстве с библиотекой это отказаться от управления пинами напрямую(через номер регистра и маску) и
перевести на операторы pinMode(),digitalRead(),digitalWrite(). Они конечно помедленнее, но зато компактнее и на время преобразования это практически не влияет.
Вроде бы никаких противоречий нет.
К слову так написано у AlexGyver и вроде проблем нет.
Раньше сталкивался с подобным - делалось так для совсем младших контроллеров (8мгц и ниже), и то мне кажется все успевать будет.
Или есть какая-то глубокая мысль, или это издержки древности прототипа библиотеки она уже в 2007г. дорабатывалась. Возможно даже с 2000г. фирма Dallas написала 1-ю версию.
Или это писалось до Arduino IDE, а теперь только дорабатывается.
------------------------------
Внешне конечно выглядит и заумно, и "уродливо" (если конечно там нет потайного смысла).
-------------------------------
Если у кого-то есть рекомендации, возможно меня это освободит от ненужной работе.
Делать начал, но вдруг при глубоком тестировании возникнет нечтo?
Можно конечно оставить в основе то, что есть - но "глаза на это не хотят смотреть"!

ecoins
Полковник
Сообщения: 2932
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Разработки ecoins

#603

Сообщение ecoins » 01.06.2020{, 16:17}

Ответ на вопрос пользователя.
--------------------------------------------------
Блок 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.
--------------------
Если у Вас возникают трудности, сделайте автономно работающий фрагмент проекта на стандартном блоке FLProg,
а мы доработаем под блок ecoins.
Последний раз редактировалось ecoins 01.06.2020{, 18:19}, всего редактировалось 1 раз.

Gordon0007
Сержант
Сообщения: 138
Зарегистрирован: 19.04.2018{, 13:37}
Репутация: 13
Имя: Павел

Разработки ecoins

#604

Сообщение Gordon0007 » 01.06.2020{, 17:14}

ecoins, Так не смог адаптировать ваш блок и заставить его работать :smile390:
Проверка MCP23017 урезаная.flp
(661 КБ) 52 скачивания

ecoins
Полковник
Сообщения: 2932
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Разработки ecoins

#605

Сообщение ecoins » 01.06.2020{, 20:07}

Gordon0007 писал(а):
01.06.2020{, 17:14}
ecoins, Так не смог адаптировать ваш блок и заставить его работать
Проверка MCP23017 урезаная.flp
1.Ваш пример для ESP32.
2.Проверил его ESP32 - контроллер висит.
3.Проверил его на Nano - контроллер висит.
4.Раньше я проверял стандартные блоки FLPtog и они работали. Что-то в них либо убрали, либо еще что-то...
Разбираться и не хочется и не стоит. И вот почему -->(пункт 5).
5. FLProg в начале кода, впереди всех плат вставляет следующий код по блоку MCP23017
_MCP2307_1_O_IO1 = _MCP2307_1.digitalRead(0);
_MCP2307_1_O_IO2 = _MCP2307_1.digitalRead(1);
_MCP2307_1_O_IO3 = _MCP2307_1.digitalRead(2);
_MCP2307_1_O_IO4 = _MCP2307_1.digitalRead(3);
_MCP2307_1_O_IO5 = _MCP2307_1.digitalRead(4);
_MCP2307_1_O_IO6 = _MCP2307_1.digitalRead(5);
_MCP2307_1_O_IO7 = _MCP2307_1.digitalRead(6);
_MCP2307_1_O_IO9 = _MCP2307_1.digitalRead(8);
_MCP2307_1_O_IO10 = _MCP2307_1.digitalRead(9);
_MCP2307_1_O_IO11 = _MCP2307_1.digitalRead(10);
_MCP2307_1_O_IO12 = _MCP2307_1.digitalRead(11);
_MCP2307_1_O_IO13 = _MCP2307_1.digitalRead(12);
_MCP2307_1_O_IO14 = _MCP2307_1.digitalRead(13);
_MCP2307_1_O_IO15 = _MCP2307_1.digitalRead(14);

Во-первых забыт один вход - 15.
Во-вторых каждый цикл loop() даже если плата не вызывается (например выполнение по условию),
выполняется 15 транзакций через шину i2c - а это результат гарантированного торможения.
И еще там есть похожие проблемы.

6.На блоках ecoins проверил на вывод. Все хорошо работает.
7.Со вводом - надо стенд немного перестроить - сегодня постараюсь сделать.

ecoins
Полковник
Сообщения: 2932
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Разработки ecoins

#606

Сообщение ecoins » 02.06.2020{, 14:36}

Gordon0007 писал(а):
01.06.2020{, 17:14}
ecoins, Так не смог адаптировать ваш блок и заставить его работать
Проверка MCP23017 урезаная.flp
------
1.Работало на Nano,ESP8266 - c ESP32 возникли нюансы по вводу (очень уж он быстрый). Пришлось немного "отполировать" библиотеку.
2.Прикрепляю библиотеку.
RT_11_HW_MCP23017_2.2.ZIP
(16.13 КБ) 63 скачивания
3.На основании Вашего проекта сделал вариант - вместо 18 пина использую 25 пин (мне на стенде так удобнее - на 18 пине SPI).
Проверка MCP23017 урезаная_в03_ESP32.flp
(811.07 КБ) 56 скачиваний
Схема проектаПоказать
Схема mcp23017 ESP32.png
4.На пине 4 контрольный сигнал для контроля цикла loop() - на ESP32 это "летает" 10 мкс. Если ввести диспетчер будет меньше 3мкс.
5.На плате 2 - её можно отключить - на LCD 16x2 вывод всех регистров 2-х mcp23017 и мерцающий символ.
Период loop() 10мкс - это вместе с дисплеем.

Gordon0007
Сержант
Сообщения: 138
Зарегистрирован: 19.04.2018{, 13:37}
Репутация: 13
Имя: Павел

Разработки ecoins

#607

Сообщение Gordon0007 » 02.06.2020{, 16:47}

попробовал залит зависло
error.log
(36.88 КБ) 41 скачивание

ecoins
Полковник
Сообщения: 2932
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Разработки ecoins

#608

Сообщение ecoins » 02.06.2020{, 18:45}

Попробуйте последовательно сделать следующие вещи:
1.В FLProg установите какой-нибудь нейтральный контроллер - например Nano или Mega.
На этом этапе это позволит убрать все настройки ESP32, которые добавляет FLProg - например сторожевой таймер.
Было бы хорошо, если бы в скетче оставался бы только код, который связан с тем что, размещено на плате.
При загрузке из Arduino IDE указывайте контроллер ESP32 Dev Module.
2. Распространенная причина - это проблемы с i2c - пины 21,22 надо подтянуть к Vcc(3.3v).
3. На второй плате подключен LCD. Сделайте проект - оставьте только плату 2 (если просто закомментировать плату 1, то со входов LCD надо убрать название клемм - иначе будет ошибка компиляции.).
На экране в первой позиции должен мерцать символ "звездочка".
4. Можете прислать мне скетч, который грузится в контроллер - может я что-нибудь увижу в нем проблемное.
5. Сейчас еще раз попробую загрузить и напишу.

ecoins
Полковник
Сообщения: 2932
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Разработки ecoins

#609

Сообщение ecoins » 02.06.2020{, 19:06}

Попробовал еще раз.
FLProg 6.3.1. Контроллер в FLProg выбран ESP32.
Только две дополнительные библиотеки:
Проверка MCP23017 урезаная_в03_ESP32_2.flp
(787.09 КБ) 48 скачиваний
RT_11_HW_MCP23017_2.2.ZIP
(16.13 КБ) 50 скачиваний
RT_10_HW_LCD44780_v2.3.zip
(27.49 КБ) 65 скачиваний
pr1_mc23017_FLProg.ino
(10.29 КБ) 51 скачивание
----
Работает.
------
Вы прислали error.log - это файл FLProg?
Вы до компиляции и загрузке Arduino доходили - скетч грузится?

ecoins
Полковник
Сообщения: 2932
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Разработки ecoins

#610

Сообщение ecoins » 02.06.2020{, 19:19}

Стенд.jpg
НастройкиПоказать
Настройка ESP32.jpg
Два модуля mcp23017Показать
Две mcp23017.jpg
-----
Дополнительная визуальная информация - может будет полезна.

Gordon0007
Сержант
Сообщения: 138
Зарегистрирован: 19.04.2018{, 13:37}
Репутация: 13
Имя: Павел

Разработки ecoins

#611

Сообщение Gordon0007 » 04.06.2020{, 09:29}

ecoins, добрый день спасибо что помогаете мне, вчера не смог добраться до компьютера (ездил в др. город в больницу).
Все заработало и прошилось, сделал по вашей инструкции.
Win7(64), FLProg 6.3.1, Контроллер в FLProg выбрал ESP32.

Реле переключается, модуль для приема сигналов DI работает и отправляет в контроллер данные
Но есть, но
1. Почему то у меня реле работает в инверсном виде (видимо у меня другая реле они бывают с постоянным "+" или "-"). Все реле кроме одного включены ну и по очереди выключаются и включаются.
СпойлерПоказать
WhatsApp Image 2020-06-04 at 08.29.22.jpeg
WhatsApp Image 2020-06-04 at 08.29.23.jpeg
2. На второй плате MCP23017 в исходнике модуль работает не только как DI, а как DI/DO (видимо по этой причине вы не нашли 15 пин). В данный момент там стоит два светодиода и по очереди моргают подтверждая, что связь с платой есть. В дальнейшем это будет работать как - нажал кнопку и на этой же плате загорается светодиод потверждающий нажатие кнопки и что контроллер обработал нажатие и обработал прекращение нажатой кнопки, тем самым уменьшается пучок проводов до кнопок и светодиодов.
Во-первых забыт один вход - 15.
Снимок 23017.PNG
Это кусок кода, который я собираюсь использовать для своего аквариума, проект большой и интересный. Мне нужно было разобраться с данным модулем как он работает и столкнулся с зависанием при его использование. Если интересно могу скинуть перечень сигналов и оборудования которое будет использоваться в моем проекте. Причина использования ESP32 и модулей расширения в том, что хочу сделать управление через комп/телефон и не хватает портов управления.

Есть у меня еще вопросы, если можно по задаю:
1. как управлять каждым каналом в отдельности, как встроенного блока?
2. Можно ли использовать как модуль ввода/вывода или только по отдельности ввод или вывод?
3. На какую длинны максимально можно выводить провода от контроллера до модуля (у меня в с вашей прошивкой не зависает про длине проводов 20см)?
4. Можно ли после испытания этих блоков согласовать с автором "Сергеем" их использование как штатные блоки в новых версиях программы?
5. Так же мне не очень понятны как и где присваиваются ноги контроллера ESP32, МЕГИ и УНЫ, они же разные (в родном блоке все прозрачно)? Ну и у ESP32 2 x I2C а у остальных по одному.
6. этот вопрос может быть моим не верным суждением но, мне хочется как можно больше использовать штатные блоки, что бы не зависить от пользовательских блоков при изменение версии программы. Можно ли как то договориться с создателем для внесения в штатные блоки проверенные блоки пользователей, что бы при изменение программы не искать библиотеки и ПБ?

ecoins
Полковник
Сообщения: 2932
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Разработки ecoins

#612

Сообщение ecoins » 04.06.2020{, 12:22}

Gordon0007 писал(а):
04.06.2020{, 09:29}
1. как управлять каждым каналом в отдельности, как встроенного блока?
1. Побитное управление отброшена - что один бит, что 8 бит требует одного времени при обмене с i2c. При SPI это еще и могло иметь смысл. Общая рекомендация такая - ставьте дополнительные модули, если есть проблемы с нехваткой входов при порегистровой (побайтной) настройке.
Gordon0007 писал(а):
04.06.2020{, 09:29}
2. Можно ли использовать как модуль ввода/вывода или только по отдельности ввод или вывод?

В библиотеке каждый из двух регистров А и B могут работать в одном из режимов - ввод или вывод: например А на ввод и В на выход, или А и В на выход и т.д.
Gordon0007 писал(а):
04.06.2020{, 09:29}
3. На какую длинны максимально можно выводить провода от контроллера до модуля (у меня в с вашей прошивкой не зависает про длине проводов 20см)?
Поставьте поменьше подтягивающие резисторы к пинам 21,22 (SDA,SCL) - i2c будет работать устойчивее. Ошибки обрабатываются еще и библиотекой и потому модуль работает устойчиво.
Gordon0007 писал(а):
04.06.2020{, 09:29}
4. Можно ли после испытания этих блоков согласовать с автором "Сергеем" их использование как штатные блоки в новых версиях программы?

Думаю всему своё время. Это возможно. Но у автора есть свои представления, а то что мы делаем не всегда совпадает с этими представлениями.
Gordon0007 писал(а):
04.06.2020{, 09:29}
5. Так же мне не очень понятны как и где присваиваются ноги контроллера ESP32, МЕГИ и УНЫ, они же разные (в родном блоке все прозрачно)? Ну и у ESP32 2 x I2C а у остальных по одному.
SDA,SCL UNO - 18,19 (или А4,А5) - не меняются;
SDA,SCL MEGA - 20,21 - не меняются;
SDA,SCL ESP32 - 21,22 - могут быть перенастроены на другие пины;
Gordon0007 писал(а):
04.06.2020{, 09:29}
6. этот вопрос может быть моим не верным суждением но, мне хочется как можно больше использовать штатные блоки, что бы не зависить от пользовательских блоков при изменение версии программы. Можно ли как то договориться с создателем для внесения в штатные блоки проверенные блоки пользователей, что бы при изменение программы не искать библиотеки и ПБ?
Вопрос несколько сложнее. Часть блоков (например счетчики) у нас автономные. Блоки для работы с устройствами основаны на собственных библиотеках и их всегда надо подключать к FLProg в директорию ideV5. Сейчас мы реализуем собственную концепцию библиотек для Arduino IDE, библиотеки развиваются вместе с концепцией. В концепции применен другой подход по совместимости проекта с разными контроллерами - он сильно отличается от текущего подхода FLProg.
О взглядах и планах автора в этой части (переносимость проектов вплоть до кода проекта) нам не известно. Предполагаем, что он пока просто наблюдает.
Последний раз редактировалось ecoins 07.06.2020{, 13:32}, всего редактировалось 1 раз.

ecoins
Полковник
Сообщения: 2932
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Разработки ecoins

#613

Сообщение ecoins » 04.06.2020{, 12:29}

Gordon0007 писал(а):
04.06.2020{, 09:29}
Реле переключается, модуль для приема сигналов DI работает и отправляет в контроллер данные
Но есть, но
1. Почему то у меня реле работает в инверсном виде (видимо у меня другая реле они бывают с постоянным "+" или "-"). Все реле кроме одного включены ну и по очереди выключаются и включаются.
Не понял о каких блоках Вы пишите. Если о наших то любой бит можно проинвертировать по входу (байт в 8-бит и 8-бит в байт) или все одновременно через блок вычитания (255-значение байта).
Gordon0007 писал(а):
04.06.2020{, 09:29}

2. На второй плате MCP23017 в исходнике модуль работает не только как DI, а как DI/DO (видимо по этой причине вы не нашли 15 пин). В данный момент там стоит два светодиода и по очереди моргают подтверждая, что связь с платой есть. В дальнейшем это будет работать как - нажал кнопку и на этой же плате загорается светодиод потверждающий нажатие кнопки и что контроллер обработал нажатие и обработал прекращение нажатой кнопки, тем самым уменьшается пучок проводов до кнопок и светодиодов.
Во-первых забыт один вход - 15.

В посте выше я привел код С++, последний бит который читается - это 14. 15-го нет. Возможно там как-то сложнее - просто обратил внимание.

Gordon0007
Сержант
Сообщения: 138
Зарегистрирован: 19.04.2018{, 13:37}
Репутация: 13
Имя: Павел

Разработки ecoins

#614

Сообщение Gordon0007 » 04.06.2020{, 17:00}

ecoins писал(а):
04.06.2020{, 12:22}
SDA,SCL ESP32 - 20,21 - могут быть перенастроены на другие пины;
Где это можно переназначить в FLprog?

ecoins
Полковник
Сообщения: 2932
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Разработки ecoins

#615

Сообщение ecoins » 04.06.2020{, 17:45}

Gordon0007 писал(а):
04.06.2020{, 17:00}
Где это можно переназначить в FLprog?
Мы сейчас создаем новую платформу, там это будет предусмотрено.
Если можете поясните - а какой практический смысл смены пинов i2c на ESP32.
На готовых устройствах (например M5Stack) прибегать к настройке пинов приходиться для совместимости проектов.

Gordon0007
Сержант
Сообщения: 138
Зарегистрирован: 19.04.2018{, 13:37}
Репутация: 13
Имя: Павел

Разработки ecoins

#616

Сообщение Gordon0007 » 06.06.2020{, 09:11}

ecoins писал(а):
04.06.2020{, 17:45}
Если можете поясните - а какой практический смысл смены пинов i2c на ESP32.
Причина простая, на одну шину можно подключить только 8 таких плат, но если их нужно больше, допустим 10шт. Вот второе применение в эти пины просто заняты другими устройствами (дисплеем, часами или просто дискретными сигналами), а переподключать нет возможности и в макетке нет свободного отверстия, так как плата занимает 4 из 5 отверстия.
Снимок.PNG
Причин может быть много, я могу только предположить. Но если есть такая возможность почему бы ей не пользоваться в полной мере.

ecoins
Полковник
Сообщения: 2932
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Разработки ecoins

#617

Сообщение ecoins » 06.06.2020{, 09:55}

Gordon0007 писал(а):
06.06.2020{, 09:11}
Причин может быть много, я могу только предположить. Но если есть такая возможность почему бы ей не пользоваться в полной мере.
Понятно. Если не вскрывать набор разных нюансов, то подобное использование контроллеров в FLProg лучше избегать.
Это связано связано и с особенностью программного обеспечения для ПЛК - это относится и к FLProg. Приходиться скорее целенаправленно "обрубать" те возможности, которые требуют от пользователя дополнительных знаний аппаратных особенностей контроллера, настраивать дополнительные параметры и т.п.
ПЛК - это и для упрощения. А продвинутые пользователи в принципе могут осуществлять продвинутое программирование на чистом С++ и ассемблере.
-----
Если делать пользовательские блоки на все аппаратные возможности, то система разрастется и "порог вхождения" увеличится.
Насколько я понимаю, разработчик FLProg очень щепетильно относится к росту базовых блоков в системе и это наверное правильно.

Gordon0007
Сержант
Сообщения: 138
Зарегистрирован: 19.04.2018{, 13:37}
Репутация: 13
Имя: Павел

Разработки ecoins

#618

Сообщение Gordon0007 » 06.06.2020{, 12:07}

Добрый день, пользователи программы FLProg

Хочу поделиться с вами результатами испытаний БЛОК ВВОДА-ВЫВОДА mcp23017.
Для начала хочу рассказать причины почему обратился за помощью к ecoins, причины просты я сделал прошивку с использованием стандартного блока mcp23017 на ESP32 и контроллер просто стал зависать. Тогда я начал экспериминтировать и искать причины убрал все лишнее и оставил в прошивке только 2 штуки mcp23017 и собрал на макетке, все провода припаял (чтобы исключить дребизг), на сами MCP23017 припаял светодиоды для индикации их работы. Вот исходник который получился
Проверка MCP23017 урезаная.flp
(661 КБ) 65 скачиваний
Зависало по разному:
- дотронулся до проводов - зависло
- подал питание на релюшку - зависло
- сработал дискретный сигнал - зависло
- пошатал контроллер - зависло
- И многое другое необъяснимое
Пытался решить проблему по разному viewtopic.php?f=39&t=6097&sid=c8750cfe0 ... 240#p88326 :
- Игрался с длинной проводов от 25см до 3см - не помогло
- Менял резисты с 10кОм на 4.7кОм..2кОм - помогло, просто стал зависать реже
- Менял источники питания - есть не большой эффект когда работает от батарейки (но на грани самовнушения), ставил конденсатор керамику, электролит и совместно (так и остались висеть параллельно керамика с электролитом)

После того как я намучился и уже почти попустил руки, а мои проблемы с этим модулем не были услышаны разработчиком программы в форуме в ветках "Версия 6.3.х" и "Тестирование версии 7.х". Я начал искать пользовательские блоки на MCP23017 и нашел его тут, сразу скажу (не в обиду ecoins) блок мне был не понятен, пока не было примера его использования, ну и потом дополнилось описание этого блока и слало все понятно.
Проверка MCP23017 урезаная_в03_ESP32_2.flp
(787.09 КБ) 63 скачивания
Я загрузил его без переделок и начал тестить, свою замечания которые у меня были я писал разработчику блока ecoins. Но правил библиотеку и брал на заметку мое мнение на дальнейшие развитие этого блока.

После того как я разобрался и протестировал встроил ПБ в мою прошивку
Проверка MCP23017 урезаная (ecoins).flp
(403.19 КБ) 80 скачиваний
Функционал аналогичен первой только она НЕ ЗАВИСАЕТ СОВСЕМ!

Испытывал по разному и все тесты прошли на 5 балов
- дотронулся до проводов
- подал питание на релюшку
- сработал дискретный сигнал
- пошатал контроллер
- Игрался с длинной проводов от 25см до 3см
- Резисты припаял на обе 4.7кОм (родные были на одной 10кОм на второй 4.7кОм), решил тестить условно на штатных
- Менял источники питания от импульсных до прерывистого питания с конденцаторами, перепробовал разное
- Эмитировано обрыв одного или другого модуля MCP23017 и обоих сразу. (Сразу скажу не ожидал что пройдет этот тест) Тест прошел отлично после того как подключаешь модуль/модули обратно они продолжают работать практически моментально.
В момент обрыва происходит следующее:
- DI (входы) сбрасываюся на "0" как будто их и не нажимали даже если они были нажаты в момент обрыва связи, после востановления связи сигнал моментально приходит на контроллер "Для меня это нормально и устраивает на все 100%"
- DO (выхода) "не знаю как" сохраняют последние поданные на них данные и пока не востановится связи удерживает эти контакты включенными или выключенными, после востановления связи на модуль приходит именно то состояние контактов которое должно быть по программе, если стоит значение "w". Но есть"НО" У меня стоит значение "W" (W -вывод с записью по изменению.Выполняется при инициализации(1 раз) и при каждом изменении значения регистра), что значит если изменение произошли в момент когда был обрыв связи, то у вас будет висеть старое значение пока не обновится значение следующий раз. "Для меня это не подходит буду ставить значение "w""

Выводы:
В целом впечатление положительное главным образом тем что теперь эти модули можно использовать и приступать к этому проекту с новыми знаниями
Положительные:
- Блок удобен в работе
- не зависает
- не тормозит систему
- имеет тех поддержку
Нейтральные:
-В стандартном блоке можно назначить любой выход как DI так и DO, в ПБ это делается только групой по 8 либа "А" либо "В"
Минусы (да простит меня создатель :D ):
- Требуется дополнительно искать библиотеки (да еще последнюю)
- При использование блока не видно какие пины используются для подключения
- нет возможности смены пинов i2c на ESP32
- нужно добавить обновление после востановление обрыва или потери данных (W -вывод с записью по изменению.Выполняется при инициализации(1 раз) и при каждом изменении значения регистра)

Надеюсь мой отзыв будет кому то полезен и ecoins будет дальше развивать свои ПБ.
Ну а от себя хочу добавить еще раз СПАСИБО!

ecoins
Полковник
Сообщения: 2932
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Разработки ecoins

#619

Сообщение ecoins » 06.06.2020{, 14:32}

ecoins ,благодарит за развернутый отзыв.
-----------------------------------------------------
И так получилось (время было) реагируем на замечания и предложения.
Gordon0007 писал(а):
06.06.2020{, 12:07}
В момент обрыва происходит следующее:
- DI (входы) сбрасываюся на "0" как будто их и не нажимали даже если они были нажаты в момент обрыва связи, после востановления связи сигнал моментально приходит на контроллер "Для меня это нормально и устраивает на все 100%"
- DO (выхода) "не знаю как" сохраняют последние поданные на них данные и пока не востановится связи удерживает эти контакты включенными или выключенными, после востановления связи на модуль приходит именно то состояние контактов которое должно быть по программе, если стоит значение "w". Но есть"НО" У меня стоит значение "W" (W -вывод с записью по изменению.Выполняется при инициализации(1 раз) и при каждом изменении значения регистра), что значит если изменение произошли в момент когда был обрыв связи, то у вас будет висеть старое значение пока не обновится значение следующий раз. "Для меня это не подходит буду ставить значение "w""
1.По обновлению выходам исправили - в новых версиях это и другое выполним поаккуратнее.
Новую библиотеку версии 2.4 прикрепляю .
RT_11_HW_MCP23017_2.4.ZIP
(12.93 КБ) 81 скачивание
Вроде должно работать, тщательно эту опцию не проверил (занимался шиной i2c на ESP32), теперь и опция W будет восстанавливать значения. Можно добавить выход "обрыв связи", но избегаем добавлять излишние входы/выходы. При желании можете добавить самостоятельно. Это сигнал "z.ok.link" для пользовательского блока.
Gordon0007 писал(а):
06.06.2020{, 12:07}
нет возможности смены пинов i2c на ESP32
2. Это проблема не блока, а то, как удобнее предусмотреть эту опцию для FLProg - интерфейсы могут использовать для разных блоков и для разных контроллеров разных архитектур(AVR,DUE,ESP8266,ESP32,STM32). Настройка для разных контроллеров разная. Сейчас вроде определились с подходом - проходит испытание.
Для Вас сделали блок - он в примере - можно менять номера пинов и частоту шины. Проверил, работает. В примере стоят уже не стандартные параметры!
Проект с настройкой шины i2c для ESP32Показать
Схема mcp23017_v04_ESP32.png
В проекте добавлена первая плата, на которой стоит однократно выполняющийся блок настройки.
3. При более близком знакомстве с библиотекой Wire.h для ESP32 выяснилось:
- она выглядит гораздо приятнее, чем её предшественники;
- как это сказалось на свойствах и огрехах предшественников? Требуются испытания и время.
- по умолчанию стоит частота 100 кГц. Это мало. Проверили замеры для транзакции чтения со входов mcp23017: 100/400/800 кГц -->630/270/210 мкс.
ecoins рекомендует использовать частоту 400 кГц.
-----------------------------
По поводу побитного управления - в широком смысле считаем эту аппаратную возможность к применению на шине i2c злом. Конкретно на шине ESP32 на частоте 100кГц опрос/запись 16 входов/выходов будет занимать 12 мс, вместо 1.3 мс -- почти в 10 раз медленнее.
------------------------------
По поводу Ваших мучений до использования нашего блока mcp23017 ( и библиотеки). Сами сталкиваемся с похожим при работе на макетках.
Чуть пошевелилось и все, что на i2c из стандартных библиотеках Arduino не работает.
В нашей Детской академии доходило до слез - соберет ребенок что-то на макетке и ...
Все наши библиотеки отфильтровывают случайные сбои и поддерживают "горячую" замену.

Аватара пользователя
olddolin
Сержант
Сообщения: 245
Зарегистрирован: 08.09.2017{, 19:47}
Репутация: 14
Откуда: Тверь
Имя: Вадим

Разработки ecoins

#620

Сообщение olddolin » 06.06.2020{, 16:41}

Подтверждаю все вышесказанное, уже год работает пятиканальный блок управления светом на 8266_07+MCP. Пять входов и шесть выходов, шестой технологический для задержки подачи питания на твердотельные реле в момент перезагрузки. Система постпоена на основе блока ecoins, все супер! Ни ложных срабатываний, ни зависаний.
Электронщик как врач, ему нужно постоянно учиться чтобы соответствовать времени.

Закрыто

Вернуться в «Команда ecoins»