Como lidar com vários resistores pull-up em módulos

9

Eu estava pensando em fazer um módulo para uma placa de desenvolvimento que fiz alguns dias atrás, que incluirá interfaces spi / i2c.

O problema é que eu não incluí resistores pull-up nos pinos do MCU na placa principal e estava pensando em adicioná-los nos módulos para torná-los mais "genéricos" para que todos os usuários pudessem usá-los sem a necessidade de adicionar resistores extras. a placa protótipo.

Mas então eu enfrentei o próximo problema. Se eu adicionar os resistores pull-up nos módulos extras e conectar, por exemplo, dois ou mais módulos ao mesmo barramento, colocarei esses resistores em paralelo para que a resistência caia e não cumpra sua função.

Mas se eu adicionar os resistores de pull-up à placa principal, terei esses pinos no MCU sempre ativos baixos.

Portanto, a principal questão é:

Como ter vários módulos conectados ao mesmo barramento, tendo em cada um deles os resistores de pull-up, mas não obtê-los em paralelo quando você tem mais de um módulo? Isso é possível?

Ou a melhor solução aqui é ativar os resistores de pullup no MCU e não os incluir nos módulos?

Obrigado.-

Sein Oxygen
fonte
Criar módulo separado que irá conter resistores pull-up única :)
Alexandr Zarubkin

Respostas:

14

Suponho que o comprimento total de cada um de seus ônibus seja inferior a 1 metro, o que é típico para I 2 C e SPI comuns . Além disso, a capacitância do barramento está dentro das especificações.

Deve haver apenas um (1) conjunto de resistores de pull-up. Como resultado, o melhor lugar para eles é na placa controladora principal. Não coloque os pull-ups nos módulos.

Se você deseja receber pull-up em alguns casos e não em outros casos.

  • Não preencha os resistores pull-up quando não precisar deles.
  • Projete a placa controladora principal de modo que os pull-ups sejam conectados às linhas de sinal através de jumpers. Remova os blocos de curto-circuito, quando não precisar de pull-ups.

edit: Francamente, acho que é um erro o Sparkfun colocar pull-ups nos módulos escravos I 2 C. Infelizmente, nem todo mundo que compra módulos percebe que o pull-up excessivo pode ser um problema. Seria melhor se as placas controladoras (em vez das placas periféricas escravas) tivessem pull-ups com jumpers de solda. Ah ... espere ... O Arduino não carrega as extensões (opcionais) (embora talvez deva). Então, vamos esquivar pull-ups em todos os lugares. Experiência inicial fácil e imediata. Mas adicione alguns módulos escravos e o barramento deixará de funcionar.

update (maio de 2015):
- Discussão relacionada em comentários em outro tópico.
- Nos módulos recentes, o SparkFun começou a adicionar jumpers de solda entre Vcc e os resistores pull-up I 2 C ( exemplo ). Isso permite desconectar os pull-ups mais facilmente.

update (dez 2015):
Perguntas semelhantes sobre a solução de problemas do I 2 C com vários módulos continuam aparecendo nos quadros de mensagens. Tente uma resposta geral estendida.

Nick Alexeev
fonte
Sim, na verdade, meu caso foi por exemplo. Por exemplo, todos os módulos rtc vendidos em algumas lojas estão incluindo os resitores pullup, então ... como lidar com esses módulos nesse caso. Por isso marquei em negrito a questão principal. :)
Sein Oxygen
11
@SeinOxygen Se você possui módulos com resistores de pull-up, além do controlador com seus próprios pull-ups, todos esses resistores aparecerão em paralelo e apresentarão um pull-up mais rígido (menor resistência). Suponha que você tenha um total de 3x (três) resistências de 2,2kΩ como pull-ups. A resistência total à tração é de 733Ω. Isso viola as especificações I2C. O que fazer? Remova os pull-ups extras dos módulos (talvez, eles não devessem estar lá em primeiro lugar).
Nick Alexeev
@SeinOxygen Mais sobre os valores de pull-up I2C neste segmento .
Nick Alexeev
4

Uma opção é usar os pacotes de resistores SIL ou DIL e encaixá-los nos soquetes de cada módulo. Ao criar um sistema com vários módulos, retire-os de todos os módulos, exceto o último. Isso economiza um pouco de espaço na placa sobre os jumpers.

Variações sobre esse tema podem incluir interruptores FET para conectar ou desconectar os resistores, controlados por um único jumper ou um pino sobressalente no conector (para que, se outro módulo estiver conectado, os resistores sejam desconectados automaticamente)

Brian Drummond
fonte