Неправильно ли писать HIGH на контакте, используемом в качестве открытого коллектора?

Я инженер-программист, играю с PIC, и у меня есть старая мышь PS/2, которую я использую (успешно), которая имеет соединения CLK и DATA в качестве открытых коллекторов.

Итак, я настроил внутренние подтяжки на соответствующих контактах PIC и устанавливаю TRIS на 1, чтобы линии были высокими, и устанавливаю TRIS на 0 и записываю 0 в соответствующий бит PORT, чтобы установить его на низкий уровень.

Однако я видел несколько похожих реализаций мыши PIC-to-PS/2, которые при записи в мышь устанавливали TRIS в 0 и записывали 1 в бит PORT вместо установки TRIS в 1.

Насколько я понимаю, любой из них приведет к тому, что линия будет выше (правильно ли это?), но мне не ясно, является ли один из них каким-то образом «лучше/безопаснее», чем другой.

Должен ли я просто следовать примерам (предположительно) более опытных реализаций и записывать 1 в ПОРТ, когда PIC контролирует шину, или я должен всегда делать линию высокой, три-состояние до высокого импеданса и позволяя подтягиванию делать это?

Я надеюсь, что это имеет смысл, и я не перепутал никакую терминологию — буду рад любым общим советам о передовых методах подключения с открытым коллектором.

Ответы (2)

Нет ничего плохого в том, чтобы установить вывод ВЫСОКИЙ, но это может привести к конфликтам на выходе . То есть вы можете столкнуться с ситуацией, когда ваш код устанавливает на контакт ВЫСОКИЙ уровень, а устройство на другом конце пытается перевести тот же контакт на НИЗКИЙ уровень. Протокол мыши (и клавиатуры) PS/2 использует сигнализацию с открытым коллектором, чтобы избежать конкуренции. В системе с открытым коллектором предполагается, что сигналы имеют ВЫСОКИЙ уровень, когда они не управляются выводом, т. е. когда вывод (выводы) имеет высокий импеданс. Устройство может безопасно вытянуть НИЗКИЙ контакт на любом конце провода.

Так что, вероятно, лучше всего использовать TRIS в этом случае.

Хорошо, спасибо, это имеет смысл. Означает ли это, что если я веду булавку высоко, а мышь опускает булавку, я могу взорвать булавку?
@RogerRowland Возможно, но маловероятно, если короткометражка будет короткой. Тем не менее, лучше избежать этой ситуации.
Хорошо, тогда я буду избегать этого. Мне кажется безопаснее! Еще один момент — будет ли значительная разница во времени, которое требуется линии, чтобы подняться вверх? Извините, если это глупый вопрос. Все еще на кривой обучения здесь.
@RogerRowland В принципе, линия будет расти ВЫШЕ быстрее, если вы едете ВЫСОКО. Подтягивающий резистор должен заряжать емкость проводки. Если установить его ВЫСОКИЙ уровень, то ток будет больше, а емкость будет заряжаться быстрее. Но выбор номинала подтягивающего резистора, скорости передачи данных и протокола должен избежать каких-либо проблем.
Еще раз спасибо, Джон. Моя мышь PS/2, кажется, обеспечивает тактовую частоту ~ 12,5 кГц, так что я думаю, что это не «быстро»? Я понятия не имею, какие встроенные подтяжки есть на моем PIC (я использую PIC16F648A). Я ожидаю, что я сосу его и увижу ....

Есть один случай, когда полезно установить вывод ВЫСОКИЙ.

Там, где логика с открытым коллектором относительно медленная, либо из-за того, что подтягивающий резистор должен иметь высокий уровень (для экономии энергии), либо из-за того, что он подключен к длинному проводу или дорожке печатной платы, выход может быть переведен в ВЫСОКИЙ уровень в течение одного тактового цикла и трижды. указано в след. (Это должно происходить как атомарная операция, например, с отключенными прерываниями)

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

Ах! Тогда лучшее из обоих миров? Фантастика! Я запускаю PIC на частоте 20 МГц, поэтому, возможно, только на ~ 400 нс, если я сделаю это двумя последовательными инструкциями. Я полагаю, что кабель мыши PS / 2 считается «длинным проводом», так что это был бы хороший подход?
Вы можете сделать это, но может быть лучше просто добавить внешние подтягивающие резисторы. Подтяжки микроконтроллера очень слабые; они в основном предназначены для предотвращения плавания неуправляемых входных данных. Вам не нужно ставить штифт в высокий уровень для такого низкоскоростного сигнала. Если это действительно 12,5 кГц, даже внутренние подтяжки, вероятно, достаточно быстры. Для уверенности нужен осциллограф.