打造自己的专属鼠标——鼠标DIY教程(四)
作者:论坛管理员|发布时间:2014-12-02 12:03:00
[摘要]之前3期,简单讲解了单片机的程序编写以及如何使用ADNS-3080, 这期我们来规划一下,怎么把18f14k50和ADNS-3080凑在一起。
之前3期,简单讲解了单片机的程序编写以及如何使用ADNS-3080, 这期我们来规划一下,怎么把18f14k50和ADNS-3080凑在一起。
五、合体!18f14k50与ADNS-3080[size=10.5pt]
[size=10.5pt][img]http://pldzgq.blu.livefilestore.com/y1p8hRaLKezgLC_ZzXDOcXG5-GEOh0FCLP9GRwWOS8rSxbP91o8sKecVP4OaYz6f_9YnR7ShRSjDjwaK3IRzvSTyjycSGYDLWYZ/T41.jpg?psid=1[/img]
上图忽略了它们各自的工作电路,只指示出它们应该通过哪些脚连在一起。其中:连接A3080 2、3、4脚的18f4k50的脚是固定的,因为只有这几个脚是SPI的功能端口,其余的可以灵活处理。
在这里有一个电压的问题, 我们将使18f14k50工作在5v下, 因为5v可以直接从USB取电。在5v下,18f14k50端口输出的高状态大概有4.5v。然而,ADNS-3080是工作在3.3v下的,它端口接收的高状态最高只能是3.3v左右!
如果按上图直接连接那些红色线的端口, 很有可能会把A3080的端口给烧坏。
在这个时候我们用简单的分压电路就能避免这种情况。下图中的箭头表明电压信号是从18f14k50流向A3080。[size=10.5pt]
[size=10.5pt][img]http://public.blu.livefilestore.com/y1plRX2035YEI_VC7I65_EcwP-r5Wrw3FDoHbbMMTfmG0AtcPLtFSoNZQ3sRL-7nE23ErXCAHvhd-cY-IV9gTcb8A/T42.jpg?psid=1[/img]
注意,A3080 的MISO是输出到单片机的,所以不用分压,因为18f14k50的输入可以兼容3.3v的电压。
另外18f14k50可以工作在3.3v下,在这个时候,就没有必要用分压电路了。我在改金环蛇的时候,只想直接USB取电,其实加一个稳压电路就可以省下这些电阻。
单片机的按键输入是有一些要注意的地方的,我们不能直接就把一个开关一端连到单片机的输入脚,一端接地,这样是不能正常工作的。开关的打开和闭合必须要有一个明确的高或者低电压,如下图:[size=10.5pt]
[img]http://public.blu.livefilestore.com/y1pQ8EL6cMd-qHjjeFpWQbP4h4KbZIo_qlCljJetxsfS4nGihb-98OYF91nzzXafJZ1GVUvMlAOjH7UzQomChQWzQ/T44.jpg?psid=1[/img]
单片机输入的电流很小,所以5v电源通过这个电阻给单片机的端口提供了一个确定的高的逻辑状态,这种一端接电源的电阻用法称为上拉电阻。假如没有这个电阻,由于单片机内部的漏电等各种因素,输入端口的电压是随机的,很有可能会时高时低。当开关闭合接地,电压马上降到接近0,这就是低的状态。单片机就是靠这种对电压的高低来判断开关闭合与否。
18f14k50有些端口有内置的上拉电阻,比如前面图中蓝色线的中键,这个键是不需要额外的电阻上拉的,因为用了芯片内部的上拉电阻。另外机械滚轮编码器用的RB5与RB7虽然也有内置上拉电阻,但是经过实践发现,该功能不能与interrupt-on-change一起正常工作,所以会用外部的上拉电阻。
另外,现实中的按键是机械运动的开关,在编程的时候要考虑到去抖动的问题。否则,就算一个好的微动用起来都像双击一样。在写固件的时候会有进一步解释。
[size=10.5pt]
[size=10.5pt]
[size=10.5pt]
[责任编辑:'']