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

Estaba pensando en hacer unos módulos 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 agregarlas en los módulos para hacerlos más "genéricos" para que todos los usuarios pudieran usarlos sin necesidad de agregar resistencias adicionales en la placa prototipo.

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, tendré esas resistencias en paralelo, por lo que la resistencia caerá y no cumplirá 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 varios módulos conectados al mismo bus que tiene en cada uno de ellos las resistencias pull-up pero no ponerlos en paralelo cuando tiene 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.-

Cree un módulo separado que solo contendrá resistencias pull-up :)

Respuestas (2)

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 simples. 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 la placa del controlador principal. No pongas los pull-ups en los módulos.

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

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

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 un pull-up excesivo 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, llevemos pull-ups a todas partes. Experiencia inicial lista para usar más fácil. Pero agregue algunos módulos esclavos y el bus dejará de funcionar.

actualización (mayo de 2015):

actualización (diciembre de 2015):
Siguen apareciendo preguntas similares sobre la solución de problemas de I 2 C con varios módulos en los foros de mensajes. Intento de una respuesta general extendida.

Sí, en realidad mi caso fue para un ejemplo. Por ejemplo, todos los módulos rtc que se venden en algunas tiendas incluyen los resitores pull-up, así que... cómo tratar con esos módulos en ese caso. Por eso marqué en negrita la pregunta principal. :)
@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 (resistencia más pequeña). Supongamos que tiene un total de 3x (tres) resistencias de 2,2 kΩ como pull-ups. La resistencia pull-up total es de 733Ω. Eso viola la especificación I2C. ¿Qué hacer? Retire los pull-ups adicionales de los módulos (quizás, en primer lugar, no deberían haber estado allí).
@SeinOxygen Más información sobre los valores de pull-up I2C en este hilo .

Una opción es utilizar paquetes de resistencias SIL o DIL e instalarlos en los zócalos de cada módulo. Cuando construya un sistema con varios módulos, sáquelos de cada módulo excepto del último. Esto ahorra un poco de espacio en el tablero sobre los puentes.

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