ВРЕМЯ ЦИКЛА или что убивает ваш проект.

Аватара пользователя
Dryundel
Подполковник
Сообщения: 1343
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 420
Откуда: Ярославль
Имя: Андрей
Контактная информация:

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

#1

Сообщение Dryundel » 14.09.2021{, 17:22}

Данная статья посвящена в основном новичкам.
Не все примеры, с точки зрения программирования, являются корректными.
Однако я постараюсь показать проблему с точки зрения новичка.
Понимание происходящего в микроконтроллере очень важный момент.
.
В самом начале, как только очередной самоделкин открывает для себя мир микроконтроллеров, в его мозгу разрывается бомба.
- "А что, так можно было!?"
- "Круто!"
- "Это же можно сделать все что угодно!"
Пусть в меня бросит камень тот, у кого это было не так. :)
.
Проблемы начинаются практически сразу, как только вместо мигающих светодиодов к МК подключаются всевозможные датчики и исполнительные механизмы. Вдруг оказывается что МК не резиновый, капризный, да еще почему то и тормозной. Вот в этот момент и приходит понимание, что можно многое, но не все.
.
Одним из камней преткновения является время цикла. Чем больше скетч тем больше времени занимает цикл - первый вывод самоделкина. Конечно это утверждение не совсем верное, но доля правды в нем есть. Однако основным фактором тормозов является качество кода скетча и используемых библиотек.
.
Ярким примером этого является библиотека LiquidCrystal и LiquidCrystal-I2C. Это та самая библиотека без которой не обходится проект с применением LCD дисплея на чипе HD44780. Конечно у пользователей FLProg есть альтернатива в данном случае. Ну например использовать наработки ecoins. Однако мучить себя изучением сего монументального труда, не каждый может себе позволить. Сама библиотека в целом не плоха, но есть в ней некоторые функции которых следует остерегаться и по возможности избегать да и применение в ней команды delay отрицательно сказывается на результат. Вот к примеру в ПБ LCD_V2.18 исключены некоторые отрицательные моменты и скорость обработки его кода увеличилась на порядки. Конечно же речь идет о простом его применении, без русификации и доп. наворотов.
.
Мысль о написании данной статьи пришла ко мне во время тестирования ПБ Энкодер Pro.
Суть в том, что у данного блока есть два типа выходов. Первый это числовой выход Count, на который выводится информация о количестве совершенных энкодером шагов и второй тип это логические выходы Up и Down, на которых отрабатываются импульсы согласно тех же совершенных энкодером шагов. Так вот если с первым типом все ОК, то второй напрямую зависит от времени цикла выполняемой программы. Один импульс может быть совершен минимум за два цикла, т.е. в одном цикле на выходе блока "1" на следующем "0" и т.д. Соответственно если вы умудрились сделать цикл в 250мс, что не предел для новичка, то импульсы будут совершаться два раза в секунду (250х2), а это ну совсем не гут.
.
Рассмотрим пример с тестовым скетчем для ПБ Энкодер Pro.
.
Вариант 1 (используется штатный блок дисплея)Показать
Энкодер + Штатный дисплей.jpg
ESP32 Штатный дисплей.rar
.
Вариант 2 (используется блок дисплея LCD_V2.18)Показать
Энкодер + LCD 2.18.jpg
ESP32 LCD2.18.rar
.

Желающие могут самостоятельно протестировать проекты. Потребуется дисплей на 4 строки, 4 кнопки, энкодер, ну и конечно же какой нибудь МК (AVR или ESP32). Не забудьте изменить пины, если у вас не ESP32. Как говорится - Доверяй, но проверяй. :)
.
При работе со штатным блоком дисплея, отчетливо видна задержка вывода данных со счетчика который подсчитывает количество импульсов.
Данные со входа Count выводятся моментально, т.к. приходят на блок дисплея сразу с блока энкодера. А вот импульсы с выходов Up и Down считаются счетчиком и только после этого попадают на дисплей.
При работе с блоком дисплея LCD_2.18 такая задержка почти не видна.

В связи с этим крайне не рекомендую использовать штатный блок дисплея, если у вас на дисплей выводится одновременно много данных.

.
Для скачивания вложений Вы должны быть зарегистрированы.
Последний раз редактировалось Dryundel 22.09.2021{, 16:27}, всего редактировалось 10 раз.
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

