Не совместимость защиты от дребезга и цикла платы

Ответить
Аватара пользователя
electrobitstorm
Рядовой
Сообщения: 11
Зарегистрирован: 14.09.2015{, 13:47}
Репутация: 0
Имя: Сергей

Не совместимость защиты от дребезга и цикла платы

#1

Сообщение electrobitstorm » 24.02.2023{, 12:09}

Tему с ошибками Flprog (Bug Tracker) не смог найти, буду признателен, если модератор создаст такую... Или укажите мне пожалуйста куда в следующий раз стучаться.

Имеем простенький скетч (рис1), где вторая плата работает в цикле при переменной prog_mode = 1.
Из цикла её выключить кнопкой не получается.
1.jpg
дело оказалось в защите от дребезга...
Если в настройке входа снять галочку защиты и на каждой плате использовать после выхода базовый блок Bounce, то всё работает как надо. (рис2)
2.jpg
Это баг? думаю да, ведь проблемма не очевидна, и проявилась при использовании цикла платы.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Не совместимость защиты от дребезга и цикла платы

#2

Сообщение Dryundel » 24.02.2023{, 12:55}

electrobitstorm писал(а):
24.02.2023{, 12:09}
Tему с ошибками Flprog (Bug Tracker) не смог найти, буду признателен, если модератор создаст такую...
Не надо вам в такую тему. Здесь, в песочнице норм с такими "багами".
electrobitstorm, Вы когда о чем то спрашиваете или утверждаете, прикладывайте проект пожалуйста.
Итак, по первому скрину.
Ваша переменная prog-mode, с таким подключением может переключаться только в true. А в плате по условию, только в false.
Как то все очень закручено. никак не могу понять логику того, что Вы хотите добиться.

Поясните пожалуйста основную идею на словах.

Отправлено спустя 20 минут 39 секунд:
Попробую пованговать.
Если Вы просто хотите включать выключать генератор, то плат по условию не нужно.
1.jpg
1.jpg (5.39 КБ) 758 просмотров
Если требуется все-таки включать выключать с одной кнопки работу платы, то так.
2.jpg
2.jpg (18.92 КБ) 758 просмотров
Для кнопки обязательно включайте подтяжку и инвертируйте выход блока "Вход", если конечно нет физической.

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

Не совместимость защиты от дребезга и цикла платы

#3

Сообщение Sancho » 24.02.2023{, 13:27}

При установке режима входа "защита от дребезга" генерируется код, который размещается в начале блока loop. Выход обработанных данных один для всего проекта. Считывание данных со входа - каждый раз в начале цикла.
При использовании блоков - необходимый код вставляется перед каждым входом. Сколько раз используется вход, столько раз будет происходить считывание входа мк и запускаться своя часть кода( со своими переменными) обработки дребезга.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
electrobitstorm
Рядовой
Сообщения: 11
Зарегистрирован: 14.09.2015{, 13:47}
Репутация: 0
Имя: Сергей

Не совместимость защиты от дребезга и цикла платы

#4

Сообщение electrobitstorm » 24.02.2023{, 13:32}

Dryundel, если бы всё так просто было... этот маленький скетч сделан мною, чтобы просто и наглядно было... (естественно я это использую в большом проэкте где 5плат и очень много ресурсоёмких блоков и скорость важна)

вторая плата должна работать в цикле (весь остальной скетч при этом останавливается) до смены переменной на ноль
3.jpg
Отправлено спустя 4 минуты 27 секунд:
w4.flp
(177.48 КБ) 17 скачиваний
уберите блоки дребезга и поставьте галку у входа и почуствуйте разницу

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Не совместимость защиты от дребезга и цикла платы

#5

Сообщение Dryundel » 24.02.2023{, 13:38}

electrobitstorm писал(а):
24.02.2023{, 13:32}
вторая плата должна работать в цикле (весь остальной скетч при этом останавливается) до смены переменной на ноль
Ну хоть что то стало понятно. Сейчас сделаем...

Аватара пользователя
electrobitstorm
Рядовой
Сообщения: 11
Зарегистрирован: 14.09.2015{, 13:47}
Репутация: 0
Имя: Сергей

Не совместимость защиты от дребезга и цикла платы

#6

Сообщение electrobitstorm » 24.02.2023{, 13:48}

Sancho, я так понимаю, что при использовании Цикла while, в нем не должно ломаться обработка защиты от дребезга входа, он ведь по смыслу должен работать на всё программу, а она ломается

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Не совместимость защиты от дребезга и цикла платы

#7

Сообщение Ingwar » 24.02.2023{, 14:35}

electrobitstorm писал(а):
24.02.2023{, 13:48}
обработка защиты от дребезга входа
Банальная установка конденсатора неприемлема?
Или это дело принципа? :smile38:
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

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

Не совместимость защиты от дребезга и цикла платы

#8

Сообщение Sancho » 24.02.2023{, 14:43}

