Оптимизация создаваемой программы, использование блоков

Различные вопросы по программе не входящие в другие рубрики
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

Оптимизация создаваемой программы, использование блоков

Сообщение Sancho »

Nikan писал(а): 26 янв 2018, 19:17значит даташит производителя врет?
Нет, не врёт. Страхуются, гарантированно при разных техусловиях 100.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

Оптимизация создаваемой программы, использование блоков

Сообщение Sancho »

Пролечена библиотека LiquidCrystal_I2C.h для работы на 400.
Теперь получил:
10 символов - 6,1мс,
20 символов - 12мс.

Отправлено спустя 1 час 39 минут 54 секунды:
Какие выводы из "дисплейной истории" уже можно сделать?
    • Дисплей использовать в не самых быстрых проектах.
    • Если проект устраивает - оставить как есть.
    • Делать свой блок для дисплея с необходимым функционалом. Т.е. слова типа "Температура", "Влажность" и иже выводить единоразово и не затирать, а переменные слать по мере необходимости в нужные знакоместа.
    • При наличии свободных пинов и желания - исключить I2C.
  • Купить вместо PCF8574 Про Мини, управление и индикацию в неё, попробовать найти или переделать библиотеку для записи байта целиком.
Что скажет народ по данному поводу?
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
WZV
Сержант
Сообщения: 226
Зарегистрирован: 06 сен 2015, 14:31

Оптимизация создаваемой программы, использование блоков

Сообщение WZV »

Sancho писал(а): 27 янв 2018, 11:22Дисплей использовать в не самых быстрых проектах.
Делать свой блок для дисплея с необходимым функционалом. Т.е. слова типа "Температура", "Влажность" и иже выводить единоразово и не затирать, а переменные слать по мере необходимости в нужные знакоместа.
При наличии свободных пинов и желания - исключить I2C.
Купить вместо PCF8574 Про Мини, управление и индикацию в неё, попробовать найти или переделать библиотеку для записи байта целиком.
Хорошее решение. Я всегда стараюсь подключать дисплей к отдельному контроллеру(мини,нано, уно). Связываюсь с контроллером по ТСP/IP (Модбас или MQTT). Стараюсь I2C не использовать.

Отправлено спустя 2 минуты 53 секунды:
WZV писал(а): 27 янв 2018, 12:12Стараюсь I2C не использовать.
Не только при подключении дисплея, а вообще.
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

Оптимизация создаваемой программы, использование блоков

Сообщение Sancho »

Почему писал о своём блоке при необходимости "Всё в одном" корпусе?
Вот код, который 17 символов выводит один раз за 899 циклов, при счётчике =100.
Переменная для счёта и индикации увеличивается в каждом цикле на 1, при > 999 сбрасывается в 100.
Сам счётчик пишет в знакоместа с 17.
Время выполнения для D12 от 1 до 0 2,33мс.
Попробуйте убрать условие для первых 17-ти - опять 12мс.
Тесты на 400кГц.
[spoiler=код внутри]

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

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "CyberLib.h"
LiquidCrystal_I2C _lcd1(0x3F, 20, 4);
String _gtv2 = "Temperature-test-"; //Переменная стринг 17 символов
int _gtv1 = 100; //Счётная переменная, 100-999, 3 символа
void setup()
{
Wire.begin();
delay(10);
_lcd1.init();
_lcd1.backlight();
D12_Out; 
D12_Low;
_lcd1.clear();
}
void loop()
{
delay(1);
D12_High;
if ((_gtv1) == 100)
{
_lcd1.setCursor(0, 0);
_lcd1.print((_gtv2));
}

_lcd1.setCursor(17, 0);
_lcd1.print(((String(_gtv1, DEC))));

_gtv1 = _gtv1+1;
if ((_gtv1) > (999)) {_gtv1 = 100;}
D12_Low;
}
[/spoiler]
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
KulibinOrsk
Лейтенант
Сообщения: 516
Зарегистрирован: 25 фев 2018, 08:48
Откуда: Оренбург
Имя: Александр

