无需Windows活动窗口进行音量控制

技术分类: 消费电子设计  | 2007-05-28
Lane Hauck,Maxim公司

  引言

  我工作时喜欢有点背景音乐,会打开Windows Media Player,按下 PLAY键来播放音乐。但有电话打进来时,我希望能不用鼠标在桌面上到处找Media Player图标来调低音量或按暂停键。另外,我还有一个朋友抱怨在用PC机玩视频游戏时,游戏会占据整个屏幕,因此调整音量非常麻烦。

  为解决这一问题,本文提供了一个新方案来实现Windows操作系统下的音量控制。 该方案使用一个连接USB端口的旋钮来控制音量,转动旋钮调节音量,按下旋钮暂停播放,再按一次恢复播放。按下并旋转旋钮可以进行选曲。由于它控制整个Windows的音量,因此也控制所有正在被播放的音乐,包括你的Email告警和游戏音乐,这样即使Windows Media Player不是当前活动窗口也可以被控制。

图1该解决方案采用USB HID不需驱动程序只需将该HID兼容设备插入Windows系统就可以工作通过一个连接USB端口的旋钮来控制音量转动旋钮调节音量按下旋钮暂停播放再按一次恢复播放按下并旋转旋钮可以进行选曲


  我把这一设计称为USB HID (人机接口设备) (如图1),不需驱动程序,只需将该HID兼容设备插入Windows系统就可以工作。对Windows系统来说,我的HID控制器就像一个遥控器,可以在 HID 报告中看到它 (当然不止这一个)。目前,这个有趣的控制器在我的键盘旁边有了一个固定位置


  低成本 USB

  设计需要挑选一套低成本的微控制器 + USB方案。我在网上找到几款集成了USB控制器的微控制器,但都很昂贵,而且需要我不具备的开发工具。看来我只能选择Atmel的AVR微控制器了,因为我已经有了一套Atmel的 JTAGICE-II,一个低成本的全功能 ICE (在线仿真器)。在Atmel AVR 产品线的低端,从Digi-Key得到AtTiny13的单片报价仅为$1.29,而且提供小型的8脚SOIC封装,非常适合这一应用。Atmel 提供了很好的低成本开发工具,其中包括一个叫作AVRStudio的汇编编译器,可被用来编写汇编代码。

  AtTiny13不包括 USB控制器,但没问题,Maxim的MAX3420E是一个包括了USB收发器的低成本USB控制器,其与mC的接口仅需几根SPI(串行外设接口)数据线,它将占用AtTiny五个I/O 接口中的4个,但MAX3420E自己还有 I/O,可以补偿被占用的I/O,原理图如图2:

图2Maxim的MAX3420E是一个包括了USB收发器的低成本USB控制器其与mC的接口仅需几根SPI数据线它将占用AtTiny五个I/O 接口中的4个但MAX3420E自己还有I/O可以补偿被占用的I/O


  U1 是USB控制器,通过SPI接口配置寄存器。U2连接USB接头上的 5V VBUS 信号,将其降压到3.3V给MAX3420E 和AtTiny13供电。旋钮编码器和LED接MAX3420E的通用输入输出引脚。J2用来给AtTiny调试和装载程序。电阻R4 用来隔离系统复位信号与可编程/装载复位信号。当装载器或ICE使用J2时,上拉电阻R3用来关断MAX3420E 的SPI接口。 

  为了节省一个引脚,AtTiny13采用半双工模式与MAX3420E 的SPI接口中的一根双向数据线通信(既做 MOSI又作MISO)。电阻R7 用来避免读取MAX3420E寄存器数据时造成冲突。在第8个SCLK 上升沿,MAX3420E SPI接口采样命令字节第8位,随后开始在数据线上输出第1位数据。由于采用bit-bang 的SPI接口无法在数据第8位将SCLK拉高,然后在同一指令内立即放弃对数据线的控制,所以有一段时间 AtTiny13和MAX3420E都在驱动数据线 。电阻R7用来在此期间限制电流,限制到大约3mA。

  SPI通信

  AtTiny13并没有一个硬件的SPI单元,但幸运的是MAX3420E的SPI接口非常简单,可以任何速度运行。这意味着AtTiny13可通过软件利用bit-bang方式的I/O模拟SPI接口。MAX3420E可支持3线, 4线或5线的SPI接口。不能减少的信号是SCLK (串行时钟), SS# (从器件选择),以及一个双向数据引脚MOSI/MISO (主出从入/主入从出)。我用了AtTiny13的第4个输入引脚连接MAX3420E 的INT 引脚,以节省代码空间,降低SPI总线流量。

  关于HID

  USB HID的规格书定义了一系列传感器、按钮、灯光等用户希望连接到应用程序的外设。 “Universal Serial Bus HID Usage Tables”(www.usb.org)详细介绍了数百种建议的“应用”。如果你希望建立一个弹球仿真程序的控制器,你可以在 “Game Controls”那一页(在HID中每一类设备都有一“页”)看到挡板的“Usage ID”是0x2A。当你建立自己的HID报告格式时,可以将报告字节中的一位对应该页代码,这样,该弹球仿真程序就可以自动搜寻该HID设备,在器件报告描述符中找到该页代码,如果匹配 ,会将该位对应成一个弹球挡板。

  这并不意味着每一个弹球仿真程序会检查所有应用。HID是一个双向协议:HID设备和 Windows应用必须使用HID规范中指定的代码。

0
0
(请您对文章做出评价)
1】【2】【3
加载中

对文章的评论

更多评论

剩余字数:  

浏览该文章的用户还看过...

  • 文 章

  • 论 坛

  • 博 客

  • 小 组

设计资源与分销

  • 博客推荐

  • 论坛推荐

  • 在线研讨会