Entendiendo la salida digital PIC32 con drenaje abierto

0

Estoy tratando de entender cómo operar los pines digitales configurados como salidas de drenaje abierto en una pic32. Como he leído en otros foros, configurar TRISx en 0 y ODCx en 1 configura el pin como salida de drenaje abierto, y escribir 1 en LATx hará que la salida sea alta-Z (w / pullup resistor) y escribir 0 lo hará bajo.

Fuente: enlace

  

Si tiene una salida de drenaje abierto real, puede mantener TRIS bajo y controlar el transistor con LAT. LAT = 0 = > el transistor se cerró a tierra y la salida será baja, LAT = 1 = > el transistor abierto y la salida estarán flotando o sujetados en alto con una resistencia (o bajada por otra señal).

En lo que estoy atrapado es en esta parte del diagrama para los pines:

Del manual de referencia del puerto IO de PIC32

¿Qué hace ODCx si TRISx se establece en 0? La salida del multiplexor controlado por ODCx será baja sin importar qué, ya que es TRISx o (TRISx AND 'LATx), que siempre será 0 cuando TRISx sea 0.

    
pregunta tylero

2 respuestas

1

p12-3 de Puertos de E / S bajo 12.2.4 Registros para Open-Drain Configuración (ODCx):

  

n. Si el bit ODCx para un pin de E / S es un '1', el pin actúa como una salida de drenaje abierto.

y:

  

La configuración del registro ODCx tiene efecto en todos los modos de E / S, permitiendo que la salida se comporte como un drenaje abierto incluso si un periférico está controlando el pin. Aunque el usuario podría lograr el mismo efecto manipulando los bits LATx y TRISx correspondientes, este procedimiento no permitirá que el periférico funcione en modo de drenaje abierto

Para habilitar el modo de drenaje abierto, debes usar ODCx.

p12-3 en 12.2: 1 registros para configurar funciones de tres estados (TRISx)

  

Si el bit de dirección de datos es '0', el pin correspondiente del puerto de E / S es una salida

y en 12.2.3 Registros para configurar funciones de bloqueo (LATx)

  

Una escritura en un registro LATx enlaza los datos a los pines de E / S del puerto correspondiente. Los pines del puerto de E / S configurados como salidas se actualizan.

Entonces, ODCx = 1, TRISx = 0. Luego, envíe un 0 a LATx y la salida es baja. Un 1 y una salida son de drenaje abierto con un pull-up hasta un máximo de \ $ V_ {IH} \ $.

Que concuerda con tus pensamientos, web. Pero siempre es mejor ir a la hoja de datos.

    
respondido por el StainlessSteelRat
0

TRISx básicamente define si el pin es un pin de salida o no. ODCx determina si la salida está activa en ambos sentidos o SOLAMENTE se baja.

Por lo tanto, tiene razón, si TRISx no está configurado, ODCx no hace nada.

Tenga en cuenta que no es realmente de drenaje abierto ... es más bajo o desactivado. Por eso es prudente, al cambiar el modo de pin sobre la marcha, desactivar TRISx ANTES o al cambiar OCDx.

Por cierto: a partir de los circuitos mostrados, siempre he pensado que la implementación presenta un riesgo de carrera entre la propagación del valor de latch y la ruta del mecanismo de habilitación. Sin embargo, nunca tuve problemas con él, quizás otros hayan encontrado algunos comportamientos extraños.

    
respondido por el Trevor_G

Lea otras preguntas en las etiquetas