Аватара пользователя
Dryundel
Подполковник
Сообщения: 1343
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 420
Откуда: Ярославль
Имя: Андрей
Контактная информация:

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

#2

Сообщение Dryundel » 14.09.2021{, 17:23}

Продолжаем разговор...
.
Итак мы заметили что контроллер начал тормозить. Причину вроде выявили. Но как убедиться в этом? Как узнать сколько времени выполняется цикл нашей программы? Ведь доказательств того, что во всем виноват штатный блок LCD дисплея нет.
К сожалению в программе FLProg нет инструментов для отладки проектов. Не беда, ща забацаем! :)
.
Задача: Выяснить длительность цикла штатными, ну или не совсем штатными средствами.
Логически рассуждая, приходим к выводу, что усредненная длительность цикла равна времени выполнения поделенному на количество циклов за это время. И если мы сможем посчитать количество циклов за одну секунду, то и среднюю длительность одного цикла вычислить не проблема.
В C++ есть функция millis(). Эта функция возвращает время которое проработал контроллер с момента запуска.
В контроллере есть независимый от процессора счетчик этого времени. Грубо говоря это отдельная железяка которая процессору не подчиняется, а наоборот, процессор ходит к ней иногда на поклон, спросить сколько времени. Значит это то, что нам нужно!
Создаем элементарный пользовательский блок с одним выходом "ms" и таким вот смешным кодом:

Код: Выделить всё

	ms = millis();
ВсЁ, теперь в любой момент нам доступно время прошедшее со старта контроллера в миллисекундах.
Осталось определиться с точкой отсчета и финишем измерения. Логично было бы мереть с момента старта, однако пока процессор доберется до нашего цикла, а это секция Loop (петля), он проведет ряд процедур - загрузит ядро, пробежится по секциям Declare, Setup и только после этого доберется до нашего цикла. А независимому счетчику времени все равно - питание подано, отсчет начат. Значит и стартовое время нам надо взять с начала первого цикла.
ОК, так и сделаем.
Вставим свеженький блок Millis в первую плату проекта, добавим ТТ триггер который даст всего один импульс при старте и запишем время старта в переменную Start.
Start.jpg
Теперь для отсчета одной секунды прибавим к стартовому времени 1000 мс и в каждом цикле будем сравнивать эту сумму с текущим временем. Как только millis() превысит данное значение, поднимем флаг "Прошла одна секунда".
1секунда.jpg
Далее создадим еще две платы и прикажем им работать по условию
1. Если флаг опущен, то считаем циклы, прибавляя каждый цикл единицу к переменной "Количество циклов".
2. Если флаг поднят, то выводим "Количество циклов" на дисплей.
Так как во время подсчетов циклов плата с дисплеем отключена, то данный блок дисплея в цикле участвовать не будет и не помешает.
Подсчет и вывод.jpg
Вот и вся задачка.
Заливаем проект в контроллер и смотрим на дисплей.
Пустой цикл.jpg
.
Вау! Круто! За первую секунду работы в нашем контроллере произошло 377056 циклов нашей программы! Это же огромная скорость!
Настало время проверить на вшивость штатный блок LCD дисплея.
Добавляем его на плату которая всегда в работе, снова заливаем проект в контроллер и ждем чуда.
Тест1Показать
Тест1.jpg
Цикл 1 дисплей.jpg
.
:shok: Чуда не произошло. Точней оно произошло, но совсем не то чего хотелось бы.
Вместо 377056 циклов мы теперь имеем всего 86 циклов за одну первую секунду работы! И это всего один блок дисплея в вашем проекте.
Штатный дисплей.rar
Пробуйте, тестируйте...
.
Для скачивания вложений Вы должны быть зарегистрированы.
Последний раз редактировалось Dryundel 15.09.2021{, 14:23}, всего редактировалось 5 раз.
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

Аватара пользователя
Dryundel
Подполковник
Сообщения: 1343
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 420
Откуда: Ярославль
Имя: Андрей
Контактная информация:

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

#3

Сообщение Dryundel » 15.09.2021{, 11:01}

