Разработки ecoins

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

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

Разработки ecoins

#521

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

Секрета нет 39(десятичная система)=27(шестнадцатеричная система).
На вход подается адрес Lcd в десятичной системе.
Имеет смысл разбивать и тридцать герконов - проект будет более читаемый, на каждой плате можно оставить свои текстовые комментарии.
Да и 30 герконов обрабатываются не мгновенно - функция digitalRead() занимается процессорное время, и прочее в Вашем проекте.
Разбивать на задачи и распределять их вызовы во времени и последовательности - это часть культуры проектирования систем автоматизации.
Последний раз редактировалось ecoins 19.04.2020{, 13:10}, всего редактировалось 1 раз.

tolochko
Сержант
Сообщения: 247
Зарегистрирован: 30.11.2016{, 16:58}
Репутация: 7
Откуда: Днепропетровск

Разработки ecoins

#522

Сообщение tolochko » 19.04.2020{, 13:07}

Спасибо все понятно

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

Разработки ecoins

#523

Сообщение ecoins » 19.04.2020{, 13:18}

Добавил к микро-тесту lcd сканирование шины i2c c выводом на консоль десятичных и шестнадцатеричных адресов.
200419_FLProg_test_LCD_micro_02+scan i2c.flp
(105.19 КБ) 68 скачиваний
Test_micro_scan_i2c.png
Для работы теста потребуются библиотеки RT_HW_BOARDS.h, RT_HW_CONSOLE.h, RT_HW_LCD44780.h.

3BEPb
Рядовой
Сообщения: 8
Зарегистрирован: 19.04.2020{, 14:00}
Репутация: 0
Имя: Yura

Разработки ecoins

#524

Сообщение 3BEPb » 19.04.2020{, 14:16}

Доброго времени суток!!

Создал новый пользовательский блок для измерения напряжение на АЦП. Работает по UART нормально, а вот по Modbus почему то нет линка, от мастера запросы приходят, а ардуино ответы не отправляет. Если убираю этот блок, то линк появляется. Код написал ниже. Помогите плиз, а то уже не знаю что делать :smile37: !

float result;
int readValue;
int maxValue = 0;
uint32_t start_time = millis();
while ((millis() - start_time) < 1000)
{
readValue = analogRead(A0);
if (readValue > maxValue) {
maxValue = readValue;
}
}
result = (maxValue * 5.0) / 1024.0;
return result;

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

Разработки ecoins

#525

Сообщение ecoins » 19.04.2020{, 16:22}

3BEPb писал(а):
19.04.2020{, 14:16}
uint32_t start_time = millis();
while ((millis() - start_time) < 1000)
У вас задержка 1 сек - процессор в это время стоит.
Можно использовать наши блоки для решения проблемы, чуть позже выложу.

3BEPb
Рядовой
Сообщения: 8
Зарегистрирован: 19.04.2020{, 14:00}
Репутация: 0
Имя: Yura

Разработки ecoins

#526

Сообщение 3BEPb » 19.04.2020{, 16:34}

ecoins писал(а):
19.04.2020{, 16:22}
, чуть позже выложу.
Спасибо, буду благодарен :smile9:

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

Разработки ecoins

#527

Сообщение ecoins » 19.04.2020{, 16:46}

Тест АЦП 1
3BEPb писал(а):
19.04.2020{, 14:16}
Помогите плиз, а то уже не знаю что делать
Тест АЦП 1 раз в сек. Дополнительные библиотеки не требуются.
Тест Ацп 1 раз в сек.flp
(108.29 КБ) 70 скачиваний
СпойлерПоказать
Тест Ацп 1 раз в сек.png

3BEPb
Рядовой
Сообщения: 8
Зарегистрирован: 19.04.2020{, 14:00}
Репутация: 0
Имя: Yura

Разработки ecoins

#528

Сообщение 3BEPb » 19.04.2020{, 16:51}

ecoins писал(а):
19.04.2020{, 16:46}
Тест АЦП 1 раз в сек.
Нет возможности ни посмотреть, ни скачать :shok:

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

Разработки ecoins

#529

Сообщение ecoins » 19.04.2020{, 16:52}

Попробуйте сейчас - в спойлере в формате png

3BEPb
Рядовой
Сообщения: 8
Зарегистрирован: 19.04.2020{, 14:00}
Репутация: 0
Имя: Yura

Разработки ecoins

#530

Сообщение 3BEPb » 19.04.2020{, 17:10}

Большое спасибо! Очень помогли :smile9:

Отправлено спустя 1 минуту 13 секунд:
А еще вопрос, эти блоки, те что на плате 1, они не базовые? Вы сами их создали?

Avazbek
Рядовой
Сообщения: 21
Зарегистрирован: 24.10.2019{, 09:32}
Репутация: 1
Имя: Avazbek

Разработки ecoins

#531

Сообщение Avazbek » 19.04.2020{, 18:00}

Здравствуйте как вывести кастомный символ ?

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

Разработки ecoins

#532

Сообщение ecoins » 19.04.2020{, 18:07}

