2013-03-14 57 views
2

我剛剛完成了使用i2c從PIC單片機(dsPIC33)實現ADXL345加速度計的成功讀取。我到目前爲止所取得的所有成果都是正確讀取設備ID,這是一個字節。多個寄存器/設備的i2c

任何之前使用過ADXL345的人都會知道,從任何一個軸,X,Y或Z讀取數據,都被分成兩個字節,例如'DATAX0'和'DATAX1'。該數據表還特別聲明'爲確保數據一致性,建議使用多字節讀取從ADXL345中檢索數據',因此每個軸的兩個字節需要一起收集。

我的問題是,在i2c中,當每個軸的兩個字節由兩個不同的寄存器表示時,我該怎麼做?

i2c process

上面的圖片顯示所需要的I2C傳輸的過程。爲了讀取加速度計,我們正在查看底部的兩個圖表,上面粘貼的數據表引用表明我使用了底部圖形(多字節),但正如我所說的,兩個字節有兩個不同的寄存器值(分別爲DATAX0和DATAX1的0x32和0x33)。

如何在一次抓取中從一個軸上獲取數據?我看到這樣做的唯一方法是使用一個寄存器地址進行單字節讀取,然後再次使用第二個寄存器地址進行讀取,然後將兩者一起拼接以獲取一個軸數據。

這個問題也適用於從同一個i2c總線上的各種不同設備收集數據,這些設備也會有不同的寄存器。

乾杯!

回答

4

您只需在0x32處執行2個字節的讀取操作,設備會將0x32和0x33的值放入其響應中。

+0

感謝您的回覆。所以你說如果我在寄存器地址中放入0x32(DATA0X)的值,然後重新啓動i2c,然後從機讀取並獲取6個字節,它將從0x32,33,34,35,36 ,和37(即所有三個軸的所有字節?)。我假設通過使用0x32寄存器進行多字節讀取,它將只抓取DATA0X字節兩次。 – ritchie888 2013-03-14 19:15:37

+0

正確,它將按順序讀取。您可以輕鬆編寫一個測試驅動程序,它可以進行單字節讀取和多字節讀取以說服自己是一樣的。 – TJD 2013-03-15 15:44:23

+0

太好了。非常感謝,我現在正在測試過程中。 – ritchie888 2013-03-15 16:56:05