Разработки ecoins

ecoins
Полковник
Сообщения: 4005
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 137 раз
Поблагодарили: 152 раза

Разработки ecoins

Сообщение ecoins »

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

Разработки ecoins

Сообщение tolochko »

Спасибо все понятно
ecoins
Полковник
Сообщения: 4005
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 137 раз
Поблагодарили: 152 раза

Разработки ecoins

Сообщение ecoins »

Добавил к микро-тесту lcd сканирование шины i2c c выводом на консоль десятичных и шестнадцатеричных адресов.
200419_FLProg_test_LCD_micro_02+scan i2c.flp
Test_micro_scan_i2c.png
Для работы теста потребуются библиотеки RT_HW_BOARDS.h, RT_HW_CONSOLE.h, RT_HW_LCD44780.h.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
3BEPb
Рядовой
Сообщения: 8
Зарегистрирован: 19 апр 2020, 14:00
Имя: Yura

Разработки ecoins

Сообщение 3BEPb »

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

Создал новый пользовательский блок для измерения напряжение на АЦП. Работает по 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
Полковник
Сообщения: 4005
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 137 раз
Поблагодарили: 152 раза

Разработки ecoins

Сообщение ecoins »

3BEPb писал(а): 19 апр 2020, 14:16 uint32_t start_time = millis();
while ((millis() - start_time) < 1000)
У вас задержка 1 сек - процессор в это время стоит.
Можно использовать наши блоки для решения проблемы, чуть позже выложу.
3BEPb
Рядовой
Сообщения: 8
Зарегистрирован: 19 апр 2020, 14:00
Имя: Yura

Разработки ecoins

Сообщение 3BEPb »

ecoins писал(а): 19 апр 2020, 16:22 , чуть позже выложу.
Спасибо, буду благодарен :smile9:
ecoins
Полковник
Сообщения: 4005
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 137 раз
Поблагодарили: 152 раза

Разработки ecoins

Сообщение ecoins »

Тест АЦП 1
3BEPb писал(а): 19 апр 2020, 14:16 Помогите плиз, а то уже не знаю что делать
Тест АЦП 1 раз в сек. Дополнительные библиотеки не требуются.
Тест Ацп 1 раз в сек.flp
[spoiler]
Тест Ацп 1 раз в сек.png
[/spoiler]
У вас нет необходимых прав для просмотра вложений в этом сообщении.
3BEPb
Рядовой
Сообщения: 8
Зарегистрирован: 19 апр 2020, 14:00
Имя: Yura

Разработки ecoins

Сообщение 3BEPb »

ecoins писал(а): 19 апр 2020, 16:46 Тест АЦП 1 раз в сек.
Нет возможности ни посмотреть, ни скачать :shok:
ecoins
Полковник
Сообщения: 4005
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 137 раз
Поблагодарили: 152 раза

Разработки ecoins

Сообщение ecoins »

Попробуйте сейчас - в спойлере в формате png
3BEPb
Рядовой
Сообщения: 8
Зарегистрирован: 19 апр 2020, 14:00
Имя: Yura

Разработки ecoins

Сообщение 3BEPb »

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

Отправлено спустя 1 минуту 13 секунд:
А еще вопрос, эти блоки, те что на плате 1, они не базовые? Вы сами их создали?
Avazbek
Рядовой
Сообщения: 21
Зарегистрирован: 24 окт 2019, 09:32
Имя: Avazbek

Разработки ecoins

Сообщение Avazbek »

Здравствуйте как вывести кастомный символ ?
ecoins
Полковник
Сообщения: 4005
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 137 раз
Поблагодарили: 152 раза

Разработки ecoins

Сообщение ecoins »

3BEPb писал(а): 19 апр 2020, 17:52 А еще вопрос, эти блоки, те что на плате 1, они не базовые? Вы сами их создали?
Это наши блоки. Таких автономных блоков не мало, все они есть в выложенных библиотеках.
ecoins
Полковник
Сообщения: 4005
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 137 раз
Поблагодарили: 152 раза

Разработки ecoins

Сообщение ecoins »

Avazbek писал(а): 19 апр 2020, 18:00 Здравствуйте как вывести кастомный символ ?
Кастомный - это собственный символ для Lcd?
Эту функцию не вставляли в библиотеку. А это действительно полезно и нужно?
edyapd
Капитан
Сообщения: 768
Зарегистрирован: 20 сен 2019, 11:38
Имя: Эдуард

Разработки ecoins

Сообщение edyapd »

ecoins писал(а): 19 апр 2020, 16:22 У вас задержка 1 сек - процессор в это время стоит.
ecoins писал(а): 19 апр 2020, 16:46 Тест АЦП 1 раз в сек. Дополнительные библиотеки не требуются.
Даже я, который знает Си только со словарём, вижу, что это абсолютно два разных скетча получаются. В приведённом выше примере микроконтроллер не стоит, а в течении 1 сек непрерывно считывает значение с аналогового входа. И находит максимальное значение. Не знаю, на сколько это правильно реализовано. Тут будет зависит от того, какое напряжение измеряется.
В предложенном же вами решении всего лишь раз в секунду считывается значение, без всяких максимумов.
Avazbek
Рядовой
Сообщения: 21
Зарегистрирован: 24 окт 2019, 09:32
Имя: Avazbek

Разработки ecoins

Сообщение Avazbek »

ecoins писал(а): 19 апр 2020, 18:09
Да.
ecoins
Полковник
Сообщения: 4005
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 137 раз
Поблагодарили: 152 раза

Разработки ecoins

Сообщение ecoins »

Полный вариант с поиском максимального значения за 1 сек + вывод на консоль (требуется библиотека RT_HW_CONSOLE.h)
200419_Выбор максимального значения Ацп за сек_v2.flp
[spoiler]
200419_Выбор максимального значения Ацп за сек_v2.png
[/spoiler]
Время выполнения 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
Полковник
Сообщения: 4005
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 137 раз
Поблагодарили: 152 раза

Разработки ecoins

Сообщение ecoins »

Минимальный вариант без выделения отдельной задачи:
200419_Выбор максимального значения Ацп за сек_v2_мини.flp
200419_Выбор максимального значения Ацп за сек_v2_мин.png
Мини_ период 120 мс.JPG
Общий период =120 мкс (вместо 7 мкс). Первый вариант более предпочтительный.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
tolochko
Сержант
Сообщения: 247
Зарегистрирован: 30 ноя 2016, 16:58
Откуда: Днепропетровск

Разработки ecoins

Сообщение tolochko »

Опять добрый вечер
Не нашел блока String для дисплея хотя в pdf файле картинка есть
Есть только перебор нескольких текстовых строк
ecoins
Полковник
Сообщения: 4005
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 137 раз
Поблагодарили: 152 раза

Разработки ecoins

Сообщение ecoins »

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

Разработки ecoins

Сообщение tolochko »

Спасибо за ликбез
Закрыто

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

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

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