Монтажное И

Распечатать

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

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


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

Как это можно использовать? Да по разному. Простеший пример — сигнал готовности. Есть куча блоков единого устройства. Каждый из которых работает по своему алгоритму и, например, требует начальную инициализацию. Чтобы главный понял, что все остальные блоки закончили инициализацию и подготовились он «слушает» линию связи. В качестве сигнала готовности — блок отпускает линию. Когда каждый блок пройдет инициализацию, то линия примет высокий уровень и это будет сигналом полной готовности устройства.

На этом же принципе работает и шина 1-Wire и I2C — там если приемник не успевает прожевать байт, то он просто придавливает тактовую линию, не давая передатчику генерировать импульсы. А передатчик, видя что его обламывают, делает паузу.

Как с этим работать
Очевидно, что при работе на шину с монтажным И нельзя в эту шину подавать сильный высокий уровень. Иначе если какой либо из блоков выдаст свой сильный низкий то один из них выгорит в результате КЗ. Соответственно, если говорить про AVR, то ноль задаем сочетанием DDR=1 PORT=0, а единицу (когда линия отпущена) DDR=0 PORT=0. Вот такая вот инверсная логика.

Запись опубликована в рубрике Начинающим с метками , , . Добавьте в закладки постоянную ссылку.

23 комментария: Монтажное И

  1. firehacker говорит:

    Я бы в раздел «Как с этим работать» добавил бы упоминание Pull-down транзистора. Мало ли у кого в Slave-устройстве какая-нибудь неинтеллектуальная микросхема с Push-pull-выходом.

  2. Thi3f говорит:

    Резистор нужен для того, чтобы между питанием и землей не было КЗ?

  3. Alex T. говорит:

    Вот по такому же принципу устроена линия сигнала RESET на материнских платах. Но на последних как правило установлена куча вот таких вот условных блоков, что приводит к трудностям нахождения неисправного блок, просаживающего уровень; приходится поочередно поднимать ноги RST на всех блоках;)

  4. denilson говорит:

    Даешь ИЛИ Монтажное! Вроде как отдельной статьи не было!
    Ура! Я знаю Монтажное И:)!

  5. Я про такое слышал, только монтажное И делалось для выходов «открытый коллектор». А с портами AVR интересная идея :) Главное КЗ не сделать случайно.

    • SWG говорит:

      Для страховки между выходами микросхем и общей точкой можно поставить диоды. Тогда пофигу, ОК или двухтактный выход. Правда, тогда «Монтажное И» превратится в диодную логику… Если критично падение напряжения на диодах, можно использовать германиевые или ВЧ Шоттки.

  6. MasterAlexei говорит:

    А разве это не «ИЛИ»?
    «И», насколько я помню, означает, что на выходу блока логическая 1 если на всех! входах так же логическая единица. А тут как бы один любой замкнул и усе. Так что это вроде как «ИЛИ» а не «И». Или нет?

  7. Nikita Nazarenko говорит:

    осталось рассказать про и-не элементы и как на их основе смастерить триггер :)

  8. Mer говорит:

    Не совсем понял, а как получается, что мы задаем единицу DDR=0,Port=0? этим мы определяем порт как вход, причем без подтягивающего резистора. Так же? Получается мы этим придавливаем линию..

  9. Mer говорит:

    В то же время сочетанием DDR=1 PORT=0 мы определим вывод как выход без сигнала. Тогда в линии установится высокий уровень..

  10. DI HALT говорит:

    Нет ,ты не понял.
    Тут единица возникает сама, Т.е. мы ее не устанавливаем. Мы просто включаем порт на вход. А ноль устанавливаем вручную.

    А то что ты сказал это нормальаня работа порта AVR при работе не на шину, а напрямую с ведомым устройством.

  11. Mer говорит:

    Я как раз насчет нормальной работы и уточнял. Спасибо за ответ, понятно )

  12. EPOX говорит:

    если я не шибаюсь по этому принципу работают датчики пожарной сигнализации

Добавить комментарий