Разработки ecoins

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

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

Разработки ecoins

#781

Сообщение ecoins » 05.11.2020{, 18:26}

RedSky писал(а):
05.11.2020{, 18:05}
Приветствую, ecoins. Обращаюсь (не по теме) как к сведущим в железе, если не трудно напишите как сможете. Имеется ESP32 и стоит задача сохранить в переменную (и желательно в eeprom) набор данных, принятых из uart. Основная проблема, что объем данных больше буфера (до 3000 знаков ascii).
С отправкой таких объемов проблем нет, единственное неудобство приоставка всей программы на время передачи. Но принять получается лишь небольшой фрагмент. Возможно ли решить задачу без управления потоком? В случае использования пк с терминальной программой вместо esp такое работает.
Попробую порассуждать.
Буфер у ESP32 небольшой, скорее всего 64 байта.
Поток данных c UART перехватить можно, сделать это аккуратно чтобы данные не терялись. И записать в массив в ОЗУ это можно char buff[4000].
Но что делать дальше - поставленная задача не ясна: есть ли разделители у данных, какие нужно выделять, а какие сохранять в eeprom?
Всё это требует уточнения.

o615ye161
Сержант
Сообщения: 198
Зарегистрирован: 19.12.2019{, 14:47}
Репутация: 3
Имя: Сергей

Разработки ecoins

#782

Сообщение o615ye161 » 05.11.2020{, 19:04}

ecoins писал(а):
05.11.2020{, 18:20}
Получается, что у Вас UART настроен на 115200 (не проверял).
Рекомендация: уберите с платы диспетчер блок настройки консоли (он расположен род диспетчером).
Ясно,большое спасибо!
ecoins писал(а):
05.11.2020{, 18:20}
P.S.Много времени отняла предыдущая работа - библиотека HTU21.

Скажите пожалуйста где можно будет скачать данный блок?

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

Разработки ecoins

#783

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

