加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

震撼!!!超强教程!!! 打造自己的专属鼠标——鼠标DIY教程(一)

(2011-01-16 19:55:11)
标签:

安捷伦

单片机

编程器

鼠标

it

分类: 鼠标DIY教程

本套教程作者为 外设天下论坛  超电磁侠 

声明:文章是版权所有,未经许可,请不要转载。

 

在写下这个教程的时候大概离我第一次接触单片机有5个月了吧,当时是为了实现呼吸灯的效果,找了很多模拟电路,还用运放做了一个出来,但是效果远远没达到要求,所以一直执着地在google搜索,最后发现答案只能是——单片机。做完之后,我赫然发现我单片机算是入门了!之前想过动手写鼠标MCU的程序,收集了几次资料后还是放弃了,对于完全没有接触过单片机的我来说,完全找不着北。但是完成了单片机的呼吸灯之后,感觉自己的思路和框架都很清晰了,可以说是跨越了第一步的巨大障碍。说到DIY鼠标,首先不要觉得它很复杂。之前看过一部电影,片名是《127小时》,主角在登山的时候被滑落的岩石压住了手,最后用小刀一点点切断手臂才逃生。故事是真人真事,事主还出了一本书。对比我们在生活中遇到的困难,具体来说,比如是现在做这个鼠标的困难,实在是比起手臂在荒无人烟的峡谷中被岩石压住的困境来说算不了什么。我们远没到绝境,我们还有很多机会和方法去完成这件事。写这个教程的目的,就是为有兴趣diy的人扫平刚接触单片机时的巨大困难。感谢互联网和Google,没有它们, 我大概不可能去图书馆找资料,也接触不到很多专业的知识。


一、鼠标的内部   

鼠标以前的历史就忽略不提了,现在光学鼠标的内部构造就是一个单片机加一块光学感应芯片。首先,这个单片机是什么东西呢?可以简单地理解为超微型的电脑,它在鼠标中负责处理光学芯片传过来的数据,和电脑USB的通信。典型的鼠标内部原理图就如下:
http://bwqq0q.blu.livefilestore.com/y1pA2ov87Vzr6i0MDl4_Mb-hGjkcmDEJqFAkd5647PzlGJwp1ozMN16aOd6IFSNARMRl1DYPVQkYFndWjhpLumWgpyTViLmVcZ2/T1.jpg?psid=1打造自己的专属鼠标——鼠标DIY教程(一)" />

大家可能一看这个图就会有点晕倒的感觉,什么蛋这么复杂啊之类之类的,我只能说,看吧,看到吐,吐啊吐啊就习惯了。那些电阻 电容三极管先不管, 我们注意力先集中在图中的两个大家伙身上。左边的就是单片机,右边的就是光学感应芯片,是我们熟悉的A3080
这个教程的具体例子是以Microchip18f14k50单片机和安捷伦a3080为例的。18f14k50是一块8位的单片机, 8位是什么意思呢?就是这块单片机一次只能处理8bit的数据。(和电脑的概念是一样的,话说电脑的CPU就是一个通用型的巨大单片机), 当然,当我们掌握了这个单片机鼠标控制的用法,我们可以触类旁通,用16位,甚至用cortex -A8来做也是可以的,就看个人的变态程度了。
题外话,自己DIY的好处就是成本问题可以放在次要位置,比如说18f14k50这样的芯片,性能可以很好地满足我们的要求,而且可以使用RTOSreal-time operating system)实时操作系统(下文会解释这个概念),可玩性就大大提高了。市场上的厂商考虑的是大规模生产的成本,更愿意拿现成的方案来修修改改。而且另外一个方面就是他们基本只会在外壳上创新,这就是为什么有些人会说买鼠标等于买外壳。
要点:1、单片机Pic18f14k50  2、安捷伦ADNS-3080   首先要去下载这两个东西的PDF,备用,熟悉一下它们是什么东西。具体网址可以google到,题外话,国家强制我们学英语,不一定是为了考高分,在这种时候我们只有通过英语和google去获得浩瀚的知识,别指望百度。


二、单片机开发
1、硬件环境
就像是电脑,电脑需要软件运行起来,起一定的功能,这样它才不会是一台电子废品。单片机需要把程序写在里面,然后它就雷打不动地一通电就一丝不苟地执行我们设定好的程序。这个程序我们称之为firmware,也就是固件。
单片机写入程序有两种办法:1、编程器,每个品牌的单片机有自己的专用编程器,例如microchip的芯片的话,我们写鼠标的程序不算是十分巨大的工程,就用一般的编程器可以了,可以选用PICkit3。(它这个是开源的,淘宝有很多,具体使用,后文再写)2boot 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下容易蓝屏。


