Практика помехоустойчивости: INPUT с внешней стяжкой или INPUT_PULLUP (возможно, с доп подтяжкой)

NA
Offline
Зарегистрирован: 06.02.2018

Сабж. В первую очередь интересует именно практический опыт.

С точки зрения кода - имхо удобней стяжка (наличие событий на всём порту достаточно сравнить с 0. Да, можно и с 255, но 0 нам всем нагляднее).

Аппаратная часть не изменится - т.к. около кнопок есть и +12, и Gnd.

Длина кабеля планируется в пределах 15 метров, UTP или - возможно - другая качественная медяшка. Лично у меня на подобной длине особых проблем ранее не замечалось в обоих случаях (HIGH-LOW - Холла, герконы, кнопки), но хочется больше статистики (и рекомендаций от практиков) до того, как будут приняты решения по железу.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

+ за внешнюю подтяжку к питанию и работу по низкому уровню.

sadman41
Offline
Зарегистрирован: 19.10.2016

Кстати, подтяну свой уровень вопросом: есть ли какая-либо потенциальная опасность в том, чтобы продублировать внутренний pull-up резистор внешним?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

sadman41 пишет:

Кстати, подтяну свой уровень вопросом: есть ли какая-либо потенциальная опасность в том, чтобы продублировать внутренний pull-up резистор внешним?

Внутренняя подтяжка слабэнька обычно, предпочитаю внешнюю. При этом при необходимости юзаю и внутреннюю (забыл внешнюю развести на плате, например). Ума не приложу, откуда бы там взяться опасности - подтяжка и подтяжка, внешнюю обычно посильнее внутренней ставят, да и удобней так, пмсм.

NA
Offline
Зарегистрирован: 06.02.2018

sadman41 пишет:

Кстати, подтяну свой уровень вопросом: есть ли какая-либо потенциальная опасность в том, чтобы продублировать внутренний pull-up резистор внешним?

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

sadman41
Offline
Зарегистрирован: 19.10.2016

Я про случай когда на макетке отгонял с внутренней, а потом то же самое, не меняя INPUT_PULLUP на INPUT воткнул на плату со внешней. Так-то я тоже опасности не вижу (если не сильно занижать сопротивление внешнего), но на всякий пожарный решил спросить, раз возможность подвернулась.

NA
Offline
Зарегистрирован: 06.02.2018

По моей практике (именно на кабеле) было несколько случаев, когда устойчивость просто пришлось дотягивать внешней подтяжкой, без вариантов. Что висело в качестве датчиков - не вспомню уже. Но было такое дело.

NA
Offline
Зарегистрирован: 06.02.2018

Вообще, в теории, недостаточная подтяжка чувствительна в первую очередь к просадкам напряжения (запуск мотора, включение реле, падение в первичной сети), недостаточная стяжка - к импульсным помехам. Это тоже можно рассматривать как фактор выбора (ну нет вдруг возможности повысить питание или разделить цепи, или хотя бы привесить хороший электролит, например). Или наоборот - не удаётся вычислить или экранировать\исключить источник помех.

Невитой кабель - имхо в обоих случаях подвержен примерно равно. Зато подтяжку можно эффективно сдублировать на дальней стороне (если есть питание), а со стяжкой (опять же имхо) ситуация на кабеле чуть хуже. Но статистика - она пообъективнее, чем имхо), потому создал ветку.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

sadman41 пишет:

Я про случай когда на макетке отгонял с внутренней, а потом то же самое, не меняя INPUT_PULLUP на INPUT воткнул на плату со внешней. Так-то я тоже опасности не вижу (если не сильно занижать сопротивление внешнего), но на всякий пожарный решил спросить, раз возможность подвернулась.

"если не сильно занижать сопротивление внешнего" - вот и вся тонкость, собсно.  Ну а так, конечно - лучче что-то одно - делитель он и в африке делитель.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Где-то в интернете читал что внутренняя подтяжка может банально и достаточно часто сдохнуть и вроде нормальный чип перестаёт работать, потому просто на всякий случай всегда 10 КОм резистором дублирую внутреннюю. Занимает не много места, а на душе спокойнее.

NA
Offline
Зарегистрирован: 06.02.2018

NA пишет:
С точки зрения кода - имхо удобней стяжка (наличие событий на всём порту достаточно сравнить с 0. Да, можно и с 255, но 0 нам всем нагляднее).

Кстати, вот почему ещё "0" лучше. Если в ходе работы часть входов необходимо исключить из запроса, это корректируется простым маскированием до сравнения, и никаких других изменений нигде в коде не требуется. "0" всегда остаётся "0", и в этом безупречен и безопасен.

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

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

NA пишет:

А вот при подтяжке - необходимо сравнение каждый раз с разным числом

А сколько Вы знаете разных логических единиц?

