外设天下 - 电脑外设发烧友聚集地

12下一页
我的人缘0

[讨论] 打造自己的专属鼠标——鼠标DIY教程(四)

10 33676
楼主
跳转到指定楼层
发表于 2011-1-16 23:38 只看该作者 倒序浏览 阅读模式
本帖最后由 超电磁侠 于 2011-1-17 00:42 编辑

之前3期,简单讲解了单片机的程序编写以及如何使用ADNS-3080, 这期我们来规划一下,怎么把18f14k50ADNS-3080凑在一起。


五、合体!18f14k50ADNS-3080


上图忽略了它们各自的工作电路,只指示出它们应该通过哪些脚连在一起。其中:连接A3080 234脚的18f4k50的脚是固定的,因为只有这几个脚是SPI的功能端口,其余的可以灵活处理。
   在这里有一个电压的问题, 我们将使18f14k50工作在5v下, 因为5v可以直接从USB取电。在5v下,18f14k50端口输出的高状态大概有4.5v。然而,ADNS-3080是工作在3.3v下的,它端口接收的高状态最高只能是3.3v左右!
   如果按上图直接连接那些红色线的端口, 很有可能会把A3080的端口给烧坏。
   在这个时候我们用简单的分压电路就能避免这种情况。下图中的箭头表明电压信号是从18f14k50流向A3080



   注意,A3080 MISO是输出到单片机的,所以不用分压,因为18f14k50的输入可以兼容3.3v的电压。

   另外18f14k50可以工作在3.3v下,在这个时候,就没有必要用分压电路了。我在改金环蛇的时候,只想直接USB取电,其实加一个稳压电路就可以省下这些电阻。

单片机的按键输入是有一些要注意的地方的,我们不能直接就把一个开关一端连到单片机的输入脚,一端接地,这样是不能正常工作的。开关的打开和闭合必须要有一个明确的高或者低电压,如下图:


    单片机输入的电流很小,所以5v电源通过这个电阻给单片机的端口提供了一个确定的高的逻辑状态,这种一端接电源的电阻用法称为上拉电阻。假如没有这个电阻,由于单片机内部的漏电等各种因素,输入端口的电压是随机的,很有可能会时高时低。当开关闭合接地,电压马上降到接近0,这就是低的状态。单片机就是靠这种对电压的高低来判断开关闭合与否。
    18f14k50有些端口有内置的上拉电阻,比如前面图中蓝色线的中键,这个键是不需要额外的电阻上拉的,因为用了芯片内部的上拉电阻。另外机械滚轮编码器用的RB5RB7虽然也有内置上拉电阻,但是经过实践发现,该功能不能与interrupt-on-change一起正常工作,所以会用外部的上拉电阻。
    另外,现实中的按键是机械运动的开关,在编程的时候要考虑到去抖动的问题。否则,就算一个好的微动用起来都像双击一样。在写固件的时候会有进一步解释。










0
已赞
微信分享 收藏
回复

使用道具 举报

我的人缘0
2
发表于 2011-1-16 23:41 只看该作者
本帖最后由 超电磁侠 于 2011-1-16 23:42 编辑

接下来,我们先来做一个人机互动的例子。

#include <18F14k50.h>


#fuses HS,NOFCMEN,NOBROWNOUT,NOWDT,BORV30,NOPUT,NOCPD,STVREN,
NOXINST,NOWRT,NOWRTD,NOWRTC,WDT32768,NOIESO,NOEBTR,NOEBTRB,
NOMCLR,NOPROTECT,NOCPB,NOWRTB,CPUDIV1,USBDIV1,PLLEN,NOHFOFST,
NOLVP

#use delay(clock=48000000)

#use rtos(timer=0,minor_cycle=10ms)

#task(rate=20ms, max=10ms)   //  让程序每20ms检查一次开关的状态
void LED();


void LED()
{


if(input(PIN_C1)==0){             // input函数,设置该端口为输入
                                 //并检查该端口的输入情况
      output_high(PIN_C0);
                }


if(input(PIN_C1)==1){
      output_low(PIN_C0);
                }


}

void main(void)
{


rtos_run();

}
编译出Hex文件,并在Proteus的单片机中载入。
Proteus中作如下修改,开关名字为switch 可以在元件库中搜索到,电源可以在右边工具条中的激励源中找到,放置好后双击那个符号,把电压设为5v





按下图连接,




开始仿真运行,每当点那个开关按下去的时候(仿真的时候可以互动),灯就会亮起! 这里的程序由于是仿真的,没有加入按键的去抖动。(debouncing google这个关键词会有很多相关的知识,时间所限,我先不扯远)



回复 支持 反对

使用道具 举报

我的人缘0
3
发表于 2011-1-17 00:55 只看该作者
难道是沙发?
回复 支持 反对

使用道具 举报

我的人缘0
4
发表于 2011-1-17 01:03 只看该作者
又见LZ技术贴,试问,我想把微软光学基础鲨的内脏换到XAI的壳子里用,可行否?
回复 支持 反对

使用道具 举报

我的人缘0
5
发表于 2011-1-17 01:12 只看该作者
测试
帮人 帮顶了
回复 支持 反对

使用道具 举报

我的人缘0
6
发表于 2011-1-17 02:36 只看该作者
技术贴啊

看的我头晕...
回复 支持 反对

使用道具 举报

我的人缘0
7
发表于 2011-1-17 02:48 只看该作者
又见LZ技术贴,试问,我想把微软光学基础鲨的内脏换到XAI的壳子里用,可行否?
aken 发表于 2011-1-17 01:03

滚轮太难 , 一个是光学 一个是编码
回复 支持 反对

使用道具 举报

我的人缘0
8
发表于 2011-1-17 06:18 只看该作者
测试
顶{:1_
回复 支持 反对

使用道具 举报

我的人缘1
9
发表于 2011-1-17 07:47 只看该作者
表示不懂
回复 支持 反对

使用道具 举报

我的人缘0
10
发表于 2011-1-17 09:21 只看该作者
测试
强贴支持一下
回复 支持 反对

使用道具 举报

12下一页
高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则