要点:1Microchip编程器,Pickit3或更高,淘宝有一堆。 2、下载CCS编译器,这个不是免费的,这个时候就可以去百度,或者google,我用的版本是4.110,下载的版本不能小于这个版本。3、下载MicrochipMPLab IDE最新版,这个是免费的,在官网可以找到链接。这个程序是PICkit3工具的控制,要用它来写入我们编译好的东西。4、下载Proteus 7.5版或者7.4版。5、整个软件环境的搭建最好在一个虚拟机中进行,这样便于管理和组织,日常用的电脑不至于太混乱。尤其是如果使用proteus来仿真usb,可能会出现意想不到的蓝屏情况。虚拟机不怕频繁的重启。
上文提到的编程器可以先不买,但是CCS,Proteus,这两个软件要先下载装上。

三、单片机固件的编写
下文不再重复提示了,教程是针对pic18f4k50来写的,所以接口等硬件方面的的东西是不具普遍性的,如果要用到别的型号的单片机,必须按照该型号的资料来修改。


1、热身,最简单的单片机程序

我们先别急着马上就开始鼠标的编程,我们首先来做一些简单的热身动作,这样会使后面的理解和使用更流畅。
单片机的编程中,最常用的“hello world”,就是点亮一个LED灯。Pic的芯片每个脚大概能提供25ma左右的电流,足够LED用了。下面我们就来看看,用C语言怎么写。打开ccs中的Pcw编译环境,新建一个project。我们先在windows下新建一个目录,然后新建一个txt文件,将后缀改为.c,然后在Pcw中点:

http://bwqq0q.blu.livefilestore.com/y1pkfDrLxGISvTNbac6SwgxVmKeYE2I4yqDv7FKsto2rQLvBWzpPzi59kFd0MJO55m1VN_ljDOHgQUUPxY068jD_hWa_sTZloyw/T2.jpg?psid=1打造自己的专属鼠标——鼠标DIY教程(一)" />

http://bwqq0q.blu.livefilestore.com/y1psBQEzUrmdPJVOyOIV5qjq6moY0XWB_ySy45HVTJ5zGLi9TXvDSrmzArfW5bOtU-vMdw5W0taz6Ec5be4XXl8cdWc088FJeEe/T3.jpg?psid=1打造自己的专属鼠标——鼠标DIY教程(一)" />

http://bwqq0q.blu.livefilestore.com/y1prdF8gIS1I52wizq-5bTTEz_TpzG64p2ehF_GzmmpaAg44ogn1qaweru84TWR2MRaRM-ce0Y6owK_vkpWdPOYiXRiWTfk3hMO/T4.jpg?psid=1打造自己的专属鼠标——鼠标DIY教程(一)" />

选我们新建的文件,按确定。

 



http://bwqq0q.blu.livefilestore.com/y1pcT45U0lyig9gNy_-iSQox625YfcAhggaCUM34JuDbAV1c6_QxxtKGGiSISozhqWpkffNPxZYBeB-Tu3QwOMHXfKzcOkuDmNW/T5.jpg?psid=1打造自己的专属鼠标——鼠标DIY教程(一)" />

下拉菜单中选对型号。

然后在文档中复制或者键入:

#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)

void main(void)
{

output_high(PIN_C0);


}


注意: 1 CCS这个版本是不区分变量的大小写的。 2、看似简单的一项程序,其实后面的汇编语言有好几行,output_high()是ccs封装的一个函数,具体的用法和别的函数可以看在ccs官网下载的手册。


然后,我们按http://bwqq0q.blu.livefilestore.com/y1pYoxKWXDoCa2Sj1S004P2KsPInh_ejncDg4l6vfOOaFysi9p7VRgx0JUCGEgXFxju3SoRDJGW9_dP_zHVTzCcNDVK3-K1ymir/T6.jpg?psid=1打造自己的专属鼠标——鼠标DIY教程(一)" />


解释一下,什么是complie,简单来说就是生成单片机芯片的汇编语言,这些语言的指令在单片机中对应一定的16进制编码,所以我们得出最后写入单片机的.Hex文件。



