Открытый слив без подтягивания

Кажется, я неясно выразился, извините. Обновление для ясности / краткая версия:

  • 4 контакта Arduino UNO подключены к соответствующим контактам DE-9, отвечающим за направления ВВЕРХ, ВНИЗ, ВЛЕВО, ВПРАВО
  • Скетч Arduino имитирует действия джойстика
  • Устройство DE-9 действует как ведомое устройство — я устанавливаю соответствующие контакты Arduino на ВЫХОДНОЙ НИЗКИЙ уровень (устройство DE-9 регистрирует движение) или оставляю их как ВХОД (устройство DE-9 регистрирует отсутствие движения)

Вопрос: каковы недостатки использования ВЫХОДА с открытым стоком без подтягивания в ВЫСОКОМ состоянии для каждого контакта в этом сценарии?

Преимущества: больше нет переключения ВХОДА/ВЫХОДА, контакт отключен и не потребляет ток, что имитирует исходное состояние джойстика.


У меня есть небольшой проект, подключаемый к порту джойстика Atari (DE-9), используемому в ретро-компьютерах. По сути, все контакты направления DE-9 находятся в состоянии ВЫСОКОГО уровня. Для активации движения соответствующий(ие) контакт(ы) должен(ны) быть подтянут(ы) к НИЗКОМУ уровню.

Сначала я использовал выводы Arduino в режиме ВЫХОД/ВЫСОКИЙ уровень. Возможно, это был не лучший способ, поэтому теперь я держу их в режиме ВХОД и переключаю в ВЫХОД по мере необходимости. Но чем больше я читаю, тем больше идей приходит в голову. Я узнал, что в режиме ВЫХОДА с открытым стоком вывод либо имеет НИЗКИЙ уровень, либо отключен (плавающий). Обычно рекомендуется использовать подтягивающий резистор, чтобы вывод имел известное состояние. Но в моём случае это не нужно. Мне вообще не нужно считывать состояние выводов DE-9. Мне просто нужно подтянуть их к НИЗКОМУ уровню или вообще не трогать. Открытый сток кажется лучшим вариантом для этой цели, так как мне не придётся переключаться между режимами. Достаточно НИЗКОГО уровня для запуска перемещения или ВЫСОКОГО уровня для выключения вывода и отмены перемещения на DE-9.

Хорошая ли это идея? Есть ли какие-то побочные эффекты от отсутствия подтягиваний, о которых мне следует знать? Я знаю, что это творческий подход, но это мой личный проект, и мне не нужно следовать строгим правилам.

, 👍-1

Обсуждение

На Arduino для подключения к устройству с открытым стоком было бы нормально использовать pinMode(myPin, INPUT_PULLUP). В некоторых микроконтроллерах процесс записи высокого уровня на входной вывод может привести к активации внутреннего подтягивающего резистора вывода, что вам и нужно. Как уже говорилось в первом ответе ниже, для устройств с открытым стоком/открытым коллектором в микроконтроллере обязательно наличие подтягивающего резистора., @6v6gt

Вы не сказали, что делаете... Вы используете Arduino для считывания данных с джойстика Atari или используете Arduino для эмуляции джойстика Atari? ... пожалуйста, обновите свой пост, добавив пояснения., @jsotola

Да, видимо, я недостаточно ясно выразился. Пост обновлён!, @tOad


2 ответа


Лучший ответ:

1

Мы можем дифференцировать эти альтернативы, исключив те, которые потребуют дополнительного оборудования:

  1. Установите контакты в режим OUTPUT и переключайтесь между HIGH и LOW.
    • Это приводит к коротким замыканиям, когда управляемый компьютер использует контакты одновременно для нескольких джойстиков или мышей. Например, так делает Atari ST.
    • В этом случае не подключайте другой джойстик или мышь. Ни к тому же входу, ни к другому входу.
  2. Переключите вывод между режимом OUTPUT с уровнем LOW и режимом INPUT.
    • Это будет работать просто отлично.
    • Если вы случайно используете Arduino без подключения, в режиме ВВОД выводы будут «плавающими». Поскольку вы не планируете считывать данные с выводов, это не имеет значения. Однако ток потребления может увеличиться, если входное напряжение находится «между» допустимым диапазоном.
    • Защита контактов микроконтроллера обычно предотвращает повреждения. Однако разрядка электрического заряда при искровом прикосновении может быть слишком сильной. Вспомните «Рождество» и «шерстяной свитер».
  3. Используйте режим открытого стока и переключайтесь между HIGH и LOW.
    • Для реализации вам необходим прямой доступ к SFR вместо функций библиотеки Arduino.
    • Остальное как указано выше.
  4. Переключите вывод между режимом OUTPUT с уровнем LOW и режимом INPUT_PULLUP.
    • Это тоже будет работать отлично.
    • Уровни определяются в неподключенном состоянии.
    • Конечно, подтягивающие резисторы Arduino будут подключены параллельно резисторам управляемого компьютера. Но благодаря высокому сопротивлению резистора это не создаёт проблем.

Итак, отвечая на ваш вопрос («Этот [режим с открытым стоком] — хорошая идея?»): Да, хорошая. Однако, возможно, стоит рассмотреть вариант с подтягиванием.

Примечание 1: Учитывайте небольшой интервал переключения режима вывода и уровня вывода. Убедитесь, что вы не создаёте короткое замыкание, вместо этого примите во внимание короткий интервал плавающего состояния.

Примечание 2: Убедитесь, что вы подключили «землю» пятым контактом. Вы не упомянули об этом в своём вопросе.

,

Спасибо за подробное объяснение. Это именно то, что мне было нужно. Вы также разъяснили некоторые детали, о которых я не знал! Земля подключается так же, как и кнопка «Fire»., @tOad


0

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

Следите за уровнями напряжения. Подтягивающий трансформатор должен подтягиваться к логический уровень считывателя. Если это напряжение больше логического уровня писателя (Arduino), вам нужен соответствующий преобразователь уровня. В противном случае простое подключение должно работать нормально. В последнем случае вам можно записывать, переключая вывод между состоянием INPUT и ВЫХОД НИЗКОЕ состояние.

,