搜索
bottom↓
回复: 1

4X4keyboard with 1 input of ADC for AVR

[复制链接]

出0入0汤圆

发表于 2012-5-12 22:42:34 | 显示全部楼层 |阅读模式
本帖最后由 Marxt 于 2012-5-12 22:43 编辑

            最近,脑子发热,想了一个电路,使用一个AVR 单片机的一个ADC口进行4X4键盘的检测。。。。关于ADC的电压检测,无非就是对ADC 口外接电阻网络进行分压后的电压值送入ADC口,然后利用单片机ADC的功能换算出ADC值来!
      具体电路请看下面原理图:
      


          后来这个电路和同事讨论后,发现有点问题,经同事的建议,再进行ADC之间,先进行一次外部中断检测,这样,大家就看到了上面的电路原型!
      现在我来简单的分析一下我的思路:
      电路很简单,和我们平时使用的4X4按键检测电路没太大不同,当某个按键按下时,相应的线路的电阻组成电路网络,然后进行分压后送ADC口!而电路中二极管接到INT0口,是为了提高按键的按下安全性,也就是消抖。。。。
      这个电路唯一相对难的就是电阻的组合选择。本人总结了3种方法:
      方法1:电阻任意选择,只要每一组合的电阻网络的ADC值之间的差值大于AVR ADC 能检测出的最小的分辨率即可!
      方法2:电压等分法,把电源电压16等分,即VCC/16。当某个按键按下时,这个按键相应的线路电阻组合为(VCC/16)倍数。即:1*VCC/16,2*VCC/16,3*VCC/16.......16*VCC/16.!利用这种关系算出电阻值。
      方法3:ADC值等分法,即把1023/16!某个按键按下时,这个按键相应的线路电阻组合的ADC值为(1023/16)的倍数。即:1*(1023/16),2*(1023/16)........16(1023/16)。利用这种关系算出电阻值。
      程序编写思想:
      1.I/O口,ADC,INT等硬件初始化就不说了!!!
      2.当有按键按下时,首先进行INT0上升沿中断检测,中断程序里打开ADEN!
      3.然后进行ADC扫描,以确定是哪个按键按下!、

最后的补充的事项:
     1.这个电路还有许多问题,如组合按键按下时,到底是哪个按键被检测,如,当二个按键同时按下时,由于是由电阻网络组合成的分压电路,所以最后送入ADC口的电压就不是上面我们的方式算出的电压值了(此时二路电阻网络是并联的)!
     2.在程序中,在进行ADC检测前要进行一次INT,这就涉及到时间问题了!虽然单片机速度快,但是INT要时间,当我们用很快的速度按下键后松手,单片机此时可能进行了INT检测但来不及ADC等!所以在编写程序时这个也是要考虑的一个问题之一!
    (本人正在编写程序中,程序还未最终完成,所以还不能和坛友们一同分享,有兴趣的坛友可以自己写写,然后一起分享和交流。Marxt期待与你一同分享与进步!)
     这次,我只简单的编写一个按键的检测!
献丑了,别见怪!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-5-12 22:45:45 | 显示全部楼层
顶顶自己,给自己鼓励一下!!也希望大家一起参与!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-1 08:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表