Теперь на очереди альтернативный блок дисплея LCD V2.18
Тот же самый проект с альтернативным блоком, заливаем в контроллер, для справедливости отключаем руссификацию, смотрим на дисплей и что мы видим...
Цикл LCD 2.18.jpg
.
84522 цикла за одну секунду. Как вы считаете, есть разница?
LCD 2.18.rar
Тестируйте, сравнивайте...
.
И хотя данный метод является не вполне корректным, представление об общей картине он дает.
Задумались?
.
Если задумались, это уже хорошо. :)
Попробуем рассмотреть проблему длительности цикла с другой стороны.
На самом деле LCD 2.18 работает лучше не из-за того что он такой быстрый. Скорость выполнения его кода даже чуть ниже чем у штатного блока дисплея.
.
Реальное сравнение вывода информации:
DISP - примерно 5мс
LCD 2.18 - примерно 6 мс
.
Так в чем же фишка? А все дело в том, что штатный блок из цикла в цикл выводит информацию на дисплей. Т.е. берет данные со входа и пишет заново и это каждый цикл, независимо от того изменилась информация на входе или нет.
Еще по причине того, что стирается вся информация, любое изменение на дисплее приводит к его мерцанию. Попробуйте например вывести показания часов с мигающим двоеточием или мигающий символ для навигации по меню. Получите весьма неприглядную картинку.
.
В LCD 2.18 алгоритм немного другой. Если на входе не произошло изменение данных с предыдущего цикла, то блок "тихо курит в сторонке" пропускает выполнение своего кода и ничего не переписывает. Он не будет мешать выполнению другого кода хоть миллион циклов если информация остается неизменной. Кроме того стирание всего дисплея не происходит никогда. Стирается и перезаписывается только та информация (строчка, символ) которая изменилась. Поэтому мигание любым символом не приводит к мерцанию всего дисплея как это происходит в случае со штатным блоком.
.
Но не только блоки дисплея могут сильно увеличивать цикл и тормозить всю программу. Медленными являются к примеру датчики температуры, влажности и прочего, работающие по шине I2C. Программный порт UART тоже не отличается спринтерским быстродействием. Да много чего может добавлять к времени цикла изрядный кусок. Поэтому крайне нежелательно заставлять работать такие устройства в каждом цикле. Многие блоки в том числе и пользовательские имеют на борту настройку типа "Выполнять каждые N миллисекунд" или "Выполнять по фронту на входе N". К сожалению штатный блок дисплея такой функции лишен. Но это не означает что ее нельзя добавить штатными (или не штатными) средствами.
.
Мы не будем путать теплое с мягким, как говорит великий Sancho.
Мы это мягкое и теплое соединим и получим... (Нет, не женскую сиську)
Получим вполне пригодный проект со штатным блоком LCD дисплея.
.
Как вариант, для оптимизации работы, можно воспользоваться штатным генератором.
Возьмем для примера плохо работающий проект из первого поста с блоком EncPro и штатным блоком дисплея, тот, что запечатлен на видео.
Слегка подправив этот проект, путем добавления генератора и платы работающей по условию на которую мы поместим все блоки штатного дисплея.
Пример: Штатный дисплей плюс генераторПоказать
Штатный дисплей плюс генератор.jpg
ESP32 Штатный дисплей плюс генератор.rar
Вариант данного проекта был любезно предоставлен rw6cm.
.
Запустив этот проект, увидим что он работает почти так же как и вариант с LCD 2.18.
В чем же чудодейственная сила генератора и какой принцип?
Все очень просто, мы заставили штатный блок делать перекуры и выходить на работу каждые 100 мс.
Обратите внимание на настройки генератора.
Настройки генератораПоказать
Настройки генератора.jpg
Длительность импульса измеряется микросекундами, в то время как пауза выставлена в миллисекундах.
Теперь каждые 100мс, плате на которой все блоки дисплея разрешается работать коротенький промежуток времени в 100 микросекунд.
Вероятно у кого то возникнет вопрос - "Как же выполнение кода блоков которое занимает десятки миллисекунд, сможет уложиться в 100 мкс?"
Важно понимать: в данном случае это не жесткие тайминги и пока код который на плате не выполниться "Дверца не закроется" и все что на плате, обязательно выполнится.
.
Необходимо так же помнить что при работе с платами, выполняющимися по условию, требуется соблюдать аккуратность. К примеру клемма, имеющая направление ИЗ такой платы может сыграть злую шутку.
.
Рассмотрим вариант борьбы с длительностью цикла и тесты от ecoins
.
Для упрощения в тесте три небольших автономных (не требует доп.библиотек) ПБ.
Испытывался на Nano.
Тест выполняет следующие действия:
1.В позиции 1.1 каждые 200 мс мерцает символ "Звездочка".
2.Каждую секунду с позиции 1.3 выводится кол-во циклов loop() в 1сек.
3.В позицию 2.1 выводится значение с аналогово пина.
EIS_Period_loop.flp
Время цикла.png
РезультатыПоказать
Результаты.jpg
И это все лишь при трех (двух) блоках DISP.
-----------------
Вывод: управление выводом плат важно.
При повышении сложности проекта это становиться просто необходимо.
============
Предложение ecoins: Сформулировать необходимость продвижения в FLProg культуры проектирования с планированием вызова задач, и в первую очередь по времени.
.
Как видим выбор вариантов существует. Каким пользоваться решать только вам. Одно можно сказать наверняка - любой рабочий проект требует оптимизации алгоритмов работы. В противном случае не всегда обоснованное разочарование от тех или иных блоков неизбежно. А проект может быть убит еще на стадии разработки.
.

