IO不够用,多按键共用一个ADC通道。

xingkong911   2012-6-9 21:37 楼主

MSP430G2xxx系列单片机,属于超值系列。IO最多有24个,当有24个IO时是没有USI接口的。

所以当使用G2系列单片机时,有多个按键,但是IO口不够用时,可以用这个办法。

通过读取ADC的值,判断是哪个按键按下。

这个是从插卡音箱的芯片应用图看来的,所以我也觉得可以应用在我们的430单片机上。

ADC按键.JPG

上面是插卡音箱芯片的按键电路,我们的430电路同样是这样。

未完待续。。。

回复评论 (11)

这么做是可以的,不过

1、可能需考虑多个键同时被按下时的处理,
2、当按键用久后接触不良时,会不会判错键?
点赞  2012-6-10 18:04
也想过这样的应用但是似乎最大的问题是多个键同时按的问题,但是因为数学学的不好,不知道能不能采取取特殊值的方法规避开来。
点赞  2012-6-11 00:08

回复 沙发 仙猫 的帖子

多个按键按下的情况,我的想法是:每个按键所串联的电阻值不同,需要实现计算好每个按键所对应的ADC值。如果多个按键按下的话ADC的结果不在事前计算的范围内,就进行出错处理。即使是内部参考源和电阻值精度都应该可以支持的。
对于按键内部的接触不良产生的电阻,不知道能不能达到KΩ的级别?如果能达到这个级别的话,那就无语了。

不知道仙猫和楼上还有什么好的建议?
点赞  2012-6-11 08:47

这还真是个数学问题

 n个键用同一A/D输入时,总共有2^n种可能,于是就演变成了如何妥善将A/D输入范围划分成2^n个区域的问题。
 利用A/D读键的办法肯定是可行的,只是当键数一多,什么电阻精度、参考电压精度、A/D转换精度等等问题全都涌现出来了,这时或许改用并-串时序方式好一些。
点赞  2012-6-11 09:38
引用: 原帖由 仙猫 于 2012-6-10 18:04 发表 1、可能需考虑多个键同时被按下时的处理, 2、当按键用久后接触不良时,会不会判错键?

2、当按键用久后接触不良时,会不会判错键?

这种现象可能确实很值得注意,哪位同学能给个详细的分析看看?

反正我是在维修一个实际的电器时发现过应该就是这种现象,经常按键错位。
没工作,没女人老婆,没宽带 ,  没钱
点赞  2012-6-11 09:56

回复 5楼 仙猫 的帖子

加油!在电子行业默默贡献自己的力量!:)
点赞  2012-6-11 18:20
按建不良是肯定会出现错误的,不过引脚少如果按键少的话,这种方案确实好用。
点赞  2012-6-11 20:49
商业产品不建议使用
点赞  2012-6-11 20:52
处理按键的软件也不是那么容易的吧,尤其是多个按键同时按。不过,我们做系统的时候,从来没有考虑过多个按键一起按的情况啊。
点赞  2012-6-11 21:17

刚才算了一下,按键多了的话如仙猫所说,可能性太多了,这样就不好把ADC分区判断是哪个按键按下。

这种权宜之计当然只能针对按键少的情况,否则不如加个扩展IO的芯片,那就什么问题都没有了。

我算了三个按键的情况,有两种处理办法。

第一种是有优先级,优先级高的按下,其他的按键按下也不处理,四种可能性:都没按下、S1、S2、S3。

第二种是无优先级,那就是有八种可能:都没按下、S1、S2、S3、S1+S2、S1+S3、S2+S3、S1+S2+S3。

各个电阻的取值如电路图所示

第一种(图中R1取值50K,计算后100K不合适改为50K

第一种.JPG

第二种

第二种.JPG

第一种应用:ADC的值分别是0、0.0909、0.5、0.909;当S1+S2时为0.5454(认为是S2按下)、当S1+S3时为0.0910(认为是S3按下)、当S2+S3时为0.09166(认为是S3按下)、当S1+S2+S3时为0.0918(认为是S3按下)。

第二种应用:ADC的值分别是0、0.25、0.33、0.5;当S1+S2时为0.45、当S1+S3时为0.57、当S2+S3时为0.625、当S1+S2+S3时为0.65。

 

第一种应用ADC分区设置的比较宽,第二种范围设置的比较窄,设置得恰当才可以正确的判断按键。

 

电路图中的电阻取值不能太大,否则就容易出现按键接触不良的情况下,混淆我们的按键判别。

点赞  2012-6-11 23:26

回复 11楼 xingkong911 的帖子

考虑得很深入,尤其在有条件采用“有优先级案”时,是规避判错键的好办法。
点赞  2012-6-12 09:05
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复