Tire alto en el software

1

Estaba portando la biblioteca Arduino ps / 2 mouse a la foto y Me pregunté por qué funciona el control alto cuando declaro el pin como una entrada y luego lo hago alto y eso funcionó para pic y Arduino por igual, pero cuando declaro el pin como una salida y luego escribo alto, no entendí bien el acuse de recibo. / p>

¿Por qué Pull High requiere ser una entrada y por qué el software que escribe en una entrada funciona?

    
pregunta Catch.Me

1 respuesta

3

Una entrada que se "arrastra hacia arriba" al referirse a ella, o también "tirada hacia arriba" comúnmente se refiere a una señal que está conectada a un riel positivo a través de una resistencia de valor medio (generalmente unos 10s de kΩ). Como tal, su nivel de voltaje está definido por el riel positivo, siempre que no fluya una corriente significativa a través de la resistencia de levantamiento. Dentro del PIC o AVR, se ve algo como esto:

simular este circuito : esquema creado usando CircuitLab

Si extraemos una corriente significativa de ese pin de E / S, por ejemplo, conectándolo a tierra a través de una baja impedancia, ya sea un cable, un interruptor o un transistor de colector abierto , el voltaje en el pin de E / S caerá. Esto suena como algo malo, pero puede ser realmente útil. Nos permite definir el voltaje predeterminado en el pin de E / S y luego permitir que los circuitos externos lo modifiquen. Aún mejor, ya que no requerimos que esos circuitos definan el voltaje de estado alto por sí mismos, podría tener muchos conmutadores (o resistencias de colector abierto) en paralelo, y si alguno de ellos se enciende, eso provocaría que I / O pin voltaje bajo. El protocolo I2C hace uso de esto para permitir que el dispositivo esclavo reconozca la transferencia de datos tirando del pin SDA (datos) extraído.

No tengo ningún conocimiento práctico de PS / 2, pero supongo que está ocurriendo el mismo tipo de cosas aquí. Si maneja el pin alto como salida, en lugar de estar a través de una resistencia de valor medio, lo está manejando con fuerza a través de un transistor, y esa es una ruta de resistencia mucho más baja. Tendría que sacar mucha más corriente del pin para reducirlo, por lo que el reconocimiento no funcionará. Puede pensar en esto como un pin levantado que es un estado de voltaje débilmente definido; otros circuitos pueden cambiar la tensión en el pin de manera relativamente fácil. Un pin impulsado por salida es un estado mucho más definido, y deliberadamente, ya que no quieres que sea susceptible a la influencia de otros circuitos.

En cuanto a por qué escribir un valor alto en un pin de entrada funciona, esto es una peculiaridad de la forma en que se presentan los registros dentro del AVR y el PIC. Si el bit DDxn para un pin en particular está configurado para ser una entrada, el AVR interpreta el bit de valor PORTxn como si se debe conectar un pull up o no. Si el bit DDxn está configurado para ser una salida, el bit de valor PORTxn determina el nivel de la unidad (alto o bajo). Para obtener una explicación de esto, consulte la p.76 de Hoja de datos de Atmega328 . Otras arquitecturas reaccionan de manera diferente (algunas, por ejemplo, permiten la conexión de una resistencia de pull-up o pull-down, a través de diferentes configuraciones de registro). A medida que Arduino ha crecido para incluir una gama más amplia de arquitecturas, el uso de

pinMode(pin, INPUT);
digitalWrite(pin, HIGH);

para habilitar una entrada extraída ha sido reemplazado por

pinMode(pin, INPUT_PULLUP);

para que sea más fácil de entender y más generalmente adaptable a arquitecturas más modernas.

    
respondido por el stefandz

Lea otras preguntas en las etiquetas