¿Es incorrecto escribir ALTO en un pin usado como colector abierto?

1

Soy un ingeniero de software que juega con PIC y tengo un mouse PS / 2 antiguo que estoy usando (con éxito), que tiene conexiones CLK y DATA como colectores abiertos.

Así que he configurado los pullups internos en los pines PIC relevantes y estoy configurando TRIS en 1 para que las líneas se vuelvan altas y configurando TRIS en 0 y escribo 0 en el bit PORT correspondiente para forzarlo.

Sin embargo, he visto varias implementaciones similares de ratón PIC a PS / 2 que, al escribir en el mouse, establecen TRIS en 0 y escriben 1 en el bit PORT en lugar de configurar TRIS en 1.

Tal como lo entiendo, cualquiera de estos factores hará que la línea sea alta (¿es correcto?), pero no estoy claro si uno es de alguna manera "mejor / más seguro" que el otro.

¿Debería seguir los ejemplos de las implementaciones (presumiblemente) más experimentadas y escribir 1 en el PORT cuando el PIC está en control del bus, o debo siempre hacer que la línea esté alta por tri -estando a alta impedancia y dejando que el pullup lo haga?

Espero que tenga sentido y no he mezclado ninguna terminología; cualquier consejo general sobre las mejores prácticas para conexiones de colector abierto sería bienvenido.

    
pregunta Roger Rowland

2 respuestas

3

No es realmente incorrecto establecer el pin ALTO, pero hacerlo puede causar contención de salida . Es decir, es posible que se encuentre en una situación en la que su código esté conduciendo el PIN ALTO, pero el dispositivo en el otro extremo está tratando de conducir el mismo PIN BAJO. El protocolo del mouse (y teclado) PS / 2 usa señalización de colector abierto para evitar la contención. En un sistema de colector abierto, se supone que las señales flotan ALTAS cuando no están controladas por un pin, es decir, cuando el pin (s) tiene alta impedancia. El dispositivo puede tirar de un pasador BAJO de forma segura en cualquiera de los extremos del cable.

Por lo tanto, es probable que sea mejor usar TRIS en este caso.

    
respondido por el John Honniball
2

Hay un caso en el que es útil configurar el pin ALTO.

Cuando la lógica del colector abierto es relativamente lenta, ya sea porque la resistencia de pull-up debe ser alta (para ahorrar energía) o porque está conectada a un cable largo o una traza de PCB, una salida puede ser ALTA para un ciclo de reloj y triciado en el siguiente. (Esto debe ocurrir como una operación atómica, por ejemplo, con interrupciones desactivadas)

Esto da un tiempo de subida relativamente rápido, y limita la duración de cualquier contienda para que sea lo suficientemente corta como para no causar daño. (y, por supuesto, eso debe verificarse a través de las hojas de datos)

    
respondido por el Brian Drummond

Lea otras preguntas en las etiquetas