Входной сдвиговый регистр 74HC165

Сообщение KulibinOrsk »

[ref=#ff8000]Sancho[/ref], спасибо за рекомендацию, но было бы совсем хорошо если бы:
1. Или дали ссылку на: как разогнать (не вижу этого в настройках), аналоговые быстрые так же не вижу как сделать. Насчет оптимизации вывода инфы примерно догадываюсь что это лучше делать в одной плате (или не в том направлении мыслю? )
2. Или напишите как реализовать пункты
pan
Полковник
Сообщения: 2860
Зарегистрирован: 13 апр 2017, 11:57
Имя: noname

Оптимизация создаваемой программы, использование блоков

Сообщение pan »

надо какой нибудь костыль придумать к штатному блоку дисплея, чтобы выводилась инфа по мере необходимости. а то либо постоянно, либо при снятии EN стирается.
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

Оптимизация создаваемой программы, использование блоков

Сообщение Sancho »

1. Разгон библиотеки для дисплея по I2C - в папке по адресу C:\Users\ВАШ ПОЛЬЗОВАТЕЛЬ\Documents\Arduino\libraries\LiquidCrystal_I2C в файле LiquidCrystal_I2C.cpp в строке Wire.setClock(100000L); 1 заменяется 4, (Если нет такой строки - скопируйте и вставьте) итого:
[spoiler]

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

void LiquidCrystal_I2C::begin() {
	Wire.begin();
	Wire.setClock(400000L); // 
	
[/spoiler]
2. Как писали не раз, сделать свой блок для дисплея, надоело каждый раз править код руками. Но у каждого своя задача, и мои могут совсем им не отвечать...
Комментировать для приемлемой работы входа EN нужно это, пример и оригинал:
[spoiler]

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

if (_changeNumber1_Out) {
_dispTempLength1 = (((String(_gtv2, DEC)))).length();
if (_disp1oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp1oldLength = _dispTempLength1;
_lcd1.setCursor(1, 0);
_lcd1.print(((String(_gtv2, DEC))));
}
      //else {if (_disp1oldLength > 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;}} Закоментированно, в оригинале три строки!!! Внимательно!!!
      
   Оригинал:
   
      if (_changeNumber1_Out) {
_dispTempLength1 = (((String(_gtv2, DEC)))).length();
if (_disp1oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp1oldLength = _dispTempLength1;
_lcd1.setCursor(1, 0);
_lcd1.print(((String(_gtv2, DEC))));
} else {  // Здесь ВНИМАТЕЛЬНО!!!! ПЕРВАЯ СКОБКА, }, перед else, ДОЛЖНА ОСТАТЬСЯ!!!
if (_disp1oldLength > 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;} 
}
      
[/spoiler]
3. Адрес быстрых входов - в шапке темы.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
KulibinOrsk
Лейтенант
Сообщения: 516
Зарегистрирован: 25 фев 2018, 08:48
Откуда: Оренбург
Имя: Александр

Оптимизация создаваемой программы, использование блоков

Сообщение KulibinOrsk »

Проверяю работу в железе ардуины нано (328) и все возможные датчики и модули подключаю и смотрю работу.
В дальнейшем соответственно с планами использовать FLPprog в работе и хозяйстве.
На данном этапе подключено: нано + LCD(i2c) + серва + энкодер +2 аналоговых (задатчик угла сервы) + температурный DS18B20 + часы DS1307 + аналоговый с трансформатора тока + кнопка с инкрементом (плюсует значение минут по которому срабатывает будильник).
......... На днях придут еще несколько датчиков (тока, дальномер лазерный + УЗ, 7-ми сегментный индикатор) + шаговые модули + ЦАП + расширители входа-выхода + mp3 плейер + ... вроде все ))) для начала ......
Нужно понять как оптимально составлять программу чтобы она работала без тормозов.

Отправлено спустя 4 минуты 14 секунд:
C:\Users\ВАШ ПОЛЬЗОВАТЕЛЬ\Documents\Arduino\libraries\LiquidCrystal_I2C в файле LiquidCrystal_I2C.cpp в строке Wire.setClock(100000L); 1 заменяется 4, - у меня там совсем нет никаких библиотек. Пустая папка внутри. Есть readme (по установке библиотек) И ссылка внутри. Но как то же работает дисплей по i2c
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

Оптимизация создаваемой программы, использование блоков

Сообщение Sancho »

[ref]KulibinOrsk[/ref], Какой IDE пользуетесь, своей или встроенной. Судя по всему - встроенной, тогда для х64:
C:\Program Files (x86)\FLProg\ideV2\libraries\...
Или попробуйте наверняка поиском :)
Сразу вопрос по делу, так как у меня нету 18В20 и ТТ, и остального идущего:
осцилограф есть?
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
pan
Полковник
Сообщения: 2860
Зарегистрирован: 13 апр 2017, 11:57
Имя: noname

