将MAX6954和MAX6955的键盘扫描扩展至32键(二极管采用低成本、共阳极的BAW56/SOT23封装)
发布时间:2008/6/3 0:00:00 访问次数:578
max6954/max6955是4线或2线串行接口的led驱动器,可以控制7段、14段或16段led或一个16x8的led矩阵。驱动器还包括5个i/o扩展(gpio)端口,以及用这些端口自动扫描32个按键、消除按键抖动的所有逻辑控制。另外一个功能选项是通过一个中断引脚通知系统处理器消除键抖。本文介绍的扩展按键扫描方案(从32键扩展到80或更多个按键)需要增添额外的二极管。
表1. max6954/max6955的标准32键连接
p0 | p1 | p2 | p3 | |
led output o0 | sw a1 | sw b1 | sw c1 | sw d1 |
led output o1 | sw a2 | sw b2 | sw c2 | sw d2 |
led output o2 | sw a3 | sw b3 | sw c3 | sw d3 |
led output o3 | sw a4 | sw b4 | sw c4 | sw d4 |
led output o4 | sw a5 | sw b5 | sw c5 | sw d5 |
led output o5 | sw a6 | sw b6 | sw c6 | sw d6 |
led output o6 | sw a7 | sw b7 | sw c7 | sw d7 |
led output o7 | sw a8 | sw b8 | sw c8 | sw d8 |
图1. max6954/max6955的标准32键连接
表1和图1给出了max6954/max6955的标准8键连接。键切换电路按照4 x 8矩阵(4列、8行)读取32个按键的状态。键盘阵列的8行由8个led阴极驱动器输出(led输出o0至led输出o7)驱动。作为多层led驱动的一部分,这些led阴极驱动输出依次拉至低电平320µs (标称值)(顺序驱动led)。这些驱动器输出分别用来拉低键开关的一端,键的另一端连接在4个输入引脚(p0至p3),这4个输入引脚从内部拉至max6954/max6955的高电平v+。按下开关时,p0、p1、p2或p3将由相应的led输出ox拉至低电平,max6954/max6955检测按键,并为按键提供去抖。
多个按键被同时按下时,与开关串联的二极管可以防止2个或多个led阴极驱动输出短路。例如,同时按下sw a1和sw a2时,与按键串联的二极管可以避免led输出o0与led输出o1短路,因为在任何情况下至少有一个二极管为反向偏置。二极管采用的是低成本、共阳极的baw56,sot23封装。
max6954/max6955随时判断32个按键按下或释放的动作,器件内部仅为指示这32个按键的状态提供了寄存器。从这一点看,在max6954/max6955的设计中似乎没有办法扩展扫描电路,需要寻找一种全新的设计方案。
针对这种特殊情况,我们发掘了一种冗余情况。许多应用中只需要了解某一个按键是否被按下。通常,同时按下两个按键的情况被认为是错误的键输入,或者是进入工厂诊断模式。这种两个按键同时按下的情况是一种“冗余”情况,我们把新增按键连接成好像某一对儿键被同时按下的情况,表2和图2所示电路通过组合p0、p1、p2和p3扩充了16个按键。例如,当sw ab1按下时,对于max6954/max6955而言,所表现出来的状态与sw a1和sw b1同时按下的情况相同。只要每对儿按键(如sw a1和sw b1)的物理位置不相邻,这种扩展架构即可有效工作。软件设计应保证在max6954/max6955的最小去抖周期内响应按键的/irq,保证每个对应于按键扫描的结果都经过适当的分析处理。如果软件对/irq响应较慢,将无法区分同时按下两个按键的情况(鉴别增添的按键状态)和顺序按下相同的两个按键的情况。无论是哪种情况,按键去抖寄存器0x08-0x0b将简单地显示每个键位置位。
表2. max6954/max6955扩展后的48键连接
p0 | p1 | p2 | p3 | p0 & p1 | p2 & p3 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
led output o0 | sw a1 | sw b1 |
p0 | p1 | p2 | p3 | |
led output o0 | sw a1 | sw b1 | sw c1 | sw d1 |
led output o1 | sw a2 | sw b2 | sw c2 | sw d2 |
led output o2 | sw a3 | sw b3 | sw c3 | sw d3 |
led output o3 | sw a4 | sw b4 | sw c4 | sw d4 |
led output o4 | sw a5 | sw b5 | sw c5 | sw d5 |
led output o5 | sw a6 | sw b6 | sw c6 | sw d6 |
led output o6 | sw a7 | sw b7 | sw c7 | sw d7 |
led output o7 | sw a8 | sw b8 | sw c8 | sw d8 |
图1. max6954/max6955的标准32键连接
表1和图1给出了max6954/max6955的标准8键连接。键切换电路按照4 x 8矩阵(4列、8行)读取32个按键的状态。键盘阵列的8行由8个led阴极驱动器输出(led输出o0至led输出o7)驱动。作为多层led驱动的一部分,这些led阴极驱动输出依次拉至低电平320µs (标称值)(顺序驱动led)。这些驱动器输出分别用来拉低键开关的一端,键的另一端连接在4个输入引脚(p0至p3),这4个输入引脚从内部拉至max6954/max6955的高电平v+。按下开关时,p0、p1、p2或p3将由相应的led输出ox拉至低电平,max6954/max6955检测按键,并为按键提供去抖。
多个按键被同时按下时,与开关串联的二极管可以防止2个或多个led阴极驱动输出短路。例如,同时按下sw a1和sw a2时,与按键串联的二极管可以避免led输出o0与led输出o1短路,因为在任何情况下至少有一个二极管为反向偏置。二极管采用的是低成本、共阳极的baw56,sot23封装。
max6954/max6955随时判断32个按键按下或释放的动作,器件内部仅为指示这32个按键的状态提供了寄存器。从这一点看,在max6954/max6955的设计中似乎没有办法扩展扫描电路,需要寻找一种全新的设计方案。
针对这种特殊情况,我们发掘了一种冗余情况。许多应用中只需要了解某一个按键是否被按下。通常,同时按下两个按键的情况被认为是错误的键输入,或者是进入工厂诊断模式。这种两个按键同时按下的情况是一种“冗余”情况,我们把新增按键连接成好像某一对儿键被同时按下的情况,表2和图2所示电路通过组合p0、p1、p2和p3扩充了16个按键。例如,当sw ab1按下时,对于max6954/max6955而言,所表现出来的状态与sw a1和sw b1同时按下的情况相同。只要每对儿按键(如sw a1和sw b1)的物理位置不相邻,这种扩展架构即可有效工作。软件设计应保证在max6954/max6955的最小去抖周期内响应按键的/irq,保证每个对应于按键扫描的结果都经过适当的分析处理。如果软件对/irq响应较慢,将无法区分同时按下两个按键的情况(鉴别增添的按键状态)和顺序按下相同的两个按键的情况。无论是哪种情况,按键去抖寄存器0x08-0x0b将简单地显示每个键位置位。
表2. max6954/max6955扩展后的48键连接
p0 | p1 | p2 | p3 | p0 & p1 | p2 & p3 | |
led output o0 | sw a1 | sw b1 |