NA
Offline
Зарегистрирован: 06.02.2018

Единиц - одну. А их комбинаций с нулями - при штатном оперировании переменными - примерно 2^31 в обе стороны от оного. Применительно к собранному из 3х-4х физических одному виртуальному порту в 8 (при желании больше) разрядов - существенно меньше (от 255 и выше). Но это в 255 раз больше, чем один ноль (да простят математики). Плюс сама необходимость внедрения лишней динамически изменяемой сущности... Описанный ранее сбой вполне реален, если проект развит чуть более, чем ногодрыг. Хотя и в нём... тему можно развивать долго, но не в этой ветке. На вопрос я ответил.

А Вам есть что рассказать непосредственно о практике помехоустойчивости в работе по верхнему и нижнему уровням?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

NA пишет:

Единиц - одну. А их комбинаций с нулями - при штатном оперировании переменными - примерно 2^31 в обе стороны от оного. Применительно к собранному из 3х-4х физических одному виртуальному порту в 8 (при желании больше) разрядов - существенно меньше (от 255 и выше). Но это в 255 раз больше, чем один ноль (да простят математики). Плюс сама необходимость внедрения лишней динамически изменяемой сущности... Описанный ранее сбой вполне реален, если проект развит чуть более, чем ногодрыг. Хотя и в нём... тему можно развивать долго, но не в этой ветке. На вопрос я ответил.

А Вам есть что рассказать непосредственно о практике помехоустойчивости в работе по верхнему и нижнему уровням?

Т.е. одна кнопка у Вас передает "примерно 2^31 в обе стороны"? Я тоже хочу такую кнопку!

Помехоустойчивость как таковая напоминает коня. Сферического. Теоретически никакой разницы, куда притягивать, - нет. Существенное - в деталях. В частности, как выполнены входные и выходные каскады. Кстати, по условию около кнопки присутствует как земля, так и питание. Ничто в этом случае не мешает использовать двухтактный активный выход.

NA
Offline
Зарегистрирован: 06.02.2018

Уважаемый, давайте оптимизировать самый ценный невозобновляемый ресурс. Он называется "время жизни".

Для понимания "многоразрядной кнопки" написано достаточно в предыдущем сообщении. Sapienti Sat.
За очередную - на этот раз hardware - лишнюю сущность отдельное спасибо) - дополнительных задержек и непредсказуемостей мне не надо, иначе не собирал бы порты. Как и усложнения целого пула периферии активными каскадами. Конечно, применений им, безусловно, существует немало, но не для текущей задачи. Как и других прекрасных веток для сферических разработчиков на этом и других форумах.

Что интересует меня, как ТС, в этой ветке - это практические обобщения и мнения по сабжу от тех, кто имеет реальный опыт (а не сферический). Теоретическая разница как раз есть, и описана в т.ч и мной выше (повторюсь, стяжка независима от просадок напряжения, в отличие от подтяжки - как очевидный пример). Спасибо за понимание)

NA
Offline
Зарегистрирован: 06.02.2018

По описанным здесь и ряду иных причин решил совместить достоинства обоих вариантов (и убить пару попутных зайцев). Порты будут на входах с внешней подтяжкой и NC-контактами на массу на концах шлейфов.

Это буде кто тем же вопросом задастся. Всем участникам продуктивной части обсуждения спасибо :)

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

NA пишет:

По описанным здесь и ряду иных причин решил совместить достоинства обоих вариантов (и убить пару попутных зайцев). Порты будут на входах с внешней подтяжкой и NC-контактами на массу на концах шлейфов.

Т.е. универсальность подхода, я правильно понял? А не проще тогда сразу на плате предусмотреть площадки: запаял так - подтяжка, запаял эдак - стяжка? Или я чего-то не уловил?

NA
Offline
Зарегистрирован: 06.02.2018

DIYMan пишет:

NA пишет:

По описанным здесь и ряду иных причин решил совместить достоинства обоих вариантов (и убить пару попутных зайцев). Порты будут на входах с внешней подтяжкой и NC-контактами на массу на концах шлейфов.

Т.е. универсальность подхода, я правильно понял? А не проще тогда сразу на плате предусмотреть площадки: запаял так - подтяжка, запаял эдак - стяжка? Или я чего-то не уловил?

Имеется в виду, что со стороны процессора всегда на всех входах подтяжка, а со стороны всех шлейфов нормальный "коротыш". То есть, нажатие кнопки не замыкает, а размыкает линию, "освобождая" подтяжку. Странно, что такого очевидно удобного решения на просторах планетного разума нет. Или просто не встретилось.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

NA пишет:

Имеется в виду, что со стороны процессора всегда на всех входах подтяжка, а со стороны всех шлейфов нормальный "коротыш". То есть, нажатие кнопки не замыкает, а размыкает линию, "освобождая" подтяжку. Странно, что такого очевидно удобного решения на просторах планетного разума нет. Или просто не встретилось.

