Due slave sullo stesso bus I2C, entrambi rispondono al controllo dell'indirizzo, uno funziona correttamente ma l'altro no

Aug 23 2020

Ok, cercherò di mantenerlo il più breve possibile.

Ho una scheda breakout GY-86, lo schema è aggiunto di seguito. Come visto, MPU6050 e BMP180 sono collegati sullo stesso bus I2C.

Ho anche un Arduino. Quindi, il master è Arduino e gli slave sono MPU6050 e BMP180 .

Ho usato uno schizzo di scansione I2C premade con il mio Arduino e l'output è:

13:50:00.731 -> Scanning...
13:50:00.731 -> I2C device found at address 0x68  !
13:50:00.764 -> I2C device found at address 0x77  !
13:50:00.797 -> done

Questo va bene, poiché 0x68 è MPU6050 e 0x77 è BMP180. Quindi, entrambi gli slave rispondono al controllo dell'indirizzo. Tuttavia, mentre MPU6050 è completamente funzionante, cioè posso ottenere dati da esso, BMP180 non risponde. Ho usato diversi "get BMP180 data Arduino code" da Internet, e nessuno di loro ha funzionato.

Ho anche un MCU STM32, quando lo uso come master invece di Arduino, accade la stessa storia. Nonostante l'utilizzo delle stesse funzioni di lettura / scrittura I2C, le letture / scritture dell'MPU6050 vanno benissimo, ma non riesco a scrivere o leggere da BMP180. Effettuando il debug, ho scoperto che il flag AF (riconoscimento errore) è impostato quando l'MCU si blocca durante il tentativo di scrivere / leggere BMP180.

Ho anche esaminato più volte le schede tecniche di entrambi i sensori, sembrano avere lo stesso modello di lettura / scrittura I2C.

In breve, in qualche modo, BMP180 si trova sulla linea I2C dallo scanner I2C, ma la lettura / scrittura dei dati non può essere eseguita. Quale potrebbe essere il motivo? Potrei presumere di aver danneggiato in qualche modo BMP180, ma risponde al suo indirizzo. Quindi, non sono riuscito a capire cosa sta succedendo. Qualsiasi idea sarebbe apprezzata.

Risposte

1 EmanuelM Aug 23 2020 at 01:43

Il fatto che il BMP180 stia rispondendo al controllo dell'indirizzo non indica che funzioni correttamente. Prima di utilizzare il chip, hai controllato la tensione massima consentita sui pin? Sembra essere un problema hardware. Hai provato ad utilizzare altri BMP180?

1 bem22 Aug 23 2020 at 01:56

Ho usato questo schema esatto nel mio progetto. È possibile che uno dei tuoi dispositivi i2c risponda a 3V3 e l'altro a 5V. Non ho mai finito per usare il convertitore di segnale N_MOS da 5V a 3V3 (non ne vale la pena). Tutti i dispositivi funzioneranno su bus 3V3 senza problemi. Consiglio vivamente di semplificare il circuito e di utilizzare solo il 3V3.

Inoltre, assicurati di avere i resistori giusti per il tuo microcontrollore sui bus SDA / SCL (vedi SCL_R / SDA_R nella figura 2)

Dai un'occhiata al mio schema: ho deciso di eliminare gli N_MOS sia per SCL che per SDA.

Ed ecco l'alimentatore: dai

un'occhiata al mio progetto qui:https://easyeda.com/be.mihai22/project-hawk

A proposito, ecco una dimostrazione che il drone funziona davvero.