Nouveau : le pare-feu IA surveille toute la plateforme et explique chaque incident en termes simples. Découvrez comment ça marche

Le MCP3008 ne donne que 0 ou 1023 : comment prouver que le SPI fonctionne sur un Pi 3B+ ?

Le MCP3008 ne donne que 0 ou 1023 : comment prouver que le SPI fonctionne sur un Pi 3B+ ?

Résolu 8 7

Traduit de English par IA ·

Projet du week-end parti de travers. Pi 3B+, un MCP3008 sur une breadboard, lecture d’un transmetteur de pression 4-20 mA installé sur ma cuve d’eau de pluie via une résistance de 150 ohms (donc 0,6 à 3,0 V). Le plan est d’envoyer tank_bar à Hermetry toutes les minutes.Le SPI est activé dans raspi-config, /dev/spidev0.0 et /dev/spidev0.1 existent tous les deux. Mais le canal 0 reste à 0 en permanence, et quand je touche le fil il passe à 1023 puis revient. Le canal 1 (rien de connecté) donne la même chose. Mon code :

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]

Comment savoir si le SPI lui-même fonctionne, avant d’incriminer la puce ? J’ai déjà remplacé le MCP3008 une fois.

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

Traduit de English par IA ·

je suis le sujet, j’ai un MCP3008 dans un tiroir que je n’ai jamais réussi à faire fonctionner non plus

♥ 2

Traduit de English par IA ·

VREF est-elle reliée à 3,3 V ? Si VREF est flottante, vous obtenez exactement ce comportement 0 / 1023.

♥ 2

Traduit de English par IA ·

VREF et VDD sont tous deux à 3,3 V, AGND et DGND sont à la masse. Vérifié deux fois.

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

Traduit de English par IA ·

Testez d’abord le SPI seul, en boucle (loopback), sans puce. Retirez le MCP3008, reliez MOSI (GPIO10, broche 19) à MISO (GPIO9, broche 21) avec un cavalier, puis lancez :

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 affiche les mêmes octets que TX, la partie Pi fonctionne. Si RX ne contient que des 00 ou des FF, le SPI ne tourne pas vraiment.Mon intuition porte cependant sur votre code : spi.open(0, 1) utilise la sélection de puce CE1, soit GPIO7 sur la broche 26. La plupart des tutoriels MCP3008 câblent CS sur CE0, soit GPIO8 sur la broche 24. Si votre CS va à la broche 24, la puce n’est jamais sélectionnée, sa sortie flotte, et vous obtenez 0 avec de temps en temps 1023 quand vous la touchez. Déplacez le fil sur la broche 26 ou remplacez le code par spi.open(0, 0). J’ai fait exactement cette confusion sur un banc de test au travail.Le fait que le canal 1 donne la même valeur est révélateur : une puce non sélectionnée renvoie les mêmes données parasites sur chaque canal.

Solution acceptée♥ 3

Traduit de English par IA ·

Le test en boucle (loopback) mérite d’être gardé dans vos notes. Il m’a sauvé deux fois.

♥ 0

Traduit de English par IA ·

Une fois que la lecture fonctionne, place un condensateur de 100 nF sur l’entrée, à côté de la puce. Les boucles 4-20 mA captent beaucoup de bruit sur une breadboard.

Ground loops are my cardio.
♥ 1

Traduit de English par IA ·

Pour la mise à l’échelle, vous pouvez envoyer les mA bruts et laisser un bloc Scale dans le flux racine de Hermetry convertir 4-20 en 0-10 bar. Vous pourrez ainsi corriger la plage plus tard sans toucher au Pi.

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

Traduit de English par IA ·

CE0 ou CE1, bien sûr. CS était sur la broche 24 et le code indiquait 1. Je l’ai remplacé par spi.open(0, 0) et le canal 0 affiche maintenant 412 avec le réservoir à moitié plein, le canal 1 flotte comme il se doit. Le test en boucle (loopback) a aussi réussi, donc je garde celui-là. J’envoie les mA maintenant et je fais la mise à l’échelle dans le flux, comme l’a dit twilson.

If it isn't logged, it didn't happen.
♥ 0
9 sujets de 1 à 9 (sur un total de 9)
  • Vous devez être connecté pour répondre à ce sujet.

Rejoignez la discussion

Connectez-vous pour poser et répondre à des questions, aimer les messages utiles et marquer la réponse qui a résolu votre problème. Chaque contribution rapporte des points et des niveaux.

Partager