Спасибо, это надо обмозговать.

NA
Offline
Зарегистрирован: 06.02.2018

DIYMan пишет:

NA пишет:

Имеется в виду, что со стороны процессора всегда на всех входах подтяжка, а со стороны всех шлейфов нормальный "коротыш". То есть, нажатие кнопки не замыкает, а размыкает линию, "освобождая" подтяжку. Странно, что такого очевидно удобного решения на просторах планетного разума нет. Или просто не встретилось.

Спасибо, это надо обмозговать.

А главное, вдогонку к такому решению вагон и маленькая тележка вполне себе весомых бесплатных ништяков. К примеру, непрерывный контроль целостности линии ;) и далее по списку.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

NA пишет:

А главное, вдогонку к такому решению вагон и маленькая тележка вполне себе весомых бесплатных ништяков. К примеру, непрерывный контроль целостности линии ;) и далее по списку.

А как Вы нарушение целостности отличаете от нажатия на кнопку?

arduinec
Offline
Зарегистрирован: 01.09.2015

При адаптации транзистор-тестера к Ардуине (http://arduino.ru/forum/proekty/transistor-tester-arduino) прочитал, что в коде может применяться команда, отключающая внутреннюю подтяжку к питанию всех пинов, поэтому при подключении кнопки использовал внешнюю подтяжку. Так как кнопка была поключена к аналоговому порту, то при подтяжке в 10 кОм при нажатии на кнопку слегка проседало напряжение, что влияло на измерения на соседних аналоговых портах. Поэтому подтягивающий резистор поставил 100 кОм, а в скетче добавил небольшую задержку перед началом измерений.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

arduinec пишет:

то при подтяжке в 10 кОм при нажатии на кнопку слегка проседало напряжение

Штооо?  Мошт ты на 10 Ом влепил по ошибке? 

arduinec
Offline
Зарегистрирован: 01.09.2015

DetSimen пишет:

arduinec пишет:

то при подтяжке в 10 кОм при нажатии на кнопку слегка проседало напряжение

Штооо?  Мошт ты на 10 Ом влепил по ошибке? 

Напряжение проседает на несколько милливольт, но на измерения транзистор-тестера это уже влияет.
Когда я собирал проект на макетке, то провода и контакты тоже помехи давали.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Ну, тогда - да. Согласен. 

NA
Offline
Зарегистрирован: 06.02.2018

arduinec пишет:

При адаптации транзистор-тестера к Ардуине (http://arduino.ru/forum/proekty/transistor-tester-arduino) прочитал, что в коде может применяться команда, отключающая внутреннюю подтяжку к питанию всех пинов, поэтому при подключении кнопки использовал внешнюю подтяжку. Так как кнопка была поключена к аналоговому порту, то при подтяжке в 10 кОм при нажатии на кнопку слегка проседало напряжение, что влияло на измерения на соседних аналоговых портах. Поэтому подтягивающий резистор поставил 100 кОм, а в скетче добавил небольшую задержку перед началом измерений.

Теперь я знаю, что буду собирать следующим в ближайшее свободное время ;)

 

P.S. Разделение реального нажатия кнопки и обрыва/плохого контакта (а это две разных неисправности) до банальности тривиально. Не упомянул я ещё один бесплатный приз от такого подключения - проводок от COM-вывода кнопки (он же "подтянутый вход", а NC на "массе") на мосфет для местной индикации без инвертирования и прочих заморочек, и без подвешивания гейта в воздухе на момент переключения или ожидания.

 

ВН
Offline
Зарегистрирован: 25.02.2016

NA пишет:

 на мосфет для местной индикации без инвертирования и прочих заморочек...

и чтобы Козел на саксе,- фа...-до-фа ... до-фа -до- фа- до- фа .. 

NA
Offline
Зарегистрирован: 06.02.2018

ВН пишет:
NA пишет:
на мосфет для местной индикации без инвертирования и прочих заморочек...
и чтобы Козел на саксе,- фа...-до-фа ... до-фа -до- фа- до- фа ..

Это смотря каким уровнем козёл управляется)) а то ведь ни ноты без б.. электрона)

Green
Offline
Зарегистрирован: 01.10.2015

andycat пишет:
Где-то в интернете читал что внутренняя подтяжка может банально и достаточно часто сдохнуть и вроде нормальный чип перестаёт работать, потому просто на всякий случай всегда 10 КОм резистором дублирую внутреннюю. Занимает не много места, а на душе спокойнее.

Даже на ресете часто обходился внутренней подтяжкой... Но после пары случаев стараюсь ставить внешнюю - внутренняя вылетала по непонятным причинам. Именно на ресете, на других пинах подобного не наблюдал.