“活着本来没有什么意义,但是活着,就可以找到有趣的事情。就像你发现了这朵花,而我有发现了你一样。”
——大蛇丸
上期讲了我们将要用到的RTOS的整体架构,这期的主角是我们经常提起的安捷伦ADNS-3080,这里将比较详细地根据官方PDF的资料解释,理解了这部分以后,我们会对这块光学芯片比较熟悉了。这段时间,看到论坛上又有关于使用3060的EC2 什么1800dpi的事情,相信大家在了解adns-3080后会有一个基本的判断。大家要学习如何去使用一块光学芯片,在这个教程的最后,我们要运用这套方法去做ADNS-9500。
四、安捷伦 ADNS-3080
1、ADNS-3080的工作环境
[img]http://lcwava.blu.livefilestore.com/y1pJ8e5yxH8G3ggdfBwh2GyWPM-CehoaJKtmb65q7j11Fj-QEpXe0CxmgkPDqE4lTkZZlG7wpQYULvay2WM3D1Wjdpn0iIjxTXZ/T31.jpg?psid=1[/img]
如上图, 一块ADNS-3080一共有20个脚,下图是从正面看的顺序,注意芯片上的圆点表示的是1脚的位置。
1:spi的NCS脚,用来控制spi通信接口是否可用(google spi串行通信,了解一下)
2:spi Master IN Slave OUT
3:spi 时钟信号
4:Matser OUT Slave IN
5:LED 控制
6:光学芯片复位脚
7:待机脚 No Power Down
8:震荡信号脚 OUT
9:屏蔽(用来屏蔽谐振器)
10:震荡信号脚 IN
11:无作用
12:连接到 VDD3脚
13:连接参考电容 +
14:连接参考电容 -
15:VDD3 电源
16:GND 接地脚
17:VDD3 电源
18:无作用
19:接地
20:无作用
[img]http://lcwava.blu.livefilestore.com/y1p2UO0tviH-NmQiin2EjirWx-_3MySeU-Nvd81DkQ98hQiIcf6fTYRKYqjQKyGjVdEuKvlFDTYlp5zGVaPh1EOMSgkHHFuz3tm/T32.jpg?psid=1[/img]
根据列表,如上图红圈所示,ADNS-3080工作的4大要点分别是:
a. 3.3v的电源,与17、15、19、16脚有关
b. 单片机至少要有6个脚与ADNS-3080连在一起,与1、2、3、4、6、7有关
c. ADNS-3080需要一个24Mhz的陶瓷谐振器,连接10、8,屏蔽可不连接
d. ADNS-3080通过一个BS170的场效应管去控制LED,5脚
从这里可以看到,要使A3080动作起来,其实需要的东西很少,3.3v可以通过电阻限流获得,保险一点可以用图中的稳压,如果是找一块全新的A3080芯片可能会比较有难度,我们可以用一些现成的鼠标,比如金环蛇,罗技的MX518,炼狱蝰蛇等,只有光学芯片正常就可以了。我们可以用它们现成的A3080电路。打开这些鼠标之后,你会发现A3080的外围电路基本是一致的,除了滚轮是编码或者是光学的区别。至于如何去分析电路, 后面几期会用金环蛇去做例子。
[i=s] 本帖最后由 超电磁侠 于 2011-1-16 17:51 编辑 [/i][size=4][font=宋体]2[font=宋体]、[/font][font=Times New Roman]ADNS-3080[/font][font=宋体]的工作[/font][/font][font=宋体][/font][/size][size=4][font=宋体][/font][/size][size=4][font=宋体] 通电之后,单片机要首先通过[font=Times New Roman]RESET[/font][font=宋体]脚发出一个脉冲,将[/font][font=Times New Roman]A3080[/font][font=宋体]复位,然后将[/font][font=Times New Roman]NPD[/font][font=宋体]升高,让[/font][font=Times New Roman]A3080[/font][font=宋体]处于工作状态。接着:[/font][/font][font=宋体][/font][/size][size=4][font=宋体]a. [font=宋体]通过[/font][font=Times New Roman]spi[/font][font=宋体]传输[/font][font=Times New Roman]SROM[/font][font=宋体], [/font][font=Times New Roman]SROM[/font][font=宋体]相当于[/font][font=Times New Roman]A3080[/font][font=宋体]的固件,不传输[/font][font=Times New Roman]SROM[/font][font=宋体]也可以,[/font][font=Times New Roman]A3080[/font][font=宋体]就工作在默认条件下,据实际测试,有[/font][font=Times New Roman]SROM[/font][font=宋体]的情况下表现好些。[/font][/font][font=宋体][/font][/size][size=4][font=宋体]b.[font=宋体]传输完[/font][font=Times New Roman]SROM[/font][font=宋体],就可以开始进行移动数据的读取了。[/font][/font][font=宋体][/font][/size][font=宋体][size=4][/size][/font][size=4][font=宋体] A3080[font=宋体]其实本身也是一个单片机,只不过是带了光学感应而已,拆过[/font][font=Times New Roman]IO[/font][font=宋体]的同学会发现,[/font][font=Times New Roman]IO[/font][font=宋体]只有一块芯片,这种类型的就是把[/font][font=Times New Roman]USB[/font][font=宋体]界面也做进去了,所以单靠自己就可以和电脑通信。[/font][/font][font=宋体][/font][/size][size=4][font=宋体] 既然[font=Times New Roman]A3080[/font][font=宋体]是单片机,那么无论什么操作都要遵循一个时间的概念。打比方说,主控执行了一次询问[/font][font=Times New Roman]A3080[/font][font=宋体]移动数据的操作,那么到下一次询问,要有一个至少的时间间隔,因为[/font][font=Times New Roman]A3080[/font][font=宋体]要花时间去准备和传输这些数据。我们在官方[/font][font=Times New Roman]PDF[/font][font=宋体]就可以看到,里面最关键的词就是[/font][font=Times New Roman]Delay[/font][font=宋体]。[/font][/font][font=宋体][/font][/size][font=宋体][size=4][/size][/font][size=4][font=宋体]3[font=宋体]、与[/font][font=Times New Roman]A3080[/font][font=宋体]的通信[/font][/font][font=宋体][/font][/size][font=宋体][size=4][/size][/font][font=宋体][size=4] SPI[font=宋体]通信有[/font][font=Times New Roman]4[/font][font=宋体]种模式,具体参考[/font][font=Times New Roman]SPI[/font][font=宋体]的资料,这里的重点是[/font][font=Times New Roman]A3080[/font][font=宋体]要用哪种模式呢。我们来仔细看官方的[/font][font=Times New Roman]PDF[/font][font=宋体]第[/font][font=Times New Roman]16[/font][font=宋体]页,关于[/font][font=Times New Roman]write [/font][font=宋体]和[/font][font=Times New Roman]read operation[/font][font=宋体]的描述。[/font][/size][/font][font=宋体][size=4][font=宋体][img]http://public.blu.livefilestore.com/y1pZdMULcvL1oHHCT8pDLXkqs-jQ56uhxyE1zJ9b2WSeMy5MO_cFMPCD2jDrH8DDiad2wHmzi6SVQKyYJudnOoX7A/T33.jpg?psid=1[/img] [/font][/size][/font][font=宋体][size=4][font=宋体][/font][/size][/font][font=宋体][size=4][font=宋体][font=宋体]我们可以获得这样的关键信息: [/font][font=宋体][/font][font=宋体]a. [font=宋体]读或写操作要靠发送的数据的最高位来区别,“[/font][font=Times New Roman]1[/font][font=宋体]”是写,“[/font][font=Times New Roman]0[/font][font=宋体]”是读。[/font][/font][font=宋体][/font][font=宋体]b. SPI[font=宋体]的工作模式,从主控端出发,应该是 [/font][font=Times New Roman]send out on SCLK rising edge, sampled on SCLK falling edge [/font][font=宋体]这个要和文中的描述反过来,它是从[/font][font=Times New Roman]Sensor[/font][font=宋体]的角度来描述的,而我们要考虑主控的角度。另外,我们还要结合[/font][font=Times New Roman]PDF[/font][font=宋体]中的图来进行设置的判断。[/font][/font][font=宋体][/font][font=宋体]c. 250ns[font=宋体]是[/font][font=Times New Roman]SCLK[/font][font=宋体]的最小[/font][font=Times New Roman]high[/font][font=宋体]状态[/font][font=Times New Roman],[/font][font=宋体]那么周期是[/font][font=Times New Roman]500ns,[/font][font=宋体]那么最高频率是[/font][font=Times New Roman]2Mhz, [/font][font=宋体]但是 实际上[/font][font=Times New Roman],[/font][font=宋体]到后面会发现我们的固件将以大概[/font][font=Times New Roman]3Mhz[/font][font=宋体]的[/font][font=Times New Roman]SCLK[/font][font=宋体]来通信[/font][font=Times New Roman],[/font][font=宋体]。没用示波器来看信号[/font][font=Times New Roman], [/font][font=宋体]但是读写[/font][font=Times New Roman]A3080[/font][font=宋体]一切正常,这个算是“超频”了[/font][font=Times New Roman]....[/font][/font][font=宋体][/font][font=宋体][/font][font=宋体]我们与[font=Times New Roman]A3080[/font][font=宋体]通信就是通过主控单片机的[/font][font=Times New Roman]SPI[/font][font=宋体]接口发出读或者写操作的命令,这些命令都体现成二进制的数据流,简单来说,就是两块芯片在互相发电报,发短信。[/font][/font][font=宋体][/font][font=宋体][/font][font=宋体][/font][font=宋体]再通过对比[font=Times New Roman]18f14k50 [/font][font=宋体]的[/font][font=Times New Roman]SPI[/font][font=宋体]模块的设置图和[/font][font=Times New Roman]A3080[/font][font=宋体]读写信息的序列图, 我们就能找出对应的[/font][font=Times New Roman]SPI[/font][font=宋体]工作模式了。[/font][/font][font=宋体][font=宋体][/font][/font][font=宋体][font=宋体][img]http://public.blu.livefilestore.com/y1pAQC9-vMwCIgaJKcUhxpEyQIzhq08LPKvrtLXiV40fpn4A2xcGFr2Gf_UYSU6ysuYAeT3kKqARrC9Pu8GWoeEhA/T34.jpg?psid=1[/img] [/font][/font][font=宋体][font=宋体][/font][/font][font=宋体][font=宋体] [img]http://public.blu.livefilestore.com/y1pNmulwgsGhcfJTA9Dh-G-2zIhToDO1TbRnJwJiwEfFZJC7C1eMn--v3pycg7PSds3bIbBKKzp1BZxn9iyJwvrWA/T35.jpg?psid=1[/img] [/font][/font][font=宋体][font=宋体][/font][/font][font=宋体][font=宋体][font=宋体]4[font=宋体]、[/font][font=Times New Roman]ADNS-3080[/font][font=宋体]的各种延时[/font][/font][font=宋体][/font][font=宋体] 要发掘[font=Times New Roman]ADNS-3080[/font][font=宋体]的强大,[/font][font=Times New Roman]PDF[/font][font=宋体]要基本看,要消化,所以,不要怕阅读。[/font][font=Times New Roman]P17[/font][/font][/font][/font][/font][/size][/font][font=宋体][size=4][font=宋体][/font][/size][/font][font=宋体][size=4][font=宋体][/font][/size][/font][font=宋体][size=4][font=宋体][img]http://public.blu.livefilestore.com/y1pBQ8Ed7GSlBAz9cy6diV95zuMGkG03DqeywD25ata8lOTLlRLAxFbnA_J-ZI_rJh6TuTaiDrAkbo-3yuWGvp8vw/T36.jpg?psid=1[/img] [/font][/size][/font][font=宋体][size=4][font=宋体][font=宋体]基本上 比较特殊的是读操作,地址[font=Times New Roman]0x02, motion[/font][font=宋体]这个寄存器需要[/font][font=Times New Roman]75us[/font][font=宋体]的延时,到后面真正编写鼠标固件的时候会看到这些延时的操作,现在先留个印象。[/font][/font][font=宋体][/font][font=宋体][/font][font=宋体]ADNS-3080[font=宋体]的[/font][font=Times New Roman]SROM[/font][font=宋体]传输, [/font][font=Times New Roman]Moion Burst[/font][font=宋体]读取模式也是比较特殊, 建议到[/font][font=Times New Roman]PDF[/font][font=宋体]的[/font][font=Times New Roman]P18[/font][font=宋体]页开始大概浏览一下就可以了,同样会在写鼠标固件的时候讲解一下[/font][/font][font=宋体][/font][font=宋体][/font][font=宋体]5[font=宋体]、[/font][font=Times New Roman]ADNS-3080[/font][font=宋体]的参数与设置[/font][/font][font=宋体][/font][font=宋体] [color=#FF0000]a. DPI[font=宋体]可以在[/font][font=Times New Roman]1600[/font][font=宋体]与[/font][font=Times New Roman]400[/font][font=宋体]之间切换, 我们如果是要[/font][font=Times New Roman]800[/font][font=宋体]怎么办? [/font][font=Times New Roman]1600[/font][font=宋体]的状态下,获得的移动数据除以[/font][font=Times New Roman]2[/font][font=宋体],四舍五入就可以了。[/font][/color][/font][font=宋体][color=#FF0000][/color][/font][color=#FF0000][font=宋体] b. fram rate[font=宋体]可以设定为[/font][font=Times New Roman]2000[/font][font=宋体]~[/font][font=Times New Roman]6469[/font][font=宋体]间任意整数[/font][/font][font=宋体][/font][/color][font=宋体][color=#FF0000] c. [font=宋体]通过[/font][font=Times New Roman]Squal[/font][font=宋体]寄存器, 我们可以知道当前所用鼠标垫是否适合[/font][font=Times New Roman]A3080[/font][font=宋体]使用[/font][/color][/font][font=宋体][/font][font=宋体][/font][font=宋体]暂时[font=Times New Roman]A3080[/font][font=宋体]能挖掘的也就这几个东西了,不过肯定会有更有想象力的人把[/font][font=Times New Roman]A3080[/font][font=宋体]榨干,这里写的东西只是抛砖引玉,大家掌握以后可以充分发挥自己的创造力。我们下期再继续![/font][/font][/font][/size][/font]