Уважаемые пользователи! Наш сайт и форум содержится на средства полученные от рекламы. Если вы хотите и дальше продолжать общаться, скачивать, и т.п. пожалуйста отключите блокировку рекламы для нашего сайта/форума. Можно и покликать по рекламным ссылкам, так будут больше выплаты. Спасибо за понимание!

Разработки ecoins

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

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

Разработки ecoins

#521

Сообщение ecoins » 18.04.2020{, 08:25}

Микро и мини тесты lcd:
200418_FLProg_test_LCD_micro_01.flp
(55.95 КБ) 19 скачиваний
Микро-тест lcd.png
200418_FLProg_test_LCD_mini_01.flp
(669.01 КБ) 18 скачиваний
Мини-тест lcd.png

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

Разработки ecoins

#522

Сообщение ecoins » 18.04.2020{, 08:26}

Библиотека Lcd содержит работу со строковыми переменными String - планируем избавиться от них, библиотека станет компактнее.
Все строковые переменные в блоках (название заголовков, выдаваемые на lcd тексты хранятся в памяти PROGMEM - ОЗУ не используют.

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

Разработки ecoins

#523

Сообщение tolochko » 19.04.2020{, 12:58}

Здравствуйте Econics
Начал пробовать работать с вашими блоками в частности с LCD
Возник вопрос почему с адресом 27 как указывает шина не работает а с вашим 39 работает
В чем секрет
И сразу по ходу планировки задач
Когда они разные понятно а если есть много однотипных задач , у меня 30 герконов
Есть смысл разбивать на разные платы или пусть работаю на одной?
И спасибо за ваш труд

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

Разработки ecoins

#524

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

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

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

Разработки ecoins

#525

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

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

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

Разработки ecoins

#526

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

Добавил к микро-тесту lcd сканирование шины i2c c выводом на консоль десятичных и шестнадцатеричных адресов.
200419_FLProg_test_LCD_micro_02+scan i2c.flp
(105.19 КБ) 18 скачиваний
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

#527

Сообщение 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
Лейтенант
Сообщения: 549
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 85
Откуда: Шатура
Имя: Энвер

Разработки ecoins

#528

Сообщение 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

#529

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

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

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

Разработки ecoins

#530

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

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

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

Разработки ecoins

#531

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

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

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

Разработки ecoins

#532

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

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

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

Разработки ecoins

#533

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

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

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

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

Разработки ecoins

#534

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

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

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

Разработки ecoins

#535

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

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

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

Разработки ecoins

#536

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

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

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

Разработки ecoins

#537

Сообщение 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

#538

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

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

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

Разработки ecoins

#539

Сообщение 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
Лейтенант
Сообщения: 549
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 85
Откуда: Шатура
Имя: Энвер

Разработки ecoins

#540

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

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

Ответить

Вернуться в «Библиотеки пользователей»