o615ye161 писал(а):
05.11.2020{, 19:04}
Скажите пожалуйста где можно будет скачать данный блок?
Не хотел торопиться с выкладыванием новых библиотек - там много новых системных штучек и я пока не оттестировал их на всех контроллерах.
Но вроде проблем не должно быть.
Потому выкладываю библиотеку ПБ - в ней есть и блок HTU21:
БИБЛИОТЕКА BASE_v02.4_6.3.1_051120.zip
(942.15 КБ) 104 скачивания
и архив с библиотеками ecoins - в ней есть библиотека HTU21, она автономная (другие библиотеки не требует:
RT_HW_LIB_118_051120_alfa_minus.zip
(213.56 КБ) 100 скачиваний
----
Успехов.

o615ye161
Сержант
Сообщения: 198
Зарегистрирован: 19.12.2019{, 14:47}
Репутация: 3
Имя: Сергей

Разработки ecoins

#784

Сообщение o615ye161 » 05.11.2020{, 20:12}

ecoins писал(а):
05.11.2020{, 19:32}
Потому выкладываю библиотеку ПБ - в ней есть и блок HTU21:
Добавил блок в свой проект, буду тестировать, при отключении датчика от шины I2C(тест на обрыв датчика) показания температуры 20.1, влажность 90.2, так и должно быть? были 22,7 и 55,8 соответственно.При повторном подключении все восстановилось.

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

Разработки ecoins

#785

Сообщение ecoins » 05.11.2020{, 20:49}

o615ye161 писал(а):
05.11.2020{, 20:12}
Добавил блок в свой проект, буду тестировать, при отключении датчика от шины I2C(тест на обрыв датчика) показания температуры 20.1, влажность 90.2, так и должно быть? были 22,7 и 55,8 соответственно.При повторном подключении все восстановилось.
Эти параметры по умолчанию сделаны. Если ошибка (связь, ошибка КС), то взводится флаг ошибки и устанавливаются параметры по умолчанию.
Обратите внимание, что параметры сохраняются некоторое время, на случай если ошибка пропадет.

Аватара пользователя
RedSky
Лейтенант
Сообщения: 574
Зарегистрирован: 19.12.2016{, 20:07}
Репутация: 72
Откуда: Днепропетровск
Имя: Алексей

Разработки ecoins

#786

Сообщение RedSky » 05.11.2020{, 22:03}

ecoins писал(а):
05.11.2020{, 18:02}
Всё это требует уточнения.
Спасибо насчёт идеи с разделением.
Действительно, разделители есть, это символ перевода строки, одна строка как раз должна уместится в буфер.
Данные представляют собой текстовый файл что то типа
СпойлерПоказать
%3
N1 R05-244.5 M10
N2 R05 R00 M10
N3 G00 G53 G90 X750 Z600
N4 G59 X160 Z-20
N5 T101
N6 G04 X.2
N7 S R02 M03
N9 G00 X115 R05 Z92
N10 G01 X85 R05 Z110 F.7 M08
N11 X78 R05 T112
N12 X58 R05 Z100
N13 G00 Z120 M09
N14 G00 G53 G90 X750 Z600 T100 M19
N15 G04 X3
N16 @31
N17 M15
N18 M02
Это нужно чтобы перенести программу обработки с одного станка на другой.

o615ye161
Сержант
Сообщения: 198
Зарегистрирован: 19.12.2019{, 14:47}
Репутация: 3
Имя: Сергей

Разработки ecoins

#787

Сообщение o615ye161 » 06.11.2020{, 08:49}

ecoins писал(а):
05.11.2020{, 20:49}
Обратите внимание, что параметры сохраняются некоторое время, на случай если ошибка пропадет.
Замечательно!

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

Разработки ecoins

#788

Сообщение ecoins » 07.11.2020{, 18:57}

Сообщение для тех кому интересна тема "Дисплей Nextion:
1.Вышла версия Nextion Editor 1.6.12. По сравнению с предыдущей версией (0.53) у нее есть важные дополнительные возможности. Поэтому библиотека и блоки разрабатываются под новый редактор.
2.После поиска и исследований выбран следующий протокол обмена:
2.1. Из контроллера в дисплей (NXT) в текстовой форме: va0.val=0x12FA45DE, или va1.val=5 --> Запись in32t_t в NXT (без контроля достоверности). В NXT должны быть зарезервированы переменные va0,va1...и так с запасом, скажем до 32 (размер памяти позволяет). Если передается не существующая переменная, то запись игнорируется.
2.2. Из дисплея в контроллер упрощенное подобие ModBus ASCII:
1-байт - идентификатор начала посылки =':'
2-байт - тип посылки =1 передача байт; =2 передача uint16_t; =3 передача uint32_t;
3-байт - кол-во данных
.... передаваемые данные
n-байт - контрольная сумма
n+1 13 10 (коды завершения посылки).
В блоке FLProg должны будут зарезервированы необходимые буфера. Если данных больше чем буфер, то лишние данные отбрасываются.
Разработанный протокол - компромисс между скоростью и надежностью обмена, а также простотой реализации (в NXT большие программы писать не очень удобно).
-----
3. Дисплей посылает данные в контроллер каждые 100мс, если данные изменились или каждые 2 сек для поддержания активного обмена.
Контроллер работает аналогично.
Устройства не ожидают подтверждения об отправленных посылок и потому обмен быстрый.
Прием и передача (RX,TX) независимы.
--------------------
Дисплей с большими возможностями, но имеющиеся программные продукты прямолинейны и тормозные.
Предлагаемая разработчиками библиотека ITEADLIB_Arduino_Nextion_master не используется (она избыточная, "тормозная" и т.п.)
--------------------
Если есть какой-то опыт использования дисплея NXT, идеи по организации обмена - пишите.
Если есть вопросы по работе NXT - задавайте, ответим.
--------------------
Успехов.

o615ye161
Сержант
Сообщения: 198
Зарегистрирован: 19.12.2019{, 14:47}
Репутация: 3
Имя: Сергей

Разработки ecoins

#789

Сообщение o615ye161 » 12.11.2020{, 20:35}

Добрый вечер ecoins, я исправил ваши замечания по проекту и немного его еще дополнил могли бы вы еще раз на него взглянуть? Может что то еще посоветуете как оптимизировать проект, очень полезно будет мнение профессионала!
Вложения
MegamostCloudBT.zip
(349.75 КБ) 62 скачивания

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

Разработки ecoins

#790

Сообщение ecoins » 13.11.2020{, 13:03}

o615ye161 писал(а):
12.11.2020{, 20:35}
Добрый вечер ecoins, я исправил ваши замечания по проекту и немного его еще дополнил могли бы вы еще раз на него взглянуть? Может что то еще посоветуете как оптимизировать проект, очень полезно будет мнение профессионала!
Посмотрел Ваш проект. В целом нормально. Есть небольшие замечания:
1.Рекомендую создавать первую плату, которая через условие выполняется один для инициализации параметров. Назовем её "ИНИЦИАЛИЗАЦИЯ".
2.У Вас на второй плате к выводам структуры привязываются контакты со своими именами. Очень полезная конструкция, в том числе и потому, что в отличии от строгих требованиях к именам параметрам структур, имена контактов могут быть любыми - текст на русском, пробелы, точки и т.п.
При этом полезно понимать, что такая конструкция не вызывает выполнение каких-то процессорных команд - это всего-лишь дополнительная привязка имен контактов к уже имеющимся переменным (в описываемом примере это делается при первом объявлении структуры).
Рекомендую:
2.1. Все используемые в проекте структуры определять в плате "ИНИЦИАЛИЗАЦИЯ" и к выходам этих структур сразу привязать контакты с удобными именами.
2.2. В проекте, когда требуется присвоить значение элементам структуры, устанавливать блок структуры, который уже определен в плате "ИНИЦИАЛИЗАЦИЯ".
Такой подход улучшает читаемость проекта и защищает от целого ряда неприятностей при проектировании.
3.На плате 20,21,22,23 у Вас 4-е блока ds1820, подключенные к разным пинам. Эти платы можно свести на одну плату, времена опроса блоков сделать немного отличающимися и некратными периоду вызова плат, например 1005,1074,1185,1296. Проект получиться компактнее. Такая плата может вызываться и как свободная, оперативная и быстрая. Рекомендую как "быстрая"
4. На плате 13 идет присвоение параметров структуры по сенсору, подключенном удаленно через UART. Выделять это в отдельную плату совершенно излишне - следует объединить платой 4, где читаются данные из UART.
5. На плате 5 возможно не будет как задумано работать блок "Buzzer" (возможно не прав);
------
Успехов.

o615ye161
Сержант
Сообщения: 198
Зарегистрирован: 19.12.2019{, 14:47}
Репутация: 3
Имя: Сергей

Разработки ecoins

#791

Сообщение o615ye161 » 13.11.2020{, 16:19}

ecoins писал(а):
13.11.2020{, 13:03}
5. На плате 5 возможно не будет как задумано работать блок "Buzzer" (возможно не прав);
------
Успехов.
Тональность работает и при включении и отключении выходов.
Благодарю за разъяснения!

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

Разработки ecoins

#792

Сообщение ecoins » 13.11.2020{, 18:21}

GDAN7777 писал(а):
13.11.2020{, 16:10}
Как сейчас обстоят дела с памятью более 64 Кбайт?Было ли найдено какое-нибудь решение?
Эта тема неоднократно подымалась на просторах инета - именно проблема с mega2560 ошибка с адресацией в самых неожиданных комбинациях. В какой-то момент казалось, что проблемы в SPI, об этом тоже писалось.
Вроде бы нам удалось идентифицировать проблему - это оказался оператор switch(){}.
У самого оператора switch остаются свои проблемы и в C++ пока они полностью не разрешены.
Теперь конкретно о проблеме.
Компилятор при создании кода может генерить адреса трех типов:
1.Длинный адрес >64кБ(18 разрядов);
2.Обычный адрес <64кБ(16 разрядов);
3.Короткий адрес в составе основной команды.
Именно с последней адресацией компилятор делает ошибки, если в операторе switch много переходов, а содержание каждого этапа значительно по объему.
Можно было бы попробовать с опциями компилятора для C++ (gnu++11) для работы с mega2560, но у нас это не получилось
и мы выбрали более симпатичный путь - в наших библиотеках вообще не используется оператор switch() и на практике наблюдаем, что проблема больше никак себя не проявляет.

JonyBest
Сержант
Сообщения: 269
Зарегистрирован: 18.11.2015{, 22:42}
Репутация: 89
Откуда: Близко к Ставрополю
Имя: Евгений

Разработки ecoins

#793

Сообщение JonyBest » 22.11.2020{, 00:09}

Доброго времени суток!
Мучаю довольно объемный проект на ESP32. Всё устраивает, но происходят периодические отвалы от WIFI. Почитал форумы, пишут что это может происходить из за того что процессор занят в момент работы с WIFI. Есть желание с помощью блока "ПЛАНИРОВАНИЕ ЗАДАЧ" оптимизировать программу. Подскажите в какую секцию лучше поставить на прием и на передачу MQTT?

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

Разработки ecoins

#794

Сообщение ecoins » 22.11.2020{, 03:37}

JonyBest писал(а):
22.11.2020{, 00:09}
Доброго времени суток!
Мучаю довольно объемный проект на ESP32. Всё устраивает, но происходят периодические отвалы от WIFI. Почитал форумы, пишут что это может происходить из за того что процессор занят в момент работы с WIFI. Есть желание с помощью блока "ПЛАНИРОВАНИЕ ЗАДАЧ" оптимизировать программу. Подскажите в какую секцию лучше поставить на прием и на передачу MQTT?
1.Если короткий ответ - это "быстрая" или даже "медленная" задача для диспетчера. Но это вряд ли поможет.
2.Если более подробно - предположу, что проблема в длительности самого цикла loop(). Это обычно происходит из-за отсутствия (или не удачного) планирования выполнения плат (задач), в которых используются "тормозящие" библиотеки Arduino. Библиотеки Arduino для сенсоров и внешних устройств в большинстве являются такими.
Мне пришлось знакомиться с одним из проектов(о нем был ролик на форуме в теме "Применение KaScada"). Там у разработчика возникали аналогичные проблему с протоколом Modbus - планшет долго не получал ответ от контроллера. Оказалось, что в одном цикле выполнялся опрос более 40 сенсоров MAX6675.
Казалось бы, сенсор подключается через быстрый интерфейс SPI, в чем может быть подвох? Выяснилось, что штатная библиотека содержит внутренний felay(250) - для 40-ка датчиков это более 10 сек!!! задержки и соответственно общее "торможение" проекта.
3.В Arduino и соответственно в FLProg есть несколько стандартных устройств (блоков) с такими проблемами -MAX6675,MCP23017,PCA9658,HTU21,BME280,DHT22,DS1820,HC-SR04,LCD HD44780 через i2c. Если возникают подобные Вашим критические проблемы, то лучше использовать другие блоки.
4. В Вашем объемном проекте может быть "букет" тормозящих плат, блоков. Это можно поисследовать с применением логического анализатора, наблюдая на одном из пинов цикл loop(blink=!blink; digialWrite(pin,blink);).
5.Можете прислать проект (ecoins@mail.ru) - попробуем посмотреть. Сейчас со временем нехватка - ведем несколько тем (Nextion,STM32F401,STM32F411,STM32F407(работает в FLProg!!!), некоторые системные наработки и пр.), но в общем сможем дать какие-то предложения.

JonyBest
Сержант
Сообщения: 269
Зарегистрирован: 18.11.2015{, 22:42}
Репутация: 89
Откуда: Близко к Ставрополю
Имя: Евгений

Разработки ecoins

#795

Сообщение JonyBest » 22.11.2020{, 14:26}

ecoins писал(а): Потому выкладываю библиотеку ПБ - в ней есть и блок HTU21:
Спасибо за Ваши оперативные ответы! Можно уточнить в последней версии блок BME280 в поле адрес что писать? В описании об этом ни слова... В примере у вас значение 118 - это что? Адрес по умолчанию 0х76

Аватара пользователя
Nikan
Майор
Сообщения: 1194
Зарегистрирован: 29.12.2016{, 00:49}
Репутация: 100
Откуда: москва

Разработки ecoins

#796

Сообщение Nikan » 22.11.2020{, 15:07}

JonyBest писал(а):
22.11.2020{, 14:26}
Адрес по умолчанию 0х76
a HEX в десятичную сложно перевести?

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

Разработки ecoins

#797

Сообщение ecoins » 22.11.2020{, 17:22}

JonyBest писал(а):
22.11.2020{, 14:26}
Спасибо за Ваши оперативные ответы! Можно уточнить в последней версии блок BME280 в поле адрес что писать? В описании об этом ни слова... В примере у вас значение 118 - это что? Адрес по умолчанию 0х76
Это 118=0x76.
В FLProg нет опции задачи переменных в HEX-формате.
Можно было бы задавать адрес и по но меру устройства, но абсолютный адрес проще идентифицировать при сканировании шины i2c.
Встроенный блок сканирования шины i2c возвращает HEX-адрес\DEC-адрес.
Успехов.

o615ye161
Сержант
Сообщения: 198
Зарегистрирован: 19.12.2019{, 14:47}
Репутация: 3
Имя: Сергей

Разработки ecoins

#798

Сообщение o615ye161 » 23.11.2020{, 19:42}

Здравствуйте, ecoins могли бы вы пояснить если вам не трудно как работает ваш болк MCP23017 как назначать выходы и входы и если этих микросхем используется 2шт на 0 и 1 адресе Flprog

Отправлено спустя 3 минуты 11 секунд:
на первой микрухе MCP23017 все выходы используются как выход, на второй выход и вход

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

Разработки ecoins

#799

Сообщение ecoins » 24.11.2020{, 03:24}

o615ye161 писал(а):
23.11.2020{, 19:45}
на первой микрухе MCP23017 все выходы используются как выход, на второй выход и вход
В Вашем случае параметры устанавливаются следующим образом:
1. Для первой MCP23017 ->РЕЖИМ РЕГИСТРА A=W; РЕЖИМ РЕГИСТРА B=W; На входы A и B ПБ подаются значения, которые при изменении будут записаны в ЧИП и соответственно изменят состояния выходов A и B на MCP23017.
2. Для второй MCP23017 ->РЕЖИМ РЕГИСТРА A=W; РЕЖИМ РЕГИСТРА B=R; На входы A подаётся значение, которые при изменении будут записаны в ЧИП и соответственно изменят состояния выходов A MCP23017.
На выходе inB ПБ будет байт, биты которого соответствуют значениям на входах B MCP23017. Обновление значений осуществляются с периодичностью ПЕРИОД ОБНОВЛЕНИЯ В ТИКАХ 10мс.
------
Параметры пользователя выглядят несколько неуклюже, но со временем в новом редакторе ПБ (FLProg вер.7)блок будет сделан поудобнее.

superpuper2014
Рядовой
Сообщения: 22
Зарегистрирован: 17.01.2019{, 09:31}
Репутация: 0
Имя: Alex

Разработки ecoins

#800

Сообщение superpuper2014 » 24.11.2020{, 09:42}

Следует ли ожидать от разработчиков включения в список контроллеров контроллеры СТМ, какие либо ответы будут по этому, очень хочется увидеть поддержку их в программе

Закрыто

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