Novedad: el cortafuegos de IA supervisa toda la plataforma y explica cada incidente con palabras sencillas. Vea cómo funciona

El MCP3008 solo da 0 o 1023: ¿cómo demuestro que el SPI funciona en una Pi 3B+?

El MCP3008 solo da 0 o 1023: ¿cómo demuestro que el SPI funciona en una Pi 3B+?

Resuelto 8 7

Traducido del English por IA ·

Proyecto de fin de semana que se torció. Pi 3B+, un MCP3008 en una protoboard, leyendo un transmisor de presión de 4-20 mA en mi depósito de agua de lluvia a través de una resistencia de 150 ohmios (es decir, de 0,6 a 3,0 V). El plan es enviar tank_bar a Hermetry cada minuto.SPI está habilitado en raspi-config, y /dev/spidev0.0 y /dev/spidev0.1 existen. Pero el canal 0 marca 0 todo el tiempo y, al tocar el cable, salta a 1023 y vuelve. El canal 1 (sin nada conectado) marca lo mismo. Mi código:

spi = spidev.SpiDev()
spi.open(0, 1)
spi.max_speed_hz = 1350000
r = spi.xfer2([1, (8 + 0) << 4, 0])
val = ((r[1] & 3) << 8) + r[2]

¿Cómo sé si el SPI en sí funciona, antes de culpar al chip? Ya cambié el MCP3008 una vez.

If it isn't logged, it didn't happen.
♥ 1

Traducido del English por IA ·

siguiendo el hilo, tengo un MCP3008 en un cajón que tampoco logré hacer funcionar

♥ 2

Traducido del English por IA ·

¿VREF está conectada a 3,3 V? Si VREF está flotando, obtienes exactamente ese comportamiento de 0 / 1023.

♥ 2

Traducido del English por IA ·

VREF y VDD están ambos a 3,3 V, AGND y DGND están a tierra. Lo he comprobado dos veces.

If it isn't logged, it didn't happen.
♥ 0

Traducido del English por IA ·

Pruebe primero el SPI por sí solo con un loopback, sin chip. Saque el MCP3008, ponga un cable puente desde MOSI (GPIO10, pin 19) a MISO (GPIO9, pin 21) y ejecute:

wget https://raw.githubusercontent.com/raspberrypi/linux/rpi-6.6.y/tools/spi/spidev_test.c
gcc -o spidev_test spidev_test.c
./spidev_test -D /dev/spidev0.0 -v -p "HELLO"

Si RX muestra los mismos bytes que TX, la parte de la Pi está bien. Si RX es todo 00 o FF, el SPI no está funcionando realmente.Aun así, mi sospecha está en su código: spi.open(0, 1) usa el chip select CE1, que es GPIO7 en el pin 26. La mayoría de los tutoriales del MCP3008 conectan CS a CE0, es decir, GPIO8 en el pin 24. Si su CS va al pin 24, el chip nunca se selecciona, su salida queda flotando y obtiene 0 con algún 1023 cuando lo toca. O bien mueva el cable al pin 26, o cambie el código a spi.open(0, 0). Yo mismo cometí exactamente esta confusión en un banco de pruebas en el trabajo.Que el canal 1 dé el mismo valor es la pista: un chip no seleccionado devuelve la misma basura en todos los canales.

Solución aceptada♥ 3

Traducido del English por IA ·

La prueba de loopback merece la pena guardarla en tus notas. Me salvó dos veces.

♥ 0

Traducido del English por IA ·

Una vez que lea, coloca un condensador de 100 nF en la entrada, junto al chip. Los lazos de 4-20 mA captan mucho ruido en una protoboard.

Ground loops are my cardio.
♥ 1

Traducido del English por IA ·

Para el escalado puede enviar los mA sin procesar y dejar que un bloque Scale en el flujo raíz de Hermetry convierta 4-20 en 0-10 bar. Así podrá ajustar el rango más adelante sin tocar la Pi.

If it isn't logged, it didn't happen.
♥ 0

Traducido del English por IA ·

CE0 frente a CE1, por supuesto. CS estaba en el pin 24 y el código decía 1. Lo cambié a spi.open(0, 0) y el canal 0 ahora lee 412 con el tanque medio lleno, el canal 1 flota como debe. La prueba de loopback también pasó, así que me quedo con esa. Ahora envío mA y escalo en el flujo, como dijo twilson.

If it isn't logged, it didn't happen.
♥ 0
Viendo 9 entradas – de la 1 a la 9 (de un total de 9)
  • Debes estar registrado para responder a este debate.

Únete a la conversación

Inicia sesión para preguntar y responder, dar me gusta a las publicaciones útiles y marcar la respuesta que resolvió tu problema. Cada aportación suma puntos y niveles.

Compartir