Cómo lidiar con múltiples resistencias pull-up en módulos

9

Estaba pensando en hacer un módulo para una placa de desarrollo que hice hace unos días que incluirá interfaces spi / i2c.

El problema es que no incluí resistencias pull-up en los pines MCU en la placa principal y estaba pensando en agregarlos en los módulos para hacerlos más "genéricos" para que cada usuario pudiera usarlos sin necesidad de agregar resistencias adicionales en El prototipo de tablero.

Pero luego me enfrenté al siguiente problema. Si agrego las resistencias pull-up en los módulos adicionales y conecto, por ejemplo, dos o más módulos al mismo bus, obtendré esas resistencias en paralelo para que la resistencia disminuya y no cumpla su función.

Pero si agrego las resistencias pull-up a la placa principal, tendré esos pines en la MCU siempre como activos bajos.

Entonces la pregunta principal es:

¿Cómo tener múltiples módulos conectados al mismo bus que tienen en cada uno de ellos las resistencias pull-up pero no tenerlos en paralelo cuando tienes más de un módulo? ¿Es eso posible?

¿O la mejor solución aquí es habilitar las resistencias pullup en la MCU y no incluirlas en los módulos?

Gracias.-

Sein Oxygen
fuente
Cree un módulo separado que contendrá solo resistencias pull-up :)
Alexandr Zarubkin

Respuestas:

14

Asumiré que la longitud total de cada uno de sus autobuses es inferior a 1 metro, lo cual es típico para I 2 C y SPI. Además, la capacitancia del bus está dentro de las especificaciones.

Debe haber solo un (1) conjunto de resistencias pull-up. Como resultado, el mejor lugar para ellos es en la placa controladora principal. No ponga los pull-ups en los módulos.

Si desea tener pull-up en algunos casos y no tenerlos en otros casos.

  • No llene las resistencias pull-up cuando no las necesite.
  • Diseñe la placa controladora principal de modo que los pull-ups estén conectados a las líneas de señal a través de puentes. Elimine los bloques de cortocircuito cuando no necesite las dominadas.

editar: Francamente, creo que es un error que Sparkfun ponga pull-ups en los módulos esclavos I 2 C. Desafortunadamente, no todos los que compran módulos se dan cuenta de que la extracción excesiva puede ser un problema. Sería mejor si las placas controladoras (en lugar de las placas periféricas esclavas) tuvieran pull-ups con puentes de soldadura. Oh ... espera ... Arduino no lleva los pull-ups (opcionales) (aunque tal vez debería). Entonces, hagamos pull-ups en todas partes. Experiencia inicial más fácil de usar. Pero agregue algunos módulos esclavos y el bus dejará de funcionar.

actualización (mayo de 2015):
- Discusión relacionada en comentarios en otro hilo.
- En sus módulos recientes, SparkFun comenzó a agregar puentes de blob de soldadura entre Vcc y las resistencias pull-up I 2 C ( ejemplo ). Eso permite desconectar los pull-ups más fácilmente.

actualización (diciembre de 2015):
preguntas similares sobre la solución de problemas I 2 C con múltiples módulos siguen apareciendo en los foros Intentar una respuesta general extendida.

Nick Alexeev
fuente
Sí, en realidad mi caso fue por ejemplo. Por ejemplo, todos los módulos rtc vendidos en algunas tiendas incluyen los resistores pullup, así que ... cómo lidiar con esos módulos en ese caso. Es por eso que marqué en negrita la pregunta principal. :)
Sein Oxygen
1
@SeinOxygen Si tiene módulos con resistencias pull-up, más el controlador con sus propios pull-ups, entonces todas estas resistencias aparecerán en paralelo y presentarán un pull-up más rígido (menor resistencia). Supongamos que tiene un total de 3x (tres) resistencias de 2.2kΩ como pull-ups. La resistencia total a la tracción es de 733Ω. Eso viola las especificaciones I2C. ¿Qué hacer? Elimine los pull-ups adicionales de los módulos (quizás, en primer lugar, no deberían haber estado allí).
Nick Alexeev
@SeinOxygen Más sobre los valores de pull-up de I2C en este hilo .
Nick Alexeev
4

Una opción es usar paquetes de resistencias SIL o DIL, y colocarlos en enchufes en cada módulo. Al construir un sistema con múltiples módulos, retírelos de cada módulo, excepto el último. Esto ahorra un poco de espacio en el tablero sobre los puentes.

Las variaciones sobre este tema pueden incluir interruptores FET para conectar o desconectar las resistencias, controladas por un solo puente o un pin de repuesto en el conector (de modo que si se conecta otro módulo, las resistencias se desconectan automáticamente)

Brian Drummond
fuente