![](/img/trans.png)
[英]Freescale Pressure Sensor MPL3115A2 I2C communication with Arduino
[英]I2C communication between pic32 and MPL3115A2 Altitude/Pressure Sensor
我正在嘗試做一些非常簡單的事情,但是讓它工作起來有點麻煩。 我正在使用MPL3115A2高度/壓力傳感器和pic32 uC32板,並且正在嘗試使用I2C在兩者之間進行通信。 (uC32板與arduino足夠相似,在編碼方面幾乎相同)。
我正在使用線庫,我只是想從MPL3115A2讀取寄存器0x0C,這應該給我設備ID。
這是一個代碼片段(定義位於代碼的頂部,其余位於主循環中):
#define barAddress 0x60
Wire.beginTransmission(barAddress);
Wire.send(0x0C);
Wire.endTransmission();
Wire.requestFrom(barAddress, 1);
uint8_t a = Wire.receive();
Serial.println(a, HEX);
因此,我從地址0x60開始發送數據(從數據表中看:標准7位I2C從設備地址為0x60或1100000。8位讀取為0xC1,8位寫入為0xC0。)。 然后,我發送0x0C,因為這是我要訪問的寄存器。 然后,我結束傳輸,並從地址0x60請求1個字節,將該位接收到8位變量中,然后進行打印。
我遇到的問題是,當我打印它時,我只會得到0。我沒有得到設備ID,只有0。無論我嘗試讀取什么寄存器,我都會得到0。
在過去的幾天里,我一直在想辦法解決這個問題。 我已經附上了我使用邏輯分析儀捕獲的內容,以及我一直嘗試訪問的MPL3115A2數據表中的寄存器列表。
使用邏輯分析儀,我可以看到時鍾線和數據線。 時鍾似乎正常,數據線顯示以下信息:
START
Write['192'] + ACK
'12' + ACK
STOP
START
Read['193'] + ACK
'0' + NAK
STOP
在我看來,這一切都是正確的(192和193來自8位寫入和讀取分別為0xC0和0xC1),除了'0'。 我應該獲取設備ID,而不是0。
感謝您對此的任何幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.