打造自己的专属鼠标——鼠标DIY教程(一)
作者:论坛管理员|发布时间:2014-12-02 11:59:00
[摘要]在写下这个教程的时候大概离我第一次接触单片机有5个月了吧,当时是为了实现呼吸灯的效果, 找了很多模拟电路,还用运放做了一个出来,但是效果远远没达到要求,所以一直执着地在google搜索,最后发现答案只能是—— ...
首先声明,文章是版权所有,未经许可,请不要转载。
在写下这个教程的时候大概离我第一次接触单片机有5个月了吧,当时是为了实现呼吸灯的效果, 找了很多模拟电路,还用运放做了一个出来,但是效果远远没达到要求,所以一直执着地在google搜索,最后发现答案只能是——单片机。做完之后, 我赫然发现我单片机算是入门了!之前想过动手写鼠标MCU的程序,收集了几次资料后还是放弃了, 对于完全没有接触过单片机的我来说,完全找不着北。但是完成了单片机的呼吸灯之后,感觉自己的思路和框架都很清晰了,可以说是跨越了第一步的巨大障碍。说到DIY鼠标, 首先不要觉得它很复杂。之前看过一部电影,片名是《127小时》,主角在登山的时候被滑落的岩石压住了手, 最后用小刀一点点切断手臂才逃生。故事是真人真事,事主还出了一本书。对比我们在生活中遇到的困难,具体来说,比如是现在做这个鼠标的困难,实在是比起手臂在荒无人烟的峡谷中被岩石压住的困境来说算不了什么。我们远没到绝境,我们还有很多机会和方法去完成这件事。写这个教程的目的,就是为有兴趣diy的人扫平刚接触单片机时的巨大困难。感谢互联网和Google, 没有它们, 我大概不可能去图书馆找资料,也接触不到很多专业的知识。
一、鼠标的内部
鼠标以前的历史就忽略不提了,现在光学鼠标的内部构造就是一个单片机加一块光学感应芯片。首先,这个单片机是什么东西呢?可以简单地理解为“超微型的电脑”,它在鼠标中负责处理光学芯片传过来的数据,和电脑USB的通信。典型的鼠标内部原理图就如下:
[img]http://bwqq0q.blu.livefilestore.com/y1pA2ov87Vzr6i0MDl4_Mb-hGjkcmDEJqFAkd5647PzlGJwp1ozMN16aOd6IFSNARMRl1DYPVQkYFndWjhpLumWgpyTViLmVcZ2/T1.jpg?psid=1[/img]
大家可能一看这个图就会有点晕倒的感觉,什么蛋这么复杂啊之类之类的,我只能说,看吧,看到吐,吐啊吐啊就习惯了。那些电阻 电容 三极管先不管, 我们注意力先集中在图中的两个大家伙身上。左边的就是单片机,右边的就是光学感应芯片,是我们熟悉的A3080。
这个教程的具体例子是以Microchip的18f14k50单片机和安捷伦a3080为例的。18f14k50是一块8位的单片机, 8位是什么意思呢?就是这块单片机一次只能处理8个bit的数据。(和电脑的概念是一样的, 话说电脑的CPU就是一个通用型的巨大单片机), 当然,当我们掌握了这个单片机鼠标控制的用法, 我们可以触类旁通,用16位,甚至用cortex -A8来做也是可以的,就看个人的变态程度了。
题外话,自己DIY的好处就是成本问题可以放在次要位置,比如说18f14k50这样的芯片,性能可以很好地满足我们的要求,而且可以使用RTOS(real-time operating system)实时操作系统(下文会解释这个概念),可玩性就大大提高了。市场上的厂商考虑的是大规模生产的成本,更愿意拿现成的方案来修修改改。而且另外一个方面就是他们基本只会在外壳上创新,这就是为什么有些人会说买鼠标等于买外壳。
要点:1、单片机Pic18f14k50 2、安捷伦ADNS-3080 首先要去下载这两个东西的PDF,备用,熟悉一下它们是什么东西。具体网址可以google到,题外话,国家强制我们学英语,不一定是为了考高分,在这种时候我们只有通过英语和google去获得浩瀚的知识,别指望百度。[size=10.5pt]
二、单片机开发
1、硬件环境
就像是电脑,电脑需要软件运行起来,起一定的功能,这样它才不会是一台电子废品。单片机需要把程序写在里面,然后它就雷打不动地一通电就一丝不苟地执行我们设定好的程序。这个程序我们称之为firmware,也就是固件。
单片机写入程序有两种办法:1、编程器,每个品牌的单片机有自己的专用编程器,例如microchip的芯片的话,我们写鼠标的程序不算是十分巨大的工程,就用一般的编程器可以了,可以选用PICkit3。(它这个是开源的,淘宝有很多,具体使用,后文再写)2、boot loader, 但是这个办法要求单片机中事先写好了boot loader的程序,有了boot loader,升级固件就是一件很简单的事情了。Boot loader在单片机开机时接管单片机,跟电脑中升级的程序通信。我们就可以通过USB直接写入单片机的固件。(就像RAZER的升级固件)关于boot loder的详细解释,后文再谈。
2、软件环境
C语言,这个是我这个教程所用的编译器的语言。关于这个程序语言的问题,也不用我多说了。如果你一点编程经验都没有,建议先去搜索看一下C语言的HELLO WORLD例子。
我们将要使用的编译器是CCS, 这是pic单片机的C语言编译器之一,虽然它编译出的代码不是最优的, 但是好处就是简单易懂,适合我们新手使用。另外,C语言的可移植性十分优秀,基本上,我们以后可以移植到更高级的芯片上,而只做少量的代码修改。
最后,我们需要一个仿真的程序,Proteus 7.5或者7.4,, 这个程序异常牛B, 能在程序中仿真pic18f14k50,我们可以在实际动手做电路之前,验证一下程序是否正常工作。这个是可选项,可以看自己的需要来下载,因为这个程序对usb的仿真不太好,win xp下容易蓝屏。
[责任编辑:'']