Оптимизация создаваемой программы, использование блоков

Сообщение pan »

KulibinOrsk писал(а): 21 мар 2018, 11:29как оптимально составлять программу
самое основное определиться с приоритетами и временными интервалами.

например если температура меняется медленно, нет смысла постоянно тереби опрашивать датчик температуры.
если сигналы или данные не меняются, не надо их постоянно отправлять или куда-то записывать. ит.д.
всё нужно делать по мере необходимости.
но если проект маленький и задержки не важны, можно и не загоняться.
KulibinOrsk
Лейтенант
Сообщения: 516
Зарегистрирован: 25 фев 2018, 08:48
Откуда: Оренбург
Имя: Александр

Оптимизация создаваемой программы, использование блоков

Сообщение KulibinOrsk »

[ref=#ff8000]Sancho[/ref], Осцилограф есть.
у меня по старинке х32 wXP
IDE загружал arduino-1.8.5-windows (наверное в ней все библиотеки)

Отправлено спустя 4 минуты 58 секунд:
У кого есть библиотека наполненная всем джентельменским набором - скиньте во благо ))
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

Оптимизация создаваемой программы, использование блоков

Сообщение Sancho »

[ref]KulibinOrsk[/ref], Запустите поиск по имени файла LiquidCrystal_I2C.cpp. Найдёте - откройте в Notepad++, отредактируйте, сохраните.
Если ещё нет Notepad++ - СРОЧНО установить!!!
В проекте у Вас есть блок получения данных с ТТ, Emon. Зачем в данном проекте отправка в сом порт? Отредактировать блок, убрать лишнее, сохранить.
Остальное по ходу, но Алексей всё выше написал - главное определиться с приоритетами задач.
Бибки LiquidCrystal_I2C уже пролечена
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
pan
Полковник
Сообщения: 2860
Зарегистрирован: 13 апр 2017, 11:57
Имя: noname

Оптимизация создаваемой программы, использование блоков

Сообщение pan »

[ref]KulibinOrsk[/ref], в IDE которая в комплекте с флпрог есть эта библиотека. скопируйте куда надо если пользуетесь установленным IDE
KulibinOrsk
Лейтенант
Сообщения: 516
Зарегистрирован: 25 фев 2018, 08:48
Откуда: Оренбург
Имя: Александр

Оптимизация создаваемой программы, использование блоков

Сообщение KulibinOrsk »

