1. 程式人生 > 其它 >H7-TOOL的LUA小程式教程第4期:I2C匯流排開發(2022-01-13)

H7-TOOL的LUA小程式教程第4期:I2C匯流排開發(2022-01-13)

LUA指令碼的好處是使用者可以根據自己註冊的一批API(當前TOOL已經提供了幾百個函式供大家使用),實現各種小程式,不再限制Flash裡面已經下載的程式,就跟手機安裝APP差不多,所以在H7-TOOL裡面被廣泛使用,支援線上除錯執行,支援離線執行。

TOOL的LUA教程爭取做到大家可以無痛呼叫各種功能函式,不需要學習成本。


可以結合這個貼下學習:
H7-TOOL示波器捕獲I2C波形操作說明(2021-12-05)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=109953

I2C匯流排基礎知識:
I2C的Start啟動訊號和Stop停止訊號波形效果:

ACK應答:

NACK無應答:

完整效果:


LUA I2C主要有下面五個函式

啟動訊號函式:
i2c_bus("start")

停止訊號函式:
i2c_bus("stop")

傳送函式:
i2c_bus("send",xxx)
形參:xxx表示要傳送的8bit數值。
返回值:返回0表示應答,返回1表示無應答。

接收函式:
i2c_bus("recive", xxx)
形參:xxx表示讀取的位元組個數。
返回值:返回的數字是字串方式的,如果要數值方式需要轉換下。

舉例說明:

接線方式:


以操作光照感測器BH1750為例,向地址寫入資料1個單位元組資料就是:

-------------I2C從機地址 -------------------------------------------

BH1750_SLAVE_ADDRESS 
= 0x46 --向晶片傳送1位元組長度的操作碼 --_ucOpecode 暫存器地址 function BH1750_WriteCmd(_ucOpecode) i2c_bus("start") i2c_bus("send", BH1750_SLAVE_ADDRESS) i2c_bus("send", _ucOpecode) i2c_bus("stop") end

發過個控制命令就是如下方式,使用方式和C語言基本沒什麼區別。

--修改BH1750測量模式,決定測量解析度 
--__ucMode : 測量模式 值域(123)
function BH1750_ChageMode(_ucMode)
    
-- 連續高分測量模式1 if(_ucMode == 1)then BH1750_WriteCmd(BHOP_CON_H_RES) s_Mode = 1 -- 測量模式1,解析度 1 lux end -- 連續高分測量模式2 if(_ucMode == 2)then BH1750_WriteCmd(BHOP_CON_H_RES2) s_Mode = 2 -- 測量模式2, 解析度 0.5 lux end -- 連續高分測量模式3 if(_ucMode == 3)then BH1750_WriteCmd(BHOP_CON_L_RES); s_Mode = 3 -- 測量模式3,低解析度 4 lux end end

讀取就可以如下方式,裡面有個關鍵的操作就是將返回的字串轉換為實際的數值,方便操作:

-- 讀取BH1750測量結果.  主程式需要在 bsp_InitBH1750() 執行之後 180ms 才能讀到正確資料
-- 連續測量模式下,之後主程式可以定時呼叫本函式讀取光強度資料,間隔時間需要大於180ms
-- 返 回 值: 原始的測量資料 ,結果未轉換
function BH1750_ReadData()

    local str
    local byte0, byte1
    local w

    i2c_bus("start")
    i2c_bus("send", BH1750_SLAVE_ADDRESS + 1) -- 讀操作

    str = i2c_bus("recive", 2)

    byte0 = tonumber(string.byte(str,1,1))
    byte1 = tonumber(string.byte(str,2,2))

    w = byte0 * 256 + byte1
    i2c_bus("stop")

    return w
end



拓展例子:

H7-TOOL的I2C控制器驅動18bit解析度ADC晶片MCP3421操作說明,簡單易用(2021-11-20)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=109658

H7-TOOL的I2C控制器驅動EEPROM操作說明,支援AT24C02/04/08/16/32/64/128,僅需讀寫兩個函式,隨意訪問(2021-10-24)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=109261

H7-TOOL的I2C控制器驅動光照感測器BH1750操作說明,簡單易用(2021-10-24)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=109265

H7-TOOL的I2C控制器驅動陀螺儀MPU6050操作說明,簡單易用(2021-10-24)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=109264

H7-TOOL的I2C控制器驅動氣壓感測器BM085/BM180操作說明,簡單易用(2021-10-24)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=109266

微信公眾號:armfly_com 安富萊論壇:www.armbbs.cn 安富萊淘寶:https://armfly.taobao.com