前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >H7-TOOL的LUA小程序教程第4期:I2C总线开发(2022-01-13)

H7-TOOL的LUA小程序教程第4期:I2C总线开发(2022-01-13)

作者头像
Simon223
发布2022-03-10 14:03:39
4900
发布2022-03-10 14:03:39
举报

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个单字节数据就是:

代码语言:javascript
复制
-------------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语言基本没什么区别。

代码语言:javascript
复制
--修改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

读取就可以如下方式,里面有个关键的操作就是将返回的字符串转换为实际的数值,方便操作:

代码语言:javascript
复制
-- 读取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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-01-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 接线方式:
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档