请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:TCA8418E 主题中讨论的其他部件:TCA8418,
TCA8418错误说明
我在同一I2C网络上有两个IC。 第一个是PCA9685 PWM控制器,另一个是TCA8418E。 如果我在上或另一个上运行代码,则没有问题。 我也可以在一种模式下运行它,当我按按钮时,我打开PWM输出,然后在嵌套计时器插槽上打开它。
当我让它做得更好时,就会出现问题。
计时器为10毫秒。因此当按下按键时,我将PWM切换为100 %。在5个嘀嗒信号后,我将其切换为50 % ,然后25个嘀嗒信号,我将其切换为。
我可以运行大约30-150按键,然后列进入HI imp状态
我的理论是,我必须使用I2C总线和中断FRA键。
当中断从TCA8418开始时,我只是在软件中进行了一点,然后等待网络时间标记来处理它。
停止后,我仍然可以读取TCA8418的寄存器,它们是相同的。 它只是停止读数。 如果列位于HI imp中,则不知道是否按下了A键。
以下是在未按任何键和按某个键时的外观。
通常如下所示:
示意图:
void TCA8418::initialize()
{
//初始化与TCA8.4818万
i2c.frequency(10万);的通信
char cmd[2];
cmd[0]= REG_CFG;//指向CFG寄存器的指针字节
cmd[1]= 0x91;// CFG寄存器KE_IEN的数据设置为1
如果( i2c.write(KB _BASEADRS,cmd, 2)== I2C_ACK ){//启动写入周期并检查ACK
//在此处初始化所有来自TCA8418的寄存器
cmd[0]= REG_INT_STAT;//中断状态寄存器的指针字节
cmd[1]= 0x01;//重置KE-INT标志
I2C.WRITE (KB_BASEADRS,cmd,2);//从TCA4818写入中断状态寄存器
//将TCA8418设置为键盘模式
cmd[0]=REG_KP_GPIO1;//KP_GIO1
cmd[1]=0x0F;//设置为键盘模式
I2C.write (KB_BASEADRS,cmd,2);
cmd[0]=REG_KP_GPIO2;//KP_GIO2
cmd[1]=0xFF;//设置为键盘模式
I2C.write (KB_BASEADRS,cmd,2);
cmd[0]=REG_KP_GPIO3;//KP_GIO3
cmd[1]=0x00;//设置为键盘模式
I2C.write (KB_BASEADRS,cmd,2);
//将TCA8418设置为键盘模式
cmd[0]=REG_debounce_DIS1;//KP_GIO1
cmd[1]=0x0F;//设置为键盘模式
I2C.write (KB_BASEADRS,cmd,2);
cmd[0]=REG_debounce_DIS2;//KP_GIO2
cmd[1]=0xFF;//设置为键盘模式
I2C.write (KB_BASEADRS,cmd,2);
cmd[0]=REG_debounce_DIS3;//KP_GIO3
cmd[1]=0x00;//设置为键盘模式
I2c.write(KB _BASEADRS,cmd, 2);}
否则{
// TCA8418键盘芯片无响应
//失败=1;//打开失败指示
符}
}
字符TCA8418::Get_key()
{
// Key_LED =!Key_LED;//:切换LED 2.
char cmd[2];
//读取中断状态标志
char key_hit_ID=0;
ReadReg (REG_INT_STAT);
while (ReadReg (REG_KEY_LCK_EC)){// 读取密钥锁和事件计数
器key_HIT_ID = int (ReadReg (REG_KEY_EVENT_A);//Keypress -->如果
(key_HIT_ID & 0x80) release=0,则从密钥缓冲区读取数据;否则,版本=1
;}
//重置中断标志
cmd[0]= REG_INT_STAT;//中断状态寄存器的指针字节
cmd[1]= 0xFF;//重置KE-INT标志
I2c.write(KB _BASEADRS,cmd, 2);
返回key_hit_ID;
}