.
БОНУС
.
Для тех, кто дочитал статью до конца - маленький бонус.
Набор блоков ОТЛАДКА
Для скачивания вложений Вы должны быть зарегистрированы.
Последний раз редактировалось Dryundel 22.09.2021{, 16:30}, всего редактировалось 8 раз.
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

Аватара пользователя
Dryundel
Подполковник
Сообщения: 1343
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 420
Откуда: Ярославль
Имя: Андрей
Контактная информация:

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

#4

Сообщение Dryundel » 15.09.2021{, 13:14}

РАЗБОР ПОЛЁТОВ

Здесь можно посмотреть самые интересные моменты данной темы.

- Сравнительный углубленный анализ работы блоков DISP и LCD+2.18 от rw6cm Пост#20

- Не спешите отказываться от штатного блока DISP. Научитесь правильно с ним работать. от rw6cm Пост #28

- Пример борьбы с тормозами и рекомендации от ecoins Пост #84

- Реанимация тормозного проекта. Урок от Sancho. Пост #108
Последний раз редактировалось Dryundel 22.09.2021{, 14:38}, всего редактировалось 5 раз.
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

Аватара пользователя
Sancho
Полковник
Сообщения: 3855
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 537
Откуда: Ярославль.
Имя: Александр
Контактная информация:

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

#5

Сообщение Sancho » 15.09.2021{, 13:34}

Dryundel писал(а):
15.09.2021{, 13:14}
Как и обещал, добавил видео теста работы штатного и альтернативного блоков LCD дисплея.
А можно скрин вот такого варианта
LCD 2.18_01.rar
?
Для скачивания вложений Вы должны быть зарегистрированы.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Аватара пользователя
ingener
Лейтенант
Сообщения: 522
Зарегистрирован: 14.10.2018{, 00:26}
Репутация: 15
Имя: Андрей

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

#6

Сообщение ingener » 15.09.2021{, 13:42}

Попробовал загрузить в Нано с дисплеем 2х16 (просто было под рукой)
Для штатных блоков
Для скачивания вложений Вы должны быть зарегистрированы.

Аватара пользователя
Dryundel
Подполковник
Сообщения: 1343
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 420
Откуда: Ярославль
Имя: Андрей
Контактная информация:

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

#7

Сообщение Dryundel » 15.09.2021{, 13:45}

Sancho писал(а):
15.09.2021{, 13:34}
А можно скрин вот такого варианта
Дык он точно такой же как и Тест1, за исключением блока дисплея. :)
.
скрин Тест2Показать
Тест2.jpg
Для скачивания вложений Вы должны быть зарегистрированы.
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

Аватара пользователя
ingener
Лейтенант
Сообщения: 522
Зарегистрирован: 14.10.2018{, 00:26}
Репутация: 15
Имя: Андрей

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

#8

Сообщение ingener » 15.09.2021{, 13:48}

а вот тоже нано с альтернативным блоком
(PS - для справедливости сравнения удалил потом лишние блоки (медвед адиос) из проекта со штатными, стало 95)
Для скачивания вложений Вы должны быть зарегистрированы.

Аватара пользователя
Sancho
Полковник
Сообщения: 3855
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 537
Откуда: Ярославль.
Имя: Александр
Контактная информация:

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

#9

Сообщение Sancho » 15.09.2021{, 14:02}

Dryundel писал(а):
15.09.2021{, 13:45}
Дык он точно такой же как и Тест1, за исключением блока дисплея.
Нет.
СпойлерПоказать
2021-09-15_14-01-42.png
Отправлено спустя 9 минут 43 секунды:
Чего, не заливается, или результаты не фонтан?

Отправлено спустя 43 секунды:
Не фонтан.
Потому что
Для скачивания вложений Вы должны быть зарегистрированы.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Аватара пользователя
Dryundel
Подполковник
Сообщения: 1343
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 420
Откуда: Ярославль
Имя: Андрей
Контактная информация:

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

#10

Сообщение Dryundel » 15.09.2021{, 14:16}

Sancho писал(а):
15.09.2021{, 14:13}
Dryundel писал(а):
15.09.2021{, 13:45}
Дык он точно такой же как и Тест1, за исключением блока дисплея.
Нет.
СпойлерПоказать
2021-09-15_14-01-42.png
Отправлено спустя 9 минут 43 секунды:
Чего, не заливается, или результаты не фонтан?

Отправлено спустя 43 секунды:
Не фонтан.
Потому что
Что нет?
Сказал нет - полезай в бутылку! :D
Sancho, ты пьяный уже что ли? Что за обрывки фраз? :smile171:
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

Аватара пользователя
Sancho
Полковник
Сообщения: 3855
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 537
Откуда: Ярославль.
Имя: Александр
Контактная информация:

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

#11

Сообщение Sancho » 15.09.2021{, 15:11}

Я не пью. Совсем. Это первое.
Попросил сделать тест, выложил проект - ответа нет. Это второе.
Я сам знаю, что мне делать. Это третье.

Отправлено спустя 1 минуту 5 секунд:
слово "что" - это ссылка.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Аватара пользователя
Dryundel
Подполковник
Сообщения: 1343
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 420
Откуда: Ярославль
Имя: Андрей
Контактная информация:

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

#12

Сообщение Dryundel » 15.09.2021{, 15:30}

Sancho писал(а):
15.09.2021{, 15:12}
Я не пью. Совсем. Это первое.
И давно? :D Сочувствую.
Sancho писал(а):
15.09.2021{, 15:12}
Попросил сделать тест, выложил проект - ответа нет. Это второе.
Так бы сразу и сказал. Я ж циферку добавленную не заметил. Зрение как то с годиками не улучшается. :)
Вот:
Sancho Test.jpg
.
Sancho писал(а):
15.09.2021{, 15:12}
Я сам знаю, что мне делать. Это третье.
Это ты о чем? Помощь нужна? Не вопрос, говори.
Для скачивания вложений Вы должны быть зарегистрированы.
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

Аватара пользователя
Sancho
Полковник
Сообщения: 3855
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 537
Откуда: Ярославль.
Имя: Александр
Контактная информация:

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

#13

Сообщение Sancho » 15.09.2021{, 15:36}

Dryundel писал(а):
14.09.2021{, 17:22}
и скорость обработки его кода увеличилась на порядки
Где порядки?

Отправлено спустя 4 минуты 13 секунд:
Всё, что тормозит цикл - работа шины I2C и специфика протокола обмена драйвера дисплея.
Сам принцип передачи информации.
Ссылка на альтернативу viewtopic.php?f=112&t=4801
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Аватара пользователя
Dryundel
Подполковник
Сообщения: 1343
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 420
Откуда: Ярославль
Имя: Андрей
Контактная информация:

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

#14

Сообщение Dryundel » 15.09.2021{, 15:42}

Sancho писал(а):
15.09.2021{, 15:36}
Где порядки?
86 циклов и 84522 циклов за секунду это как бы 3 порядка.
И потом не забывай:
Dryundel писал(а):
15.09.2021{, 11:01}
И хотя данный метод является не вполне корректным, представление об общей картине он дает.
Отправлено спустя 1 минуту 49 секунд:
Sancho писал(а):
15.09.2021{, 15:40}
Всё, что тормозит цикл - работа шины I2C и специфика протокола обмена драйвера дисплея.
Сам принцип передачи информации.
При чем здесь (в этой теме) данные инсинуации?
В сравнительных тестах все, кроме блока дисплея идентично.