3BEPb писал(а):
19.04.2020{, 17:52}
А еще вопрос, эти блоки, те что на плате 1, они не базовые? Вы сами их создали?
Это наши блоки. Таких автономных блоков не мало, все они есть в выложенных библиотеках.

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

Разработки ecoins

#533

Сообщение ecoins » 19.04.2020{, 18:09}

Avazbek писал(а):
19.04.2020{, 18:00}
Здравствуйте как вывести кастомный символ ?
Кастомный - это собственный символ для Lcd?
Эту функцию не вставляли в библиотеку. А это действительно полезно и нужно?

edyapd
Капитан
Сообщения: 768
Зарегистрирован: 20.09.2019{, 11:38}
Репутация: 65
Имя: Эдуард

Разработки ecoins

#534

Сообщение edyapd » 19.04.2020{, 18:14}

ecoins писал(а):
19.04.2020{, 16:22}
У вас задержка 1 сек - процессор в это время стоит.
ecoins писал(а):
19.04.2020{, 16:46}
Тест АЦП 1 раз в сек. Дополнительные библиотеки не требуются.
Даже я, который знает Си только со словарём, вижу, что это абсолютно два разных скетча получаются. В приведённом выше примере микроконтроллер не стоит, а в течении 1 сек непрерывно считывает значение с аналогового входа. И находит максимальное значение. Не знаю, на сколько это правильно реализовано. Тут будет зависит от того, какое напряжение измеряется.
В предложенном же вами решении всего лишь раз в секунду считывается значение, без всяких максимумов.

Avazbek
Рядовой
Сообщения: 21
Зарегистрирован: 24.10.2019{, 09:32}
Репутация: 1
Имя: Avazbek

Разработки ecoins

#535

Сообщение Avazbek » 19.04.2020{, 18:37}

ecoins писал(а):
19.04.2020{, 18:09}
Да.

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

Разработки ecoins

#536

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

Полный вариант с поиском максимального значения за 1 сек + вывод на консоль (требуется библиотека RT_HW_CONSOLE.h)
СпойлерПоказать
200419_Выбор максимального значения  Ацп  за сек_v2.png
Время выполнения 7_125 мкс.JPG
Видно, что опрос АЦП увеличивает время на цикла с 7мкс до 125мкс.
Для этого и рекомендуется операции с АЦП (и float) выносить в отдельные задачи.
-----
Код ПБ selectMax:
switch(dir){default:
case 0: timeStart=millis()+period; dir++;
case 1: up=0; sMax=0; dir++;
case 2: if(val>sMax) sMax=val;
if(millis()>=timeStart) {res=(float)sMax*5.0/1023; timeStart=timeStart+period; up=1; dir=1;} break;
}

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

Разработки ecoins

#537

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

Минимальный вариант без выделения отдельной задачи:
200419_Выбор максимального значения  Ацп  за сек_v2_мин.png
Мини_ период 120 мс.JPG
Мини_ период 120 мс.JPG (11.47 КБ) 1230 просмотров
Общий период =120 мкс (вместо 7 мкс). Первый вариант более предпочтительный.

tolochko
Сержант
Сообщения: 247
Зарегистрирован: 30.11.2016{, 16:58}
Репутация: 7
Откуда: Днепропетровск

Разработки ecoins

#538

Сообщение tolochko » 19.04.2020{, 22:24}

Опять добрый вечер
Не нашел блока String для дисплея хотя в pdf файле картинка есть
Есть только перебор нескольких текстовых строк

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

Разработки ecoins

#539

Сообщение ecoins » 19.04.2020{, 22:58}

tolochko писал(а):
19.04.2020{, 22:24}
Не нашел блока String для дисплея хотя в pdf файле картинка есть
Есть только перебор нескольких текстовых строк
Он называется lcd.str - под номером 6.
6.lcd.str_Вывод_String_(CODE).ubi
(29.74 КБ) 58 скачиваний
Прикрепил на всякий случай.
-------------------
Надо представлять, что любое появление строковой переменной на плате, это "тормоза" и не рациональное использование ОЗУ , поскольку при каждом вхождении в плату происходит обновление этой переменной.
Несколько улучшает ситуацию следующий метод:
1. Формируется переменная на другой плате, которая вызывается редко - например по диспетчеру как медленная задача. Обычно это 1 сек, но можно и реже.
2. На этой плате формируется нужная строковая переменная, с которой связывается КОНТАКТ FLProg.
3. На вход блока подается не сама переменная, а КОНТАКТ.
-----------------------
Во многих случаях удается избегать использование этого блока, так блоки вывода int и float позволяют добавлять префиксы (заголовки) и суффиксы к выводимой переменной.
При этом сами тексты хранятся во flash-памяти.
Для контроллеров типа Nano,UNO,Mega актуально - в них и ОЗУ мало, и они не самые быстрые (как ни странно Mega немного медленнее Nano - измерения на имеющихся образцах так показали).

tolochko
Сержант
Сообщения: 247
Зарегистрирован: 30.11.2016{, 16:58}
Репутация: 7
Откуда: Днепропетровск

Разработки ecoins

#540

Сообщение tolochko » 20.04.2020{, 18:28}

Спасибо за ликбез

Закрыто

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