Фишки и не только FLProg

Ньюансы программы

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

Фишки и не только FLProg

#1

Сообщение Sancho » 13.03.2019{, 11:43}

Решил собрать в одном месте все замеченные "фишки-подвохи" и не только нашей программы.
Заранее зарезервирую пару постов в начале, вдруг не влезет :) или по темам разбить.
Посты будут обновляться по мере писанины )
Начну, пожалуй.
Участники экспериментов: про-мини(вместо протёртой нано), дисплей по I2C(адрес 3F), массовка.

Недавно появилась функция/кнопочка "Порядок компиляции блоков".
Настоятельно рекомендую пользоваться!!!
Примеры нежданчиков:
СпойлерПоказать
screenshot_19-03-13_11-51-53.png
screenshot_19-03-13_11-52-10.png
screenshot_19-03-13_11-52-47.png
Очерёдность_01.png
2018-05-08_14-30-52.png
2018-05-08_14-30-52.png (8.78 КБ) 229 просмотров
Не ленитесь проверять, что-бы потом не чесать репу - чего? где? почему??? :)

Счётчики в старых версиях.
Иногда подкидывали, вначале, такие заморочки, что пришлось сделать себе ПБ.
Речь о сбросе при достижении какого-то значения. Использовали переменную на выходе достижения, отправляли на вход сброса.
Пример:Показать
screenshot_19-03-13_12-01-09.png
screenshot_19-03-13_12-01-09.png (3.06 КБ) 229 просмотров
А теперь давайте дополним проект до такого вида:
СпойлерПоказать
screenshot_19-03-13_12-03-56.png
screenshot_19-03-13_12-03-56.png (7.81 КБ) 229 просмотров
Сам проект для теста: А теперь видео:

Веселуха, не правда-ли?
На дисплее от 0 до 9, а светодиод по компаратору на 10 срабатывает!!!
Это иногда очень большие заморочки приносило- при работе с памятью и массивами, т.к. пытается прочитать, а ещё хуже записать в то место, которое не его, там другие данные !!!
В новых версиях есть расширенные настройки, пользуйтесь ими, откажитесь от внешних связей выхода переполнения и входа сброс, и не будет таких сюрпризов.
Переходите на последние версии программы.
P.S.
В личных сообщениях упрекнули, что не прав. :)
Контрольный выстрел:
screenshot_19-03-13_15-17-01.png
screenshot_19-03-13_15-17-01.png (9.9 КБ) 179 просмотров
Как вы думаете, какая будет сумма массива после 100500 циклов?
Ответ
Ответ, но сначала подумайтеПоказать
:
В ячейку 0, ноль, никогда ничего не запишется!
Её проскакивает, т.е. после фронта импульса на выходе на выходе или 10, или 1 :)
Всё дело в том, что переход выхода счётчика в 0 произойдёт в следующем цикле, когда переменная сброс доберётся до входа счётчика. Но в этот момент фронта на входе уже не будет....
Новый счётчик с внутренним сбросом без этих "фишек", там на выходе значение, полученное после обработки всех входных сигналов и превышений выходных значений.
Вот так вот бывает...
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

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

Фишки и не только FLProg

#2

Сообщение Sancho » 13.03.2019{, 11:43}

Использование встроенного генератора для подсчёта времени
Использование генератора в таком формате некорректно и неправильно.
Уже писал о принципе работы:
Sancho писал(а):
16.01.2019{, 14:38}
Anydy писал(а):
16.01.2019{, 11:13}
Блок дисплея тормозит
Он не тормозит. Он вносит свою задержку в время цикла.
Генератор работает примерно так, полу-период 500.
Замеряем время текущее, к примеру 10000, это "старое время". В каждом цикле проверяем: текущее - старое >500?
Если да, то старое = текущее +500, инертируем выход.
И т.д.
И когда генератор сравнивает время с предыдущего замера, а там дисплей или ещё чего, то прошло уже не 500, а 505, 520, 595... - но ему пофиг, условие выполнено.
Вот так и набегают лишние секунды.

Отправлено спустя 17 минут 26 секунд:
Есть на форуме блок секундных импульсов - но он на прерываниях, в данном случае излишне, но для теста - оно.
Для остального - свой блок, без прерываний в несколько строк.
Поэтому используйте или часы, 3231, или вот так :)
В начале опишу, что к чему
Первая строчка - время с часов реального времени, 3231.
Вторая - при запуске считывает время с 3231, далее считает сам.
Видео:
Когда время останавливается - это имитация не работы блока, но он потом наверстает.
Блок выдаёт 1 на каждый цикл по прошествии 1 секунды с начала работы мк.
Если по каким-то причинам он не работал, он будет выдавать 1 столько циклов, сколько секунд, 1000мс, прошло с начала работы мк :)
Проект:
Проверка генератора v_01.flp
(180.75 КБ) 2 скачивания
Видео начало работы:
Видео работы после отключения останова, отпускания "тормозов"
Как видно, милисекунды не идеальные, но коррекцией 1000 +-1,2, 3... в блоке можно подстроить под текущий кварц на плате
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

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

Фишки и не только FLProg

#3

Сообщение Sancho » 13.03.2019{, 11:43}

Счётчик, новый.
И всё-таки в нём достаточно недомолвок, на мой скромный взгляд.
Пока только о типе данных integer, -32768....32767.
Например, решил пользователь создать реверсивный счётчик, круговой так сказать, 0...100.
И это будет весьма специфически выглядеть, неожиданно :)
СпойлерПоказать
счётчик реверс 01.png
Вот если немного изменить текст в блоке:
"При достижении верхней границы" на "Если более"
кстати, этому тогда и будет соответствовать символ ">L" на выходе"Установить в единицу выход" блока,
и заменить в коде
if(_count2_Value >= 11) {_count2_Value = 0;}
">=" на просто ">" тогда настройка счётчика "сверху" будет правдоподобной.
То-же касается "Если менее".
СпойлерПоказать
счётчик реверс вверх 02.png
счётчик реверс вверх 02.png (8.19 КБ) 37 просмотров
Ко всему прочему, при настройках из первой картинки, но замене обоих "установить текущее..." на две галочки "остановить" счёт, получим диапазон другой, -1...101 :)
СпойлерПоказать
счётчик останов 03.png
Сложности при такой замене в коде возникают при крайних значениях и при применении типа unsigned,ведь число такого типа не может быть меньше нуля.
И это уже совсем другая история, :smile37: ....
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

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

Фишки и не только FLProg

#4

Сообщение Sancho » 13.03.2019{, 11:44}

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

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

Фишки и не только FLProg

#5

Сообщение Sancho » 13.03.2019{, 11:44}

и вдруг всё-таки не хватит )
Надеюсь, пригодится.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Ответить

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

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

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