Отправлено спустя 9 минут 19 секунд:
Sancho,
lcd 1602 на сдвиговом регистре 74hc164 замена i2c
Это конечно хорошо. Это круто. Но где ж простому обывателю, у которого нет крутого осциллографа, как у некоторых, взять готовый такой шилд? Китайцы не делают, а Sancho, в этом не поможет, ну или очень за дорого. :)
Это раз.
Ну и второе, как данный девайс поможет штатному блоку LCD ?
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

Аватара пользователя
Sancho
Полковник
Сообщения: 3855
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 537
Откуда: Ярославль.
Имя: Александр
Контактная информация:

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

#15

Сообщение Sancho » 15.09.2021{, 16:14}

Dryundel писал(а):
15.09.2021{, 15:53}
86 циклов и 84522 циклов за секунду это как бы 3 порядка.

Не нужно путать тёплое и пушистое.
Это как бы работает дисплей или нет, в деле или курит в сторонке секунду.
В предложенном мной тесте дисплей выводит информацию в каждом цикле, так-же, как и в стандартном варианте FLP. Результат 144 цикла. Со скрина.
Dryundel писал(а):
15.09.2021{, 15:53}
Ну и второе, как данный девайс поможет штатному блоку LCD ?
Замена библиотеки решит все ньюансы. Почти.

Отправлено спустя 5 минут 20 секунд:
Если Автор немного изменит код, сделает отображение по необходимости, без clear в каждом цикле, вопрос отпадёт сам собой.
Предложенный принцип организуется на любой библиотеке.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Аватара пользователя
Dryundel
Подполковник
Сообщения: 1343
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 420
Откуда: Ярославль
Имя: Андрей
Контактная информация:

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

#16

Сообщение Dryundel » 15.09.2021{, 16:41}

Sancho писал(а):
15.09.2021{, 16:14}
Не нужно путать тёплое и пушистое.
Это как бы работает дисплей или нет, в деле или курит в сторонке секунду.
В предложенном мной тесте дисплей выводит информацию в каждом цикле, так-же, как и в стандартном варианте FLP. Результат 144 цикла. Со скрина.
Ха! Дык в чем и прелесть. Альтернативный блок спокойно курит в стороне когда от него не требуется иное, а штатный толчет воду в ступе. Типа делает вид что работает, а на самом деле из цикла в цикл переписывает домашнее задание.
На кой ляд загружать процессор когда этого не требуется? К чему эта лишняя работа?
Sancho писал(а):
15.09.2021{, 16:14}
Замена библиотеки решит все ньюансы.
Конечно поможет. Все с нетерпением ждем новую крутую либу от Sancho, для штатного блока LCD. Еще Сергея надо бы запрячь к Sancho, в упряжку. Тогда дело пойдет!
А пока увы, ждем когда отрастет борода. Жаль что стоять к тому времени уже не будет. :D

Отправлено спустя 1 минуту 4 секунды:
Sancho писал(а):
15.09.2021{, 16:20}
Отправлено спустя 5 минут 20 секунд:
Если Автор немного изменит код, сделает отображение по необходимости, без clear в каждом цикле, вопрос отпадёт сам собой.
Предложенный принцип организуется на любой библиотеке.
Кабы у бабушки был.... Ну вы знаете.
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

Аватара пользователя
Sancho
Полковник
Сообщения: 3855
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 537
Откуда: Ярославль.
Имя: Александр
Контактная информация:

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

#17

Сообщение Sancho » 15.09.2021{, 17:18}