然后我们打开安装好的Proteus目录,在BIN目录那找到、运行ISIS.exe,这个就是设计仿真用的程序。(我用的版本不知道为什么是中文的,是绿色版),新建一个项目,模板选default就可以。



右击空白的地方,




http://bwqq0q.blu.livefilestore.com/y1pA45H6FI9PKMvuGjjl3oOvNWeszztARiE2CTdbK7Dd-lq5v8IBPSAS89xH4Kt149kYx06RP2iP3dcdMAu9IIxkGMlEGocnjKk/T7.jpg?psid=1打造自己的专属鼠标——鼠标DIY教程(一)" />

选对器件
http://bwqq0q.blu.livefilestore.com/y1ppS54LL3-dFQjKDJQ1eGK9wr7f6YQpbzbpDr9lpBY3gtZ9PuTRWCKjK23roR5GzFZRhEqWyrk1m3TDLfYmCi_MeXYcODF5V76/T8.jpg?psid=1打造自己的专属鼠标——鼠标DIY教程(一)" />

http://bwqq0q.blu.livefilestore.com/y1pytiKlztekbh48nEfOagTU4sxUm9IseLFqkN2bmZis5v3prff-J1lVJEhSAyCLwv8l_uKvQ1Uotnovc21NiG8KX3l1L6AlU_D/T9.jpg?psid=1打造自己的专属鼠标——鼠标DIY教程(一)" />

这里简单解释一下这个单片机的引脚定义, microchip这个系列的单片机将引脚会分为RARBRC三组,引脚更多,分组越多。每个引脚都有复合的功能,比如输出输入,触发,震荡信号输出输入等等,我们现在热身用到的是引脚的输出功能。

再重复刚才选取元件的步骤,在选取窗口的搜索那打LED

http://bwqq0q.blu.livefilestore.com/y1pCxgbfLO4jxQZ7t9gv4wmQpItHvDJke9DDUeuSJdJ236C2XpqCw_QFMUguq0ocAQ9FXkJkeu-RY5OfYRgH8UYgP0lV8k7NatI/T10.jpg?psid=1打造自己的专属鼠标——鼠标DIY教程(一)" />

选取蓝色的Led来放置,其他颜色也行,但一定要是标了Animated那些

http://bwqq0q.blu.livefilestore.com/y1p_uc7bFvq9tAOJ3-q_SSNyM4JMxltqpiBTP0y8Q9F3KUwfdCG75lCfbDTwb114HKSeZgVJD2iIrBXIbZPbd5tflJj3cRf-l3H/T11.jpg?psid=1打造自己的专属鼠标——鼠标DIY教程(一)" />

放置好LED后,选取接地端点,然后可以用鼠标将它们的端点连接在一起。如下图:
还记得我们程序中写的是output_high(PIN_C0) 吗,

http://bwqq0q.blu.livefilestore.com/y1piHnHtH4AvGhqtlnrWJUYX-1Q9-Mz4v97Kl7qgX4-aH7EEHdfhTF0YMmdPpCobR2sMikMhBoxFlyvrgo-4pUQuPGy1lt90gj2/T12.jpg?psid=1打造自己的专属鼠标——鼠标DIY教程(一)" />

所以这里连接到RC0

现在我们点两下下单片机的图形,打开编辑窗口

http://bwqq0q.blu.livefilestore.com/y1piHnHtH4AvGhwY6WAl39PKc3cUfwZEgISGv4bGqZqmHcdj5IwQwWBG1tro2TjYM4pj6ZYHjYveurL13OMghZghgeyuAOd4Dl2/T13.jpg?psid=1打造自己的专属鼠标——鼠标DIY教程(一)" />

program file的文件定位成我们之前编译好的hex文件,就位于我们创建的ccs项目的目录下。运行速度可改可不改,我们将来要运行的鼠标固件会跑在48MHz下。

按确定保存好,点击左下角那个“播放”按钮,看到了吧? Led亮了!

http://bwqq0q.blu.livefilestore.com/y1pKV7RKcAt3XsJe81kFpwz0Kx4r5WJTP2I_cTarKV7ht2KWUpc0qZw3XQCZtlpcsS0NmtULwXjqVmI5_EBIiPb0Aw-OAMp8mcF/T14.jpg?psid=1打造自己的专属鼠标——鼠标DIY教程(一)" />

至于低电平是什么意思,可以去Google一下,我截图截到头有点晕了,请听下回分解了!

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有