Robofun 機器人論壇

標題: 如何用PWM的GPIO模擬I2C? [打印本頁]

作者: tree1198    時間: 2013-9-12 22:28
標題: 如何用PWM的GPIO模擬I2C?
各位大大好,小弟目前使用RB-100並且使用九軸感測器G146,是用C++開發。由於實驗需要,所以我必須要讀取兩個G146的加速規數值,可是Roboard只有一個I2C介面,
所以我想要用PWM那邊的GPIO,不知道有沒有大大會這樣的技術呢?麻煩給予指教,謝謝了!!!!!

PS1:我看了原廠的說明書,還是不清楚該怎麼寫才可以用GPIO模擬I2C,是要用到i2c_SetBaseAddress(unsigned baseaddr)嗎?。
PS2:有先詢問過原廠工程師,學到讀取G146加速規另一個腳位的方式,但是這個方法在同一條I2C的情況下似乎是行不通的阿.....。
作者: roboardgod    時間: 2013-9-13 14:26
你要控制兩顆146的話給你一些意見
第一種是用軟體模擬
你可以去下載source code看看
在i2c.cpp裡面有提到I2C Software-Simulated Functions
那邊的function就是供軟體模擬使用了
而且有兩組可以使用

第二種是用硬體修改
你可以看看官方的硬體圖
可以把兩組的Address錯開

這樣應該就可以用了
作者: tree1198    時間: 2013-9-13 15:11
本帖最後由 tree1198 於 2013-9-13 15:24 編輯

謝謝大大的回覆阿!!!
第一種的話我有看到該程式碼,大大說的是GPIO34-37吧?那個腳位是在哪裡呢?
第二種的話就是我詢問原廠工程師的方式,硬體修改之後去讀取還是不行阿...(個別讀取都沒問題,但是只要兩個串接程式就會出現問題)
作者: roboardgod    時間: 2013-9-13 16:39
腳位應該是這樣喔
作者: tree1198    時間: 2013-9-13 16:56
多謝大大回應!!
不過我這邊的說明書那張圖的8是Reserved,10是SPISS耶?
這個資訊在哪裡有阿?
然後知道了腳位之後,我該如何定義呢?
預設SCL跟SDA的腳位是4跟6,如果用I2C Software-Simulated Functions的函式去做的話,
我應該怎麼去寫那個程式呢?麻煩大大了!!!
作者: roboardgod    時間: 2013-9-13 17:55
對   Pin8,10是第二組的腳位
然後關於資訊的部分   我是問內部的工程師的
然後在I2C Software-Simulated Functions那裏就有function可以用了
基本上可以參照sample code
然後function要換成軟體模擬的function
裡面會有devs變數   代表的是第X組
在.h有define
#define I2C_USEMODULE0         (1<<0)
#define I2C_USEMODULE1         (1<<1)
代表兩組這樣
作者: tree1198    時間: 2013-9-14 00:53
非常感謝大大!!!我明天就來去試看看!!!
不過還是想問一個問題,不知道大大有試過硬體修改嗎?
想知道為什麼使用硬體修改讀取兩個G146中的加速規會出現這個錯誤呢?

作者: tree1198    時間: 2013-9-15 15:53
謝謝大大!!!我已經將問題解決了!!!
1.大大的方法是可以的,我已成功開啟另一個i2c位址,並且可以使用(原廠的程式碼似乎有個保護機制,需要修改掉才可以讀到I2C1_SCL與SDA),但是無法兩邊都初始化,會強碰到,由於已經找到解決方法,所以就沒去解決這個問題。
2.我發現之前一直不能讀取的原因是因為i2c_Initialize()這個函式(原廠範例程式的初始化...),如果初始化是使用這個函式的話,使用一顆G146沒有問題,但是如果連接兩顆並使用硬體更改的話就會出現問題。(這邊我沒再去深入探討)
3.如果要使用多顆I2C裝置並使用同一個I2C腳位的話,可以試試i2c_InitSW()這個函式。




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2