• 欢迎大家分享资料!前往留言板评论即可!

Air724UG IIC工作一段时间后时序异常

合宙 模组资料网 2年前 (2021-05-15) 318次浏览 0个评论 扫描二维码

使用合宙的Air724UG的IIC2与AIP650芯片进行通信,控制LED,IIC工作一段时间(时间不定)过后出现时序错误。

Air724UG IIC2工作一段时间(时间不定)后时序出错,尝试不断电情况下,重新烧录程序,问题依旧存在。断电重启后才可正常工作

错误情况如下图:

0

正常情况图下图:

0

AIP650驱动Lua:

require "pins"
local I2C_ID = 2
local function setReg(reg, data)
i2c.send(I2C_ID, bit.rshift(reg, 1), data)
end

local ledSta = {
0x00,
0x00,
0x00,
0x00,
}
--执行时间 大概1.5~2ms
local function updateLed()
setReg(0x68, ledSta[1])
setReg(0x6A, ledSta[2])
setReg(0x6C, ledSta[3])
setReg(0x6E, ledSta[4])
end

local M = {}

M.init = function()
i2c.setup(I2C_ID, i2c.SLOW, 0x00)
setReg(0x48, 0x01)
M.setAllStatus(false)
end

M.restart = function()
i2c.close(I2C_ID)
i2c.setup(I2C_ID, i2c.SLOW, 0x00)
setReg(0x48,0x00)--睡眠禁止
setReg(0x48, 0x01)--系统使能
setReg(0x48, 0x11)--系统使能 8段显示
end

--
M.setLed = function(id, sta)
local index = math.floor(id / 8) + 1
local bitIndex = math.fmod(id, 8)
if sta == true or sta == 1 then
ledSta[index] = bit.set(ledSta[index], bitIndex)
else
ledSta[index] = bit.clear(ledSta[index], bitIndex)
end
end

M.setAllStatus = function(sta)
local dat = 0xFF
if sta then
dat = 0xFF
else
dat = 0x00
end
for i = 1, 4 do
ledSta[i] = dat
end
updateLed()
end

M.setAllStatusNoCache = function(sta)
local dat = 0xFF
if sta then
dat = 0xFF
else
dat = 0x00
end
setReg(0x68, dat)
setReg(0x6A, dat)
setReg(0x6C, dat)
setReg(0x6E, dat)
end

M.update = function()
updateLed()
end

return M

IIC 通讯控制在200ms执行一次updateLed()


转载请注明原文链接:Air724UG IIC工作一段时间后时序异常
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址