Dryundel, Вы специалист, батенька, в части собирания цитат, нужных Вам. Речь о :
Dryundel писал(а):
15.09.2021{, 16:42}
Sancho писал(а):
15.09.2021{, 16:20}
Замена библиотеки решит все ньюансы.
Конечно поможет. Все с нетерпением ждем новую крутую либу от Sancho, для штатного блока LCD. Еще Сергея надо бы запрячь к Sancho, в упряжку. Тогда дело пойдет!
А пока увы, ждем когда отрастет борода. Жаль что стоять к тому времени уже не будет.
Напомню Вам.
Dryundel писал(а):
15.09.2021{, 15:53}
Sancho,
lcd 1602 на сдвиговом регистре 74hc164 замена i2c
Это конечно хорошо. Это круто. Но где ж простому обывателю, у которого нет крутого осциллографа, как у некоторых, взять готовый такой шилд? Китайцы не делают, а Sancho, в этом не поможет, ну или очень за дорого.
Это раз.
Ну и второе, как данный девайс поможет штатному блоку LCD ?
Sancho писал(а):
15.09.2021{, 16:20}
Замена библиотеки решит все ньюансы. Почти.
Сначала разговор за один шилд, потом предложение за другой. Определитесь.
Если по делу. Удалив старую библиотеку, не I2C, установив новую и драйвер на 164 всё будет работает на стандартных блоках. Используются пины, назначенные как RS и Е. Команды стандартные.
Насчёт поднятой изначально темы - попробуйте почитать тему по ссылке поста 9. Всю тему.
Предложенные Вами блоки работают по изменению, соответственно расплата байтами оперативки. Реализация блоков по той-же схеме на стандартной библиотеке покажет соизмеримые цифры. Разницы на порядки не будет.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

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

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

#18

Сообщение ecoins » 15.09.2021{, 17:44}

Sancho писал(а):
15.09.2021{, 17:18}
Сначала разговор за один шилд, потом предложение за другой. Определитесь.
Если по делу. Удалив старую библиотеку, не I2C, установив новую и драйвер на 164 всё будет работает на стандартных блоках. Используются пины, назначенные как RS и Е. Команды стандартные.
Насчёт поднятой изначально темы - попробуйте почитать тему по ссылке поста 9. Всю тему.
Предложенные Вами блоки работают по изменению, соответственно расплата байтами оперативки. Реализация блоков по той-же схеме на стандартной библиотеке покажет соизмеримые цифры. Разницы на порядки не будет.
Немного добавлю от себя.
Тема "ВРЕМЯ ЦИКЛА" поднята важная. Когда-то мы высказывались на эту тему, но не так ярко и понятно, с демонстрацией как здесь.
К слову библиотеки ecoins проектируются с учетом изложенных в теме идей.
По LCD v.2.18 - мы ранее высказывались и были не правы - задержки delay() там есть, но они только на стадии инициализации и немного при установке курсора. Таким образом она действительно существенней эффективней стандартной. К таком выводу мы когда-то пришли.
Тема LCD HD44780 при внешней простоте устройства ставит много вопросов и можно добавлять много дополнительных свойств - разные интерфейсы, русификация, оптимизация работы со строками и пр. И потому есть разные реализации. Есть и от ecoins.
А сама тема очень актуальная, спасибо.

Аватара пользователя
Dryundel
Подполковник
Сообщения: 1343
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 420
Откуда: Ярославль
Имя: Андрей
Контактная информация:

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

#19

Сообщение Dryundel » 15.09.2021{, 17:52}

Sancho, давно ли мы на Вы? :)
Sancho писал(а):
15.09.2021{, 17:18}
Разницы на порядки не будет.

Я все понял. Блок LCD_V2.18 - г...но. Спорить не буду. :)
Предлагай свои версии блоков. На то и тема что бы решить проблему. (О как! Даже в рифму :) )
.
К стати, добавил в твой вариант теста ШТАТНЫЙ БЛОК ДИСПЛЕЯ и еще тройку блоков со статичными строками.
Моя ESP-еха передает тебе привет. Она тупо подавилась.
.
Привет Sancho!.jpg
Test Privet Sancho.flp
Для скачивания вложений Вы должны быть зарегистрированы.
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

Аватара пользователя
rw6cm
Полковник
Сообщения: 2104
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 255
Имя: Владимир

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

#20

Сообщение rw6cm » 15.09.2021{, 19:44}

Dryundel,
Глупо гонять дисплеи в каждом цикле. Достаточно не чаще 3 раз в сек выделить ему по одному циклу.
Так же не вижу смысла в сравнениях поста №2.
Понятно что логика вашего блока работает не в каждом цикле, и сравнивать с штатным который грузит каждый цикл не серьезно.
Если делать тест, то надо ставить работу блоков в одинаковых условиях.
Допустим esp делает377000 циклов в сек без дисплея.
Сделаем обращение к дисплею через каждые 32000 циклов.
Получим 11 раз за сек обновление информации на дисплее. И сравним сколько циклов затратит каждый блок :)
Test LSD.zip
Для скачивания вложений Вы должны быть зарегистрированы.
Win10-64, FLProg (portable)

Ответить

Вернуться в «Букварь»