PIC18F2550 I2C Open Drain?

2

Por lo que he leído, los pines I2C son Open Drain o Open collector, pero en el PIC18F2550 la hoja de datos no dice nada sobre esos pines, e incluso dice que son una salida digital si los seleccionas como uno. ¿Necesito agregar una resistencia de pullup a los pines para usarlos como salida digital? Si no lo hago, ¿cómo funcionan en el I2C? Gracias!

    
pregunta mFeinstein

2 respuestas

2

Usted mismo puede hacer un drenaje abierto de cualquier pin digital en el PIC, ¡es fácil! Lo mostraré a través de un fragmento rápido de código de ejemplo utilizando RB0.

_TRISB0 = 1; // Set the pin to high impedance
_LATB0 = 0;  // Set the output low (this would be _PORTB0 on some pics)
// As long as you're using pin RB0 as a open-drain, don't touch _LATB0

// To output a "low" (drain) do this:
_TRISB0 = 0; // Set the pin to output, it's already low, so it will "drain"

// To output a "high" (open) do this:
_TRISB0 = 1; // Set the pin to high impedance, the pullup resistor will pull high

El módulo I2C hará algo similar a esto internamente, sin que usted haga nada. En otras palabras: ¡sí! ¡Necesitarás una resistencia pullup!

EDITAR: para responder a la segunda pregunta que no abordé directamente, el pin no necesita una resistencia de extracción durante la operación de salida digital normal. Mi ejemplo fue mostrarle cómo un pin de E / S digital normal y que funciona completamente podría funcionar como un drenaje abierto sin ningún comportamiento adicional o comportamiento inesperado. También debo tener en cuenta que he hecho esto exactamente lo que mostré aquí para hacer un drenaje abierto en programas reales, por lo que este no es un ejemplo de juguete, ¡es realmente cómo lo haces!

    
respondido por el Kit Scuzz
4

El PIC tiene un periférico integrado (el MSSP) que permite la operación i2c basada en hardware. El comportamiento de drenaje abierto se debe al hecho de que opera el control de dirección (también conocido como "TRIS") automáticamente para estos pines. Si el MSSP está deshabilitado, los pines del puerto se convierten en pines de E / S normales y ahora se controlan de manera convencional, y si se programan como salida, se activarán en alto o bajo.

Lo que te confundió fue el hecho de que pueden operar en cualquier modo. Usaría las resistencias pullup si estuvieran configuradas para i2c, pero no si los pines del puerto se estuvieran usando como E / S de propósito general.

    
respondido por el gbarry

Lea otras preguntas en las etiquetas