qiaofeng198011 发表于 2007-1-11 10:12:05

用1个IO(8位AD)做按键最多可以做几个

我现在做按键,IO口不够了,想用AD口做,我想问大家一下,我把通道设成8位,最多可以做几个?有什么注意事项?

AVR-MEGA128 发表于 2007-1-11 13:41:46

我用过的 做了4个键

dgxll 发表于 2007-1-11 13:49:48

3.3V,我做过10个

qiaofeng198011 发表于 2007-1-11 14:21:50

哦!我的项目有8个按键,这样分辨率为256/8=32,我担心分辨率太低,采集按键不准确,造成程序不稳定!!

我想问"dgxll",你做了10个,分辨率为256/10=25.6,按键采集怎么样?有没有乱采的时候!!

dgxll 发表于 2007-1-11 14:25:48

不会,没有误判,32一级足够了
-----此内容被dgxll于2007-01-11,14:30:05编辑过

qiaofeng198011 发表于 2007-1-11 15:20:59

好的,谢谢!!我试试看,有问题再请教大家!!

fashin 发表于 2007-1-11 15:43:18

这个主意很希奇。能否说一下八个安键在一个线实现电路。想学习一下。thanks!

boat030 发表于 2007-1-11 16:04:53

AD键盘好容易误识别的,很少键还可以,我做过16键,经常误识别

david1234 发表于 2007-1-11 16:08:46

按键电阻要按权电阻分配,否则组合键就会误判为其它键。

qiaofeng198011 发表于 2007-1-11 17:01:22

8位做8个按键好象比较难,我的电阻分配出来分压分别为VCC,10/11VCC,10/12VCC,10/13VCC,10/14VCC,10/15VCC,10/16VCC,10/17VCC;AD值最小的差别为10,我看可能不行,要把通道改成10位的,请大家发表一下意见.

erxun 发表于 2007-1-11 17:06:30

要是担心不稳定的话,。建议做个频率键盘,一个按钮一个频率,做个振荡器。

joson 发表于 2007-1-11 17:25:28

用10 bit AD,我做按摩椅时做过 24个 按键,用 MEGA48,基本上没有误判。

qiaofeng198011 发表于 2007-1-12 08:50:25

我想问一下11楼,你的24个按键不是一个IO口吧?你的差值最小是多少?

最小差值是10个有误判吗?

ssyniuej 发表于 2007-1-12 12:12:15

最近准备做一个,至于误判可能是电路问题,但是这种方法不大好实现组合键功能。如果用单键,用软件进行消抖动处理,或者是延时处理。将端口上拉(用外部电阻),然后另外的分压电阻只对地连接,这样可以防止出现多键同时按下影响采样的现象。这样如果发生多键同时按下,执行的是最下面的那个按键的功能。

qiaofeng198011 发表于 2007-1-13 08:59:20

谢谢大家的指点!!AD做按键没有复合键,其实蛮好的!!

tsshf 发表于 2007-1-13 09:46:33

俺是菜鸟,有见别人做过,但不知道其中的道理,哪未大虾能具体讲解一下!!

qiaofeng198011 发表于 2007-1-13 14:52:37

其实就是利用不同的AD值,来区别按键的,这样节省IO资源!!

MY_OURAVR 发表于 2007-1-14 09:21:34

如果不要求检多键 可以这样接

   ------------------------------------------------------> ADC

|         |            |               |

-         |            |               |

| |10M      KEY1         KEY2            KEYN

-         |            |               |

|--!~~~~!------!~~~~~!----- ..........------!~~~~~!---| +5V

|   ~~~~      ~~~~~                        ~~~~~

-    500         1K                           500

GND



这样可以避免多键引起的电阻值变化问题,无论按下多少个键只有一个键的键值. 只要电阻分配得当,ADC精度够高就行. 上面电路用8位AD检16键 有+_4 的容差.保险点全部用金膜或者8个键是没问题的.



还一种方式就是直接 按键电阻 并联 与 固定电阻 分压 进AD,这样可以检多键同按.但需要精确分配电阻,麻烦... 理论8个键就有2^8=256种组合电阻值,再和固定电阻分压. 只要能分辨出组合后的电阻值 就知道按下了 哪几个键. 8位AD(8位准确度)...6个键大致可以吧.



   ------------------------------------------------------> ADC

|         |            |               |

-         |            |               |

| |         KEY1         KEY2            KEYN

-         |            |               |

|         |            |               |

|         -            -               -

|          | |          | |             | |

|         -            -               -

|         |            |               |

|            -----------------.....--------------------| +5V

-

GND

wm_create 发表于 2007-1-15 09:01:22

请问电路是怎么样连接的?

qiaofeng198011 发表于 2007-1-15 09:05:10

谢谢"MY_OURAVR"的经典分析,我现在用的和你的提供第一种方案类似,没有组合键的功能!!



另:我想问一下第二种方案"理论8个键就有2^8=256种组合电阻值"是怎么计算的?

MY_OURAVR 发表于 2007-1-15 12:11:30

用ad口做按键检测,25个按键,电压分辨幅度为0.2v。大家看看如何来滤波,如何来做。



参考这个方案,也不错.

要能完全解析 多键同按的问题, 必须电阻值选取得当. 所以我说的是指 8种不同电阻值的组合,在和固定电阻分压,AD值的容差就更小了,一般没这么高要求,我们的键盘做的好的只保证7,8键同按吧还只限定某些键.

qiaofeng198011 发表于 2007-1-15 16:22:51

8种不同电阻值的组合是2^8=256种组合电阻值吗?我觉的好象比这个要多!!

avr-qq 发表于 2007-1-15 17:39:25

那就不容易分辨了:



每个键值分别为1,2,4,8,16,32,64,128 的编码就可以实现,不过这个是理论上的。



8位AD 要分辨出 这么最小的分辨率是有困难的。



一般来讲,不会8个键一起往下按吧 ?还是一个一个来吧。最多用一个SHIFT 键,有14种功能键就行了。

qiaofeng198011 发表于 2007-1-16 09:01:55

用AD做按键最好不要有组合功能,要不做起来可能比较麻烦!!

bowen_fang 发表于 2010-10-20 16:24:32

谢谢了,要是有程序在上面就更好了

cuikai12345 发表于 2010-10-20 21:17:53

mark

ilawp 发表于 2010-10-20 22:30:39

我想就是用按键和电阻组成一个DAC,每个按键对应DAC值中的一个位。这样做按键数会比较少,比如8位的只能做8个键,最后两位还不保险。如果不考虑组合键的话,就可以尝试通过将几个高位的键并联到一个新的键上,这样就是一个键对应多个位同时为1的状态。
建议看一下R-2R网络,只需要两种阻值的电阻就可以组建DAC,虽然电阻的数量是多了点,但只使用两种阻值的高精度电阻比用一堆各种阻值的更容易做的精确。

dujun168 发表于 2010-10-20 23:16:47

mark

wwwdege 发表于 2010-11-15 20:47:46

mark

millwood0 发表于 2010-11-15 22:05:35

use a r2r network and you can uniquely define any key and read any key combination.

zihan0855 发表于 2013-5-7 08:57:54

学习了

sinc_mark 发表于 2013-5-7 09:10:19

10的差距,8位分辨率,楼主的电阻选择需要下工夫!
页: [1]
查看完整版本: 用1个IO(8位AD)做按键最多可以做几个