electrobitstorm писал(а):
24.02.2023{, 13:48}
Sancho, я так понимаю, что при использовании Цикла while, в нем не должно ломаться обработка защиты от дребезга входа, он ведь по смыслу должен работать на всё программу, а она ломается
Как я уже писал
Sancho писал(а):
24.02.2023{, 13:27}
При установке режима входа "защита от дребезга" генерируется код, который размещается в начале блока loop. Выход обработанных данных один для всего проекта. Считывание данных со входа - каждый раз в начале цикла.
Поэтому в цикле платы Вы никогда не узнаете о нажатой кнопке.
Обсуждалось уже, один раз точно!
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Не совместимость защиты от дребезга и цикла платы

#9

Сообщение Dryundel » 24.02.2023{, 14:43}

electrobitstorm, да, это в принципе можно назвать багом. Санчо правильно сказал.
Sancho писал(а):
24.02.2023{, 13:27}
При установке режима входа "защита от дребезга" генерируется код, который размещается в начале блока loop.
И так для каждого входа. Даже если это отдельный вход(кнопка) и используется только в цикле.
.
electrobitstorm писал(а):
24.02.2023{, 13:48}
я так понимаю, что при использовании Цикла while, в нем не должно ломаться обработка защиты от дребезга входа
В цикл while этот код не попадает, т.к. находится в Loop. Надо что то придумывать с функцией.

Отправлено спустя 1 минуту 12 секунд:
Sancho писал(а):
24.02.2023{, 14:43}
Поэтому в цикле платы Вы никогда не узнаете о нажатой кнопке.
О нажатой кнопке то узнаем. А вот про таймер дребезга увы нет.

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

Не совместимость защиты от дребезга и цикла платы

#10

Сообщение Sancho » 24.02.2023{, 14:48}

Обсуждали тут

Добавлю. Используйте блок bounce, как Вы и сделали, он будет на этой-же плате, и вход ноги мк будет считываться именно в этом месте, а не перед первой платой.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Не совместимость защиты от дребезга и цикла платы

#11

Сообщение Dryundel » 24.02.2023{, 14:49}

Надо либо прописывать этот кусок в while, либо что то с функцией для антидребезга придумывать.

Отправлено спустя 6 минут 57 секунд:
electrobitstorm, а пока могу предложить следующее.
При компиляции скопировать вот такой кусок кода из начала секции Loop и вставить его в начало (можно и в конец) цикла while для платы.
СпойлерПоказать

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

    bool  _bounceInputTmpD2 =  (digitalRead (2));
    if (_bounseInputD2S)
    {
        if (millis() >= (_bounseInputD2P + 40))
        {
            _bounseInputD2O= _bounceInputTmpD2;
            _bounseInputD2S=0;
        }
    }
    else
    {
        if (_bounceInputTmpD2 != _bounseInputD2O)
        {
            _bounseInputD2S=1;
            _bounseInputD2P = millis();
        }
    }

Аватара пользователя
electrobitstorm
Рядовой
Сообщения: 11
Зарегистрирован: 14.09.2015{, 13:47}
Репутация: 0
Имя: Сергей

Не совместимость защиты от дребезга и цикла платы

#12

Сообщение electrobitstorm » 24.02.2023{, 15:03}

Sancho, Dryundel, вот я и пару часов потратил, чтобы это понять.. А ведь Flprog (сделана не для программистов :) должна этот момент учитывать... значит в программе нужно дописать, что при использовании цикла все входы, которые используются в цикле, и имеют программную защиту от дребезга, надо ещё раз добавлять bounce (или в справке хотя-бы добавить) иначе ещё не одна тема появится...

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Не совместимость защиты от дребезга и цикла платы

#13

Сообщение Dryundel » 24.02.2023{, 15:16}

electrobitstorm писал(а):
24.02.2023{, 15:03}
вот я и пару часов потратил, чтобы это понять.. А ведь Flprog (сделана не для программистов
FLProg для будущих программистов! :smile38:

Отправлено спустя 1 минуту 46 секунд:
electrobitstorm, И может быть как то попроще с проектом? Типа так.
СпойлерПоказать
3.jpg
3.jpg (34.41 КБ) 673 просмотра
w4_New.flp
(128.92 КБ) 16 скачиваний

Аватара пользователя
electrobitstorm
Рядовой
Сообщения: 11
Зарегистрирован: 14.09.2015{, 13:47}
Репутация: 0
Имя: Сергей

Не совместимость защиты от дребезга и цикла платы

#14

Сообщение electrobitstorm » 24.02.2023{, 15:40}

Так не будет работать... выбрвться из while не получается... только если добавить bounce/

а с таймерами и доп диодами сделано, чтобы наглядней было.. это не проект, а для демонстрации

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Не совместимость защиты от дребезга и цикла платы

#15

Сообщение Dryundel » 24.02.2023{, 16:24}

electrobitstorm писал(а):
24.02.2023{, 15:40}
Так не будет работать... выбрвться из while не получается... только если добавить bounce/
Для того чтобы работало надо скопировать код в while, как я писал выше.
Или добавить блоки bounce перед триггерами и выключить дебонс в блоке входа, как писал Sancho.

Любой из этих вариантов будет работать.

Ответить

Вернуться в «Помогите, а то я "нимагу"»