H7-TOOL的LUA小程序教程第4期:I2C总线开发(2022-01-13)
Posted Simon223
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了H7-TOOL的LUA小程序教程第4期:I2C总线开发(2022-01-13)相关的知识,希望对你有一定的参考价值。
LUA脚本的好处是用户可以根据自己注册的一批API(当前TOOL已经提供了几百个函数供大家使用),实现各种小程序,不再限制Flash里面已经下载的程序,就跟手机安装APP差不多,所以在H7-TOOL里面被广泛使用,支持在线调试运行,支持离线运行。
TOOL的LUA教程争取做到大家可以无痛调用各种功能函数,不需要学习成本。
可以结合这个贴学习:
H7-TOOL示波器捕获I2C波形操作说明(2021-12-05)
H7-TOOL示波器捕获I2C波形操作说明(2021-12-05) - H7-TOOL开发工具 - 硬汉嵌入式论坛 - Powered by Discuz!
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 : 测量模式 值域(1,2,3)
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)
H7-TOOL的I2C控制器驱动18bit分辨率ADC芯片MCP3421操作说明,简单易用(2021-11-20) - H7-TOOL开发工具 - 硬汉嵌入式论坛 - Powered by Discuz!
H7-TOOL的I2C控制器驱动EEPROM操作说明,支持AT24C02/04/08/16/32/64/128,仅需读写两个函数,随意访问(2021-10-24)
H7-TOOL的I2C控制器驱动EEPROM操作说明,支持AT24C02/04/08/16/32/64/128,仅需读写两个函数,随意访问(2021-10-24) - H7-TOOL开发工具 - 硬汉嵌入式论坛 - Powered by Discuz!
H7-TOOL的I2C控制器驱动光照传感器BH1750操作说明,简单易用(2021-10-24)
H7-TOOL的I2C控制器驱动光照传感器BH1750操作说明,简单易用(2021-10-24) - H7-TOOL开发工具 - 硬汉嵌入式论坛 - Powered by Discuz!
H7-TOOL的I2C控制器驱动陀螺仪MPU6050操作说明,简单易用(2021-10-24)
H7-TOOL的I2C控制器驱动陀螺仪MPU6050操作说明,简单易用(2021-10-24) - H7-TOOL开发工具 - 硬汉嵌入式论坛 - Powered by Discuz!
H7-TOOL的I2C控制器驱动气压传感器BM085/BM180操作说明,简单易用(2021-10-24)
H7-TOOL的I2C控制器驱动气压传感器BM085/BM180操作说明,简单易用(2021-10-24) - H7-TOOL开发工具 - 硬汉嵌入式论坛 - Powered by Discuz!
以上是关于H7-TOOL的LUA小程序教程第4期:I2C总线开发(2022-01-13)的主要内容,如果未能解决你的问题,请参考以下文章
H7-TOOL的LUA小程序教程第3期:使用LUA控制H7-TOOL的LCD简易界面设计
H7-TOOL的LUA小程序教程第1期:LUA编辑器,LUA测试环境搭建,调试方法
H7-TOOL的LUA小程序教程第5期:串口开发,含Modbus(2022-01-16)
H7-TOOL的LUA小程序教程第2期:变量,循环,函数,条件语句和字符串相关API