¿Debo usar 2 dispositivos SPI en Arduino UNO/PRO o 2 dispositivos I2C?

Estoy usando una placa de conexión microSD y el acelerómetro ADXL345 https://www.sparkfun.com/products/9836 .

cada uno solo funciona perfectamente bien, pero una vez que coloco ambos (compartiendo los pines 11,12,13, pero con diferentes pines CS) nada funciona.

Estoy usando otro sensor con el I2C que es el BMP085: https://www.sparkfun.com/products/11282

El acelerómetro también funciona en I2C, pero eso requiere resistencias pull-up cuando varios dispositivos comparten I2C.

Quería SPI porque parecía más simple donde solo puedo especificar el CS y todo debería haber funcionado.

¿Me estoy perdiendo algo en el caso de SPI? ¿Es mejor compartir dispositivos en I2C en lugar de SPI?

Como arriba debería funcionar bien. ¿Cómo están conectados? Una posibilidad si usa una placa de prueba y puentes es que haya terminado con demasiada capacitancia en el bus SPI, si están separados, valdría la pena intentar juntarlos con puentes más cortos.
mmmmmmmm yo c. Intentaré soldar todo con la menor área posible para minimizar ese efecto (lo intentaré en el laboratorio más adelante). Entonces SPI debería funcionar perfectamente bien con conexiones simples. ¿No se necesitan circuitos como resistencias pull-up o algo así?
Aún querrá un solo conjunto de pull-ups en el bus SPI, no estoy familiarizado con esa placa en particular, pero verifique si se proporcionan a bordo. Si no tienes ninguno en este momento, esa es otra posibilidad.
I2C necesita resistencias pullup incluso para MCU hablando con un solo dispositivo. Las líneas de bus I2C están definidas por especificaciones para ser conducidas a través de circuitos de tipo de drenaje abierto y los pullups son esenciales para proporcionar los altos niveles en las líneas de señal.

Respuestas (1)

La elección realmente hace poca diferencia cuando se utilizan las bibliotecas de Arduino. Debería ver el mismo tipo de rendimiento.

En cuanto a las resistencias pullup i2c, la placa BMP085 a la que se vincula ya tiene pullups en la placa, conectadas a un puente de soldadura cerrado. Esos mismos pullups deberían ser suficientes para ambos sensores, por lo que no necesitaría agregar más.

Pero no hay razón para que el sensor no funcione también en SPI con una tarjeta SD. ¿Comprobaste dos veces que uniste todos los terrenos juntos? ¿Cómo no funciona? ¿Solo funciona para una lectura/escritura antes de fallar? ¿Se está asegurando de llevar ambos pines CS a alto/bajo, en lugar de dejar uno como entrada flotante?

Francamente, creo que es un error que Sparkfun ponga pull-ups en los módulos esclavos I2C. ¿Qué sucede si el diseño tiene muchos módulos y la resistencia de extracción combinada es demasiado rígida? Hubo un hilo sobre el tema de los pull-ups en varios módulos recientemente.
@NickAlexeev cambiaron a una configuración de puente de soldadura, por lo que puede desoldar el puente para desactivar los pullups. O siempre puedes cortar el rastro. No es tan dificil. NBD.
No, no es difícil desactivar el pull-up. Tenga en cuenta que Arduino no tiene los pull-ups (opcionales), y sus pull-ups internos son demasiado débiles para I2C. Por lo tanto, SparkFun arrastra pull-ups en todos los demás lugares. Experiencia inicial lista para usar más fácil. Pero agregue algunos módulos esclavos y el bus dejará de funcionar.
Todo funcionó ahora. No cambié nada, creo que fue solo una conexión suelta. Tenía este miedo ya que algunos hilos hablaban seriamente sobre la manera = es como aquí: forum.arduino.cc/index.php?topic=50010.0 y aquí: forum.arduino.cc/index.php/topic,49987.0.html