[ref=#ff8000]Sancho[/ref], LiquidCrystal_I2C.cpp - нашел - есть в библиотеке которая была с FLProg
Вот с этим COM-портом и были непонятки. И в описании хотя бы автор указал что - пишите 0 если не нужно передавать. Кто ж знал что оно передает.
У меня запись строчек по разгону - по другому. Посмотрите плиз.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

Оптимизация создаваемой программы, использование блоков

Сообщение Sancho »

Вставьте туда такую строку, как на примере.
Насчёт сом порта в emon - удалите всё к нему относящиеся и сохраните как новый блок, на всякий случай.
[ref]KulibinOrsk[/ref],
P.S. Вот так сделай:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Аватара пользователя
belyx
Сержант
Сообщения: 251
Зарегистрирован: 24 июл 2016, 20:38
Откуда: Витебск Беларусь
Благодарил (а): 7 раз

Оптимизация создаваемой программы, использование блоков

Сообщение belyx »

Задача: измерить время цикла программы-с целью оптимизации созданной,бо тормозит.
Метод инверсии переменной с выводом меандра на пин и осциллографа понятен.
Вопрос: если я поставлю скоростной счётчик в таком виде[spoiler]
измерение цикла.jpg
[/spoiler]-насколько неточными будут показания и правильно ли это будет?
Или вторую плату загрузить в другой контроллёр? и измерять им?
измерение цикла.flp
Отправлено спустя 4 минуты 9 секунд:
понятно что вычисления потом сам произведу
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

Оптимизация создаваемой программы, использование блоков

Сообщение Sancho »

belyx писал(а): 04 июл 2018, 13:13Задача: измерить время цикла программы-с целью оптимизации созданной,бо тормозит.
Я думаю, есть самый простой способ написать блок и слать данные в ком порт.
Несколько нюансов: измерять за несколько циклов и усреднять или измерять один но по команде.
Примерный код :

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

Serial.print("Time: "); Serial.println((millis()-Time),DEC); // micros(); если надо
Serial.println("Start "); Time=millis(); // micros() .........
Надеюсь, понимаете, почему строки как-бы наоборот....
Для периодической отправки поставить счётчик циклов, отправлять в каждом 1234....
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Аватара пользователя
belyx
Сержант
Сообщения: 251
Зарегистрирован: 24 июл 2016, 20:38
Откуда: Витебск Беларусь
Благодарил (а): 7 раз

Оптимизация создаваемой программы, использование блоков

Сообщение belyx »

Sancho писал(а): 04 июл 2018, 16:14есть самый простой способ написать блок
для меня не есть так!
я думаю надо как то без изысков-просто цифры достаточно-это же всё время

Отправлено спустя 4 минуты 9 секунд:
изучаю
Sancho писал(а): 04 июл 2018, 16:14millis
Отправлено спустя 8 минут 9 секунд:
из описания-"Возвращает количество миллисекунд, прошедших с момента старта программы Ардуино"
наверно не совсем подходит т.к. в зависимости от режимов(условий)эти циклы меняются и что получится,что-то усреднённое?
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

Оптимизация создаваемой программы, использование блоков

Сообщение Sancho »

[ref]belyx[/ref],
Посмотрите код - он выводит разность между текущим и записанным в предыдущем цикле!
Напишу/сделаю Вам блочок. Опишите периодичность вывода и куда.

Отправлено спустя 1 минуту 5 секунд:
belyx писал(а): 04 июл 2018, 17:01наверно не совсем подходит т.к. в зависимости от режимов(условий)эти циклы меняются и что получится,что-то усреднённое?
Можно сделать работу по EN - будете включать в нужные моменты.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Аватара пользователя
belyx
Сержант
Сообщения: 251
Зарегистрирован: 24 июл 2016, 20:38
Откуда: Витебск Беларусь
Благодарил (а): 7 раз

Оптимизация создаваемой программы, использование блоков

Сообщение belyx »

про разность-да уже прочитал-был неправ!
период-(100-500) миллисекунд(как удобно),в ком порт

Отправлено спустя 2 минуты 5 секунд:
Sancho писал(а): 04 июл 2018, 17:12Можно сделать работу по EN
-желательно

Отправлено спустя 1 час 8 минут 36 секунд:
Sancho писал(а): 04 июл 2018, 17:12Напишу/сделаю Вам блочок
буду Вам очень благодарен !!!
Ответить

Вернуться в «Прочие вопросы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей