Add support for lm92 temperature sensor
Added LUA module for the lm92 +-0.33C 12bit+sign temperature sensor.
This commit is contained in:
parent
77b1dfa1b3
commit
de053cf479
|
@ -0,0 +1,98 @@
|
||||||
|
# LM92 module
|
||||||
|
This module adds basic support for the LM92 +-0.33C 12bit+sign temperature sensor. More details in the [datasheet](http://www.ti.com/lit/ds/symlink/lm92.pdf).
|
||||||
|
Works:
|
||||||
|
- getting the temperature
|
||||||
|
- entering the chip's to shutdown mode (350uA -> 5uA power consumption)
|
||||||
|
- waking up the chip from shutdown
|
||||||
|
|
||||||
|
##Require
|
||||||
|
```lua
|
||||||
|
LM92 = require("lm92")
|
||||||
|
```
|
||||||
|
## Release
|
||||||
|
```lua
|
||||||
|
LM92 = nil
|
||||||
|
package.loaded["lm92"]=nil
|
||||||
|
```
|
||||||
|
|
||||||
|
##init()
|
||||||
|
####Description
|
||||||
|
Setting the i2c pins and address for lm92.
|
||||||
|
|
||||||
|
####Syntax
|
||||||
|
init(sda, scl, address)
|
||||||
|
|
||||||
|
####Parameters
|
||||||
|
sda: 1~12, IO index.<br />
|
||||||
|
scl: 1~12, IO index.<br />
|
||||||
|
address: 0x48~0x4b, i2c address (depends on tha A0~A1 pins)
|
||||||
|
####Returns
|
||||||
|
nil
|
||||||
|
|
||||||
|
####Example
|
||||||
|
```lua
|
||||||
|
LM92 = require("lm92")
|
||||||
|
gpio0 = 3
|
||||||
|
gpio2 = 4
|
||||||
|
sda = gpio0
|
||||||
|
scl = gpio2
|
||||||
|
addr = 0x48
|
||||||
|
LM92.init(sda, scl,addr)
|
||||||
|
```
|
||||||
|
##getTemperature()
|
||||||
|
####Description
|
||||||
|
Returns the temperature register's content.
|
||||||
|
|
||||||
|
####Syntax
|
||||||
|
getTemperature()
|
||||||
|
|
||||||
|
####Parameters
|
||||||
|
-
|
||||||
|
|
||||||
|
####Returns
|
||||||
|
Temperature in degree Celsius.
|
||||||
|
|
||||||
|
####Example
|
||||||
|
```lua
|
||||||
|
t = LM92.getTemperature()
|
||||||
|
print("Got temperature: "..t.." C")
|
||||||
|
```
|
||||||
|
|
||||||
|
##wakeup()
|
||||||
|
####Description
|
||||||
|
Makes the chip exit the low power shutdown mode.
|
||||||
|
|
||||||
|
####Syntax
|
||||||
|
wakeup()
|
||||||
|
|
||||||
|
####Parameters
|
||||||
|
-
|
||||||
|
|
||||||
|
####Returns
|
||||||
|
-
|
||||||
|
|
||||||
|
####Example
|
||||||
|
```lua
|
||||||
|
LM92.wakeup()
|
||||||
|
tmr.delay( 1 * 1000 * 1000 )
|
||||||
|
```
|
||||||
|
|
||||||
|
##shutdown()
|
||||||
|
####Description
|
||||||
|
Makes the chip enter the low power shutdown mode.
|
||||||
|
|
||||||
|
####Syntax
|
||||||
|
shutdown()
|
||||||
|
|
||||||
|
####Parameters
|
||||||
|
-
|
||||||
|
|
||||||
|
####Returns
|
||||||
|
-
|
||||||
|
|
||||||
|
####Example
|
||||||
|
```lua
|
||||||
|
LM92.shutdown()
|
||||||
|
```
|
||||||
|
#### TODO:
|
||||||
|
- add full support of the features, including interrupt and critical alert support
|
|
@ -0,0 +1,94 @@
|
||||||
|
-- ******************************************************
|
||||||
|
-- LM92 module for ESP8266 with nodeMCU
|
||||||
|
--
|
||||||
|
-- Written by Levente Tamas <levente.tamas@navicron.com>
|
||||||
|
--
|
||||||
|
-- GNU LGPL, see https://www.gnu.org/copyleft/lesser.html
|
||||||
|
-- ******************************************************
|
||||||
|
|
||||||
|
-- Module Bits
|
||||||
|
local moduleName = ...
|
||||||
|
local M = {}
|
||||||
|
_G[moduleName] = M
|
||||||
|
|
||||||
|
-- Default ID
|
||||||
|
local id = 0
|
||||||
|
|
||||||
|
-- Local vars
|
||||||
|
local address = 0
|
||||||
|
|
||||||
|
-- read regs for len number of bytes
|
||||||
|
-- return table with data
|
||||||
|
local function read_reg(reg_addr, len)
|
||||||
|
local ret={}
|
||||||
|
local c
|
||||||
|
local x
|
||||||
|
i2c.start(id)
|
||||||
|
i2c.address(id, address ,i2c.TRANSMITTER)
|
||||||
|
i2c.write(id,reg_addr)
|
||||||
|
i2c.stop(id)
|
||||||
|
i2c.start(id)
|
||||||
|
i2c.address(id, address,i2c.RECEIVER)
|
||||||
|
c=i2c.read(id,len)
|
||||||
|
for x=1,len,1 do
|
||||||
|
tc=string.byte(c,x)
|
||||||
|
table.insert(ret,tc)
|
||||||
|
end
|
||||||
|
i2c.stop(id)
|
||||||
|
return ret
|
||||||
|
end
|
||||||
|
|
||||||
|
--write reg with data table
|
||||||
|
local function write_reg(reg_addr, data)
|
||||||
|
i2c.start(id)
|
||||||
|
i2c.address(id, address, i2c.TRANSMITTER)
|
||||||
|
i2c.write(id, reg_addr)
|
||||||
|
i2c.write(id, data)
|
||||||
|
i2c.stop(id)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- initialize i2c
|
||||||
|
-- d: sda
|
||||||
|
-- c: scl
|
||||||
|
-- a: i2c addr 0x48|A1<<1|A0 (A0-A1: chip pins)
|
||||||
|
function M.init(d,c,a)
|
||||||
|
if (d ~= nil) and (c ~= nil) and (d >= 0) and (d <= 11) and (c >= 0) and ( c <= 11) and (d ~= l) and (a ~= nil) and (a >= 0x48) and (a <= 0x4b ) then
|
||||||
|
sda = d
|
||||||
|
scl = c
|
||||||
|
address = a
|
||||||
|
i2c.start(id)
|
||||||
|
res = i2c.address(id, address, i2c.TRANSMITTER) --verify that the address is valid
|
||||||
|
i2c.stop(id)
|
||||||
|
if (res == false) then
|
||||||
|
print("device not found")
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
else
|
||||||
|
print("i2c configuration failed") return nil
|
||||||
|
end
|
||||||
|
i2c.setup(id,sda,scl,i2c.SLOW)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Return the temperature data
|
||||||
|
function M.getTemperature()
|
||||||
|
local temperature
|
||||||
|
local tmp=read_reg(0x00,2) --read 2 bytes from the temperature register
|
||||||
|
temperature=bit.rshift(tmp[1]*256+tmp[2],3) --lower 3 bits are status bits
|
||||||
|
if (temperature>=0x1000) then
|
||||||
|
temperature= temperature-0x2000 --convert the two's complement
|
||||||
|
end
|
||||||
|
return temperature * 0.0625
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Put the LM92 into shutdown mode
|
||||||
|
function M.shutdown()
|
||||||
|
write_reg(0x01,0x01)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Bring the LM92 out of shutdown mode
|
||||||
|
function M.wakeup()
|
||||||
|
write_reg(0x01,0x00)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
return M
|
Loading…
Reference in New Issue