Dozingfiretruck 4 роки тому
батько
коміт
a9af617366
2 змінених файлів з 168 додано та 0 видалено
  1. 159 0
      script/libs/ads1115/ads1115.lua
  2. 9 0
      script/libs/ads1115/package.json

+ 159 - 0
script/libs/ads1115/ads1115.lua

@@ -0,0 +1,159 @@
+--[[
+@module ads1115
+@summary ads1115 驱动
+@version 1.0
+@date    2022.03.18
+@author  Dozingfiretruck
+@usage
+--注意:因使用了sys.wait()所有api需要在协程中使用
+--注意:ads1115的配置需按照项目需求配置,您需要按照配置寄存器说明重新配置 ADS1115_CONF_HCMD 和 ADS1115_CONF_LCMD !!!
+-- 用法实例
+local ads1115 = require "ads1115"
+i2cid = 0
+i2c_speed = i2c.FAST
+sys.taskInit(function()
+    i2c.setup(i2cid,i2c_speed)
+    ads1115.init(i2cid)--初始化,传入i2c_id
+    while 1 do
+        local ads1115_val = ads1115.get_val()
+        log.info("ads1115 val", ads1115_val)
+        sys.wait(1000)
+    end
+end)
+]]
+
+local ads1115 = {}
+
+local sys = require "sys"
+
+local i2cid
+local i2cslaveaddr
+
+local ADS1115_ADDRESS_AD0_LOW       =   0x48 -- address pin low (GND), default for InvenSense evaluation board
+local ADS1115_ADDRESS_AD0_HIGH      =   0x49 -- address pin high (VCC)
+local ADS1115_ADDRESS_AD0_SDA       =   0x4A
+local ADS1115_ADDRESS_AD0_SCL       =   0x4B
+
+-- ADS1115 registers define
+local ADS1115_DATA_REG   	        =   0x00    --转换寄存器
+local ADS1115_CONF_REG			    =   0x01    --配置寄存器
+local ADS1115_LOTH_REG			    =   0x02    --阈值比较器高字节寄存器
+local ADS1115_HITH_REG	            =   0x03    --阈值比较器低字节寄存器
+
+--[[ 
+配置寄存器说明
+config register
+-----------------------------------------------------------------------------------
+CRH[15:8](R/W)
+BIT      15      14      13      12      11      10      9       8
+NAME     OS      MUX2    MUX1    MUX0    PGA2    PGA1    PGA0    MODE
+-----------------------------------------------------------------------------------
+L[7:0] (R/W)
+BIT      7       6       5       4       3       2       1       0
+NAME    DR0     DR1     DR0   COM_MODE COM_POL COM_LAT COM_QUE1 COM_QUE0
+-----------------------------------------------------------------------------------
+15    | OS             |  运行状态和单次转换开始
+    |                | 写时:
+    |                | 0   : 无效
+    |                | 1   : 开始单次转换(处于掉电状态时)
+    |                | 读时:
+    |                | 0   : 正在转换
+    |                | 1   : 未执行转换
+-----------------------------------------------------------------------------------
+14:12 | MUX [2:0]      | 输入复用多路配置
+    |                | 000 : AINP = AIN0 and AINN = AIN1 (default)
+    |                | 001 : AINP = AIN0 and AINN = AIN3
+    |                | 010 : AINP = AIN1 and AINN = AIN3
+    |                | 011 : AINP = AIN2 and AINN = AIN3
+    |                | 100 : AINP = AIN0 and AINN = GND
+    |                | 101 : AINP = AIN1 and AINN = GND
+    |                | 110 : AINP = AIN2 and AINN = GND
+    |                | 111 : AINP = AIN3 and AINN = GND
+-----------------------------------------------------------------------------------
+11:9  | PGA [2:0]      | 可编程增益放大器配置(FSR  full scale range)
+    |                | 000 : FSR = В±6.144 V
+    |                | 001 : FSR = В±4.096 V
+    |                | 010 : FSR = В±2.048 V (默认)
+    |                | 011 : FSR = В±1.024 V
+    |                | 100 : FSR = В±0.512 V
+    |                | 101 : FSR = В±0.256 V
+    |                | 110 : FSR = В±0.256 V
+    |                | 111 : FSR = В±0.256 V
+-----------------------------------------------------------------------------------
+8     | MODE           | 工作模式
+    |                | 0   : 连续转换
+    |                | 1   : 单次转换
+-----------------------------------------------------------------------------------
+7:5   | DR [2:0]       | 采样频率
+    |                | 000 : 8 SPS
+    |                | 001 : 16 SPS
+    |                | 010 : 32 SPS
+    |                | 011 : 64 SPS
+    |                | 100 : 128 SPS (默认)
+    |                | 101 : 250 SPS
+    |                | 110 : 475 SPS
+    |                | 111 : 860 SPS
+-----------------------------------------------------------------------------------
+4     | COMP_MODE      | 比较器模式
+    |                | 0   : 传统比较器 (default)
+    |                | 1   : 窗口比较器
+-----------------------------------------------------------------------------------
+3     | COMP_POL       | Comparator polarity
+    |                | 0   : 低电平有效 (default)
+    |                | 1   : 高电平有效
+-----------------------------------------------------------------------------------
+2     | COMP_LAT       | Latching comparator
+    |                | 0   : 非锁存比较器. (default)
+    |                | 1   : 锁存比较器.
+-----------------------------------------------------------------------------------
+1:0   | COMP_QUE [1:0] | Comparator queue and disable
+    |                | 00  : Assert after one conversion
+    |                | 01  : Assert after two conversions
+    |                | 10  : Assert after four conversions
+    |                | 11  : 禁用比较器并将ALERT/RDY设置为高阻抗 (default)
+-----------------------------------------------------------------------------------
+]]
+
+local ADS1115_CONF_HCMD	            =   0x42	-- AIN0单端输入 В±4.096 V  连续模式  0 100 001 0
+local ADS1115_CONF_LCMD	            =   0x83  	-- 128sps 传统比较器 输出低有效  非锁存比较器 禁用比较器并将ALERT/RDY设置为高阻抗 100 0 0 0 11
+
+--[[
+ADS1115初始化
+@api ADS1115.init(i2c_id)
+@number i2c_id i2c_id
+@return bool   成功返回true
+@usage
+ADS1115.init(0)
+]]
+function ads1115.init(i2c_id)
+    i2cid = i2c_id
+    -- i2cslaveaddr = ADS1115_ADDRESS_AD0_LOW
+    log.info("ADS1115 init_ok")
+    return true
+end
+
+-- --[[
+-- 获取ADS1115数据
+-- @api ADS1115.get_data()
+-- @return number 光照强度数据
+-- @usage
+-- local ADS1115_data = ADS1115.read_light()
+-- log.info("ADS1115_read_light", ADS1115_data)
+-- ]]
+function ads1115.get_val()
+    i2c.send(i2cid, ADS1115_ADDRESS_AD0_LOW,{ADS1115_CONF_REG,ADS1115_CONF_HCMD,ADS1115_CONF_LCMD})
+    sys.wait(5)
+    i2c.send(i2cid, ADS1115_ADDRESS_AD0_LOW, ADS1115_DATA_REG)
+    local _,val_data_raw = pack.unpack(i2c.recv(i2cid, ADS1115_ADDRESS_AD0_LOW, 2), ">h")
+    if val_data_raw>=0x8000 then
+        return ((0xffff-val_data_raw)/32767.0)*4.096
+    else
+        return (val_data_raw/32768.0)*4.096
+    end
+end
+
+return ads1115
+
+
+
+

+ 9 - 0
script/libs/ads1115/package.json

@@ -0,0 +1,9 @@
+{
+    "type" : "lua", // 可以是lua(纯lua), c(纯c), 或者lua-c(混合)
+    "enterpoint" : "ads1115.lua",
+    "compatibility" : {
+        "soc" : true,
+        "air" : true
+    },
+    "dependency" : ["i2c"] // 需要何